Wird es aufhören? (Räuber)


46

Das ist der Räuberfaden. Der Faden der Bullen ist da .

Ihre Herausforderung besteht darin, die Einreichung eines Polizisten zu knacken, indem Sie eine Eingabe finden, die ihn zum Stillstand bringt. Sie müssen nicht herausfinden, warum oder alle Eingaben, die zum Anhalten führen, wenn es mehr als eine gibt, oder die Eingabe, die der Cop beabsichtigt hat, nur eine Eingabe ist ausreichend.

Wenn Sie eine Einreichung geknackt haben, veröffentlichen Sie einen Link in einem Kommentar oder bearbeiten Sie den Beitrag des Polizisten. Sie können Ihren Beitrag auch für einen Mod kennzeichnen, um ihn im Beitrag des Polizisten zu bearbeiten. Veröffentlichen Sie außerdem die verwendete Eingabe und einen Link zum Beitrag des Polizisten in einer Antwort in diesem Thread. Der Räuber, der die meisten Einsendungen knackt, gewinnt.

Mehrere Personen können Risse an dieselbe Polizistenübermittlung senden, sofern sie unterschiedlich sind.

(Wenn SE Ihre doppelte Antwort in einen Kommentar umgewandelt hat, möchten Sie möglicherweise über diese Funktionsanforderung abstimmen. )


Auf der Suche nach ungerissenen Einsendungen?

fetch("https://api.stackexchange.com/2.2/questions/135363/answers?order=desc&sort=activity&site=codegolf&filter=!.Fjs-H6J36vlFcdkRGfButLhYEngU&key=kAc8QIHB*IqJDUFcjEF1KA((&pagesize=100").then(x=>x.json()).then(data=>{var res = data.items.filter(i=>!i.body_markdown.toLowerCase().includes("cracked")).map(x=>{const matched = /^ ?##? ?(?:(?:(?:\[|<a href ?= ?".*?">)([^\]]+)(?:\]|<\/a>)(?:[\(\[][a-z0-9/:\.]+[\]\)])?)|([^, ]+)).*[^\d](\d+) ?\[?(?:(?:byte|block|codel)s?)(?:\](?:\(.+\))?)? ?(?:\(?(?!no[nt][ -]competing)\)?)?/gim.exec(x.body_markdown);if(!matched){return;}return {link: x.link, lang: matched[1] || matched[2], owner: x.owner}}).filter(Boolean).forEach(ans=>{var tr = document.createElement("tr");var add = (lang, link)=>{var td = document.createElement("td");var a = document.createElement("a");a.innerText = lang;a.href = link;td.appendChild(a);tr.appendChild(td);};add(ans.lang, ans.link);add(ans.owner.display_name, ans.owner.link);document.querySelector("tbody").appendChild(tr);});});
<html><body><h1>Uncracked Submissions</h1><table><thead><tr><th>Language</th><th>Author</th></tr></thead><tbody></tbody></table></body></html>


2
Bedeutet "unterschiedlich" unterschiedliche Eingaben (z. B. alle Eingaben, die mit 2 enden, knacken den Beitrag des Polizisten - können Sie unterschiedliche Personen angeben, die mit 2 enden?) Oder unterschiedliche Familien von Eingaben oder unterschiedliche Arten von Eingaben?
Stephen

1
Mehrere Personen können Risse an dieselbe Polizistenanmeldung senden ... Bitte definieren Sie unterschiedliche .
Dennis

Antworten:


49

Malbolge, Türknauf

Probiere es online aus (Danke Dennis !)

Eingabe für Windows: F_⌠1234567890

Eingabe auf Linux-basierten Systemen mit ISO-8559-1: F_ô1234567890

Das Herzstück der Arbeitsweise des Malbolge-Programms ist, dass es von einem Verhalten des Malbolge-Interpreters abhängt, das eine Endlosschleife auslöst, wenn es auf Befehle stößt, die nicht zwischen 33 und 126 liegen. Das Programm wurde so konstruiert, dass Sie Ihre Eingabe ändern können eine einzelne Anweisung.

Ich habe den Interpreter modifiziert, um den Programmspeicherstatus zu Beginn der Ausführung zu sichern und um auch "normalisierten" Quellcode zu erzeugen, der die Form einer Liste von Op-Codes hat , die während der Ausführung des Programms ausgeführt werden. Mit dieser Information konnte man (langsam) feststellen, dass, obwohl das Programm 13 Eingaben nahm, nur die 1. und 3. Eingabe tatsächlich von Bedeutung waren.

Durch den normalisierten Code- und Speicherauszug (und einen Hauch von Debugger-Hilfe) habe ich Folgendes entwickelt:

a = op (Eingabe 1, 29524)

b = op (Eingang 3, a)

c = op (486, b)

d = op (c, 37)

e = d / 4 + d% 3 * 3 ^ 9

e muss zwischen 33 und 126 liegen

Wo opist der sogenannte tritwise "op", der in der Spezifikation beschrieben ist. Mit diesen Informationen können Sie ein einfaches Programm schreiben, das die möglichen Eingaben (0 bis 255) durchläuft und alle Lösungen findet, die die oben genannten Kriterien erfüllen. Ich hatte 2219 mögliche Lösungen gefunden, von denen einige wahrscheinlich nicht funktionieren werden (Sie können die erforderlichen Zeichen nicht eingeben). Insbesondere basieren die obigen Eingaben auf der Lösung:

(Input 1 = 70, Input 3 = 244)


Ich habe nicht den Repräsentanten, der den Cops-Beitrag kommentiert. Könnte das jemand für mich tun?
KBRON111,

4
Willkommen bei PPCG! Gut gemacht! Ich denke mit diesem Riss wirst du bald genug Repräsentanten haben :)
Stephen

1
Habe ich über kommentiert. Und ja, hervorragende Arbeit; Ich hatte die Hälfte damit gerechnet, dass Malbolge die Woche dauern würde!
Veedrac

6
Gute Arbeit! TIO verwendet UTF-8, aber durch das Einwickeln in Bash kann Ihr Riss immer noch überprüft werden. tio.run/… Du scheinst anscheinend nichts anderes zu brauchen F_ôals nebenbei.
Dennis

1
Jetzt kann ich wieder schlafen
Juan Tonina


13

JS (ES6), Juan Tonina

+0,-0

Ich habe ein bisschen reingeschaut Object.is, um zu finden. Im Grunde genommen , +0 === -0da ===prüft sie als Zahlen, und 0endlich ist , sondern Object.issieht +0und -0wie verschiedene Objekte. Sehr kluger Bulle :)

Probieren Sie es online!


Ninja hat es bekommen, als ich mich eingeloggt habe.
user3033745

Verdammt, schneller gelöst als die Zeit, die ich damit verbracht habe, über den Code nachzudenken: D
Juan Tonina

11

Python, Siphor

class A:
    i = True
    def __eq__(self, a):
        self.i = not self.i
        return self.i

a = A()
f(a)

Wir definieren Gleichheit nur neu, um genau das zu tun, was erforderlich ist, um das Programm zum Beenden zu bringen.


Obwohl ich glaube , ich definiert haben könnte nur __eq__zu raise...
g.rocket

Ich wollte mit gerade zurückkehren einreichen 0: p
Jonathan Allan

@ JonathanAllan Wie funktioniert das?
G. Rocket

1
Ziemlich sicher class A:__eq__=lambda s,o:0und f(A())macht den Job.
Jonathan Allan

1
Ah ja, brauche die Verneinung> _ <
Jonathan Allan


8

PHP, Sisyphus

(-0[0)> deal with it=1

Die Funktion parse_str ändert die Leerzeichen und anderen Zeichen in Unterstriche. Wenn Sie ein [für Array-Trennzeichen verwenden, ohne es zu schließen, wird es in einen Unterstrich geändert, die folgenden Leerzeichen werden jedoch nicht übersetzt (ich weiß nicht warum).

Probieren Sie es online!


WTF ?! Das ist verrückt ...
Veedrac

7

JavaScript (Node.js), Adnan

[]und []scheinen zu funktionieren. Ich habe versucht , ein paar von ihnen , einschließlich null, undefined, NaN...

[] >= [] && [] <= [] && [] != [] wird zu true ausgewertet.

Moral der Geschichte: JavaScript ist komisch .

Probieren Sie es online!


Ja, Arrays sind nur Objekte.
programmer5000

Und Objekte werden für diese Art von Vergleichen in Zeichenfolgen umgewandelt.
Conor O'Brien

7

JavaScript (ES7), Arnauld

Standard

"8e7" ist Lösung

var crack_me = (x=0)=>{for(;~x/x.length**3!=-2962963;);}

var key = "8e7"

crack_me(key)
console.log("stopped :)")

Hacken

Diese Zahl muss nicht berechnet werden, wir können die lengthEigenschaft neu definieren

Dies setzt ~x/x.length**3!=-2962963auffalse

var crack_me = (x=0)=>{for(;~x/x.length**3!=-2962963;);}

var key = {toString:()=>"2962962",length:"1"}

crack_me(key)
console.log("stopped :)")

Priorität des Bedieners

~ bitweise geht es erstmal nicht

** exponentiation zweite

/ division dritte


6

Bash, Veedrac

LD_TRACE_LOADED_OBJECTS

Probieren Sie es online!

Aus der ld.so(8)Manpage:

LD_TRACE_LOADED_OBJECTS

Wenn festgelegt (auf einen beliebigen Wert), listet das Programm seine dynamischen Abhängigkeiten auf, als würde es von ausgeführt ldd(1), anstatt normal ausgeführt zu werden.


Ich dachte das würde länger dauern! Ausgezeichnete Arbeit.
Veedrac

1
@Veedrac: Ich denke, seit Sie bash angegeben haben, ist es unwahrscheinlich, dass Sie eine statisch verknüpfte (z. B. busybox?) Finden /bin/yes, aber das ist möglich. In diesem Fall wird diese Umgebungsvariable ignoriert.
Peter Cordes

6

Mathematica, JungHwan

Unevaluated@Throw@"hammertime"

Keine Ahnung, ob dies die beabsichtigte Lösung ist, aber es wird ein Ausdruck übergeben, der erst ausgewertet wird, wenn auf ihn als #innerhalb der Funktion verwiesen wird. Dadurch wird die Funktion sofort wieder verlassen, ohne dass eine weitere Auswertung erforderlich ist . Sie können sehen, dass die Funktion tatsächlich aufgerufen wird (anstatt nur die Ausnahme auszulösen, bevor Sie die Funktion aufrufen), indem Sie die Funktion folgendermaßen ändern:

#0[Print@"stop";#;$IterationLimit=∞]&

Welches wird in der Tat drucken, stopbevor der Fehler ausgelöst wird.


Bingo! (Ich wollte eigentlich Unevaluated[Abort[]], aber das Gleiche.)
JungHwan Min


5

Rubin

exit

ohne newline. 3.send('exit')sicherlich nicht gleich 5, aber es führt aus Kernel#exit:

Initiiert die Beendigung des Ruby-Skripts durch Auslösen der SystemExit-Ausnahme

Es ist möglich, rufen Sie exitauf , 3 weil :

Das Kernel-Modul ist in der Klasse Object enthalten, sodass seine Methoden in jedem Ruby-Objekt [als private Methoden] verfügbar sind.

abort funktioniert auch:

Beenden Sie die Ausführung sofort, indem Sie Kernel.exit (false) aufrufen. Wenn msg angegeben ist, wird es vor dem Beenden in STDERR geschrieben.


5

JavaScript (Node.js) , Programmierer5000

Bereits geknackt, aber meins ist etwas anders :) Ich habe nicht genug Repräsentanten, um mich bei der Polizei zu äußern. Fühlen Sie sich auch frei zu bearbeiten, um die Formatierung zu beheben, mein erster Beitrag hier.

Hauptsächlich setze ich __proto__gleich eine Funktion, die wirft. Entnommen aus dem Blick auf die Mozilla-Seite für Proto. (Sorry, low rep, kann keinen Link posten.)

x = {}
let No = function () { throw 'halted' }
x.__proto__ = new No()
f = x=>{while(x.__proto__);}

Probieren Sie es online!

BEARBEITEN: Haben Sie einen Vertreter, also hier ist der Link: Mozilla__proto__


Ich habe den Polizisten für Sie kommentiert.
Stephen

1
Vielen Dank! Auch danke an alle für die ups, denke, ich kann jetzt kommentieren!
Haumed Rahmani

1
Willkommen bei PPCG: D
Conor O'Brien


5

R, Jarko Dubbeldam

function(x)if(is.list(x))return(1)

Wenn Sie zum ersten Mal etwas beisteuern, sollten Sie alle Fehler aufzeigen, die ich im Format gemacht habe.

Ziemlich sicher, dass dies gültig ist. Nur ein Umpacken von is.list (), oder?


Übrigens habe ich nicht den Repräsentanten, der das Original kommentiert, daher wäre eine Hand sehr willkommen, wenn sie gültig wäre.
CriminallyVulgar

Für Sie kommentiert.
TheLethalCoder

Nicht die beabsichtigte Lösung, aber funktioniert. Gut gemacht.
JAD

5

Javascript, Programmierer5000

Maximale Stringlänge

Verwendet eine Zeichenfolge mit einer Länge von eins weniger als die, die Ihre Engine unterstützt. Beim Hinzufügen "h"zu dieser Zeichenfolge wird ein Fehler ausgegeben. Probieren Sie es online!

function getAlmostMaxLenStr() {
  var prevBases = [];
  var base = "a";
  try {
    while(true) {
      prevBases.push(base);
      base += base;
    }
  } catch(e) {}
  for (var i = prevBases.length-1; i>=0; --i) {
    try {
      base += prevBases[i];
    } catch (e) {}
  }
  return base;
}
f(getAlmostMaxLenStr());

Herkunftsübergreifender Block

Sehr inspiriert von der Antwort von @ jadkik94 , funktioniert aber überall. Erstellt einen ursprungsübergreifenden Iframe und übergibt den .contentWindowIframe. Dies schlägt fehl, wenn die Funktion versucht, den Wert aus Gründen der Herkunftssicherheit zu verwenden.

let f=x=>{
  try {
    console.log(x+"h"); // we don't want to lock up your browser, do we ;)
  } catch (e) { console.log("Halted!\n",e); }
}
let iframe=document.createElement("iframe");
const url = location.host.indexOf("google") === -1 ? "https://google.com" : "https://stackexchange.com";
iframe.src=url;
iframe.onload=a=>f(iframe.contentWindow);
document.body.appendChild(iframe);

Primitiver Wert

Variante der .toString()Antworten - dies wird toPrimitivestattdessen nur verwendet . Es gibt ein Objekt als primitiven Wert zurück, mit dem Javascript nicht umgehen kann (daher wird ein Fehler ausgegeben). Probieren Sie es online!

f({
  [Symbol.toPrimitive](){return {}}
});

Gute Arbeit, aber noch keine Lösung! Sehr schlau!
programmer5000

4

Node.js, Adnan

{}und {}oder 2 beliebige Objekte sind die beiden Eingänge. Ich verstehe nicht einmal, wie das funktioniert.

Hier ist das erstaunliche Objekt von JS zum Vergleichen der Logik:

console.log({} == {});
console.log({} === {});
console.log({} > {});
console.log({} < {});
console.log(!!{});

console.log({} >= {});
console.log({} <= {});


Ja, das war die beabsichtigte Lösung :)
Adnan


4

Javascript (NICHT node.js) , programmer5000

Dies kann nicht hinzugefügt werden, da ein Objekt erstellt wird, das kein toString hat, da ein neues Objekt keine SetPrototypen von from enthält Object.

Eingang:

new Set()

Probieren Sie es online!


Dies war wahrscheinlich die beabsichtigte Lösung, die ich von nun an in meinem
Stephen

Entschuldigung, das scheint bei mir nicht zu funktionieren? Probieren Sie es online!
Haumed Rahmani

@HaumedRahmani hat eine Schaltfläche zum Online-Testen hinzugefügt. Ich habe Klammeraffen benutzt, nicht Babel.
Grant Davis

Nicht die beabsichtigte Lösung, aber gute Arbeit!
Programmer5000



4

Python 2, Foon

__import__("os")._exit(0)

Was es auf dem Blech sagt, im Grunde.

Probieren Sie es online aus.


Interessanterweise läuft dies bei TIO für mich ab; Unter Windows (speziell mit winpty python inputbad.py und dem Einfügen in die Zeile) wird es wie gewünscht beendet ... und ja, nicht überraschend, dass mein Schtict die "Eingabe unter Python 2 eval unter der Haube" -Bit ausnutzt
Foon

@Foon Hmm, bei TIO funktioniert es gut für mich. Siehe Link in Antwort.
Veedrac

Seltsam ... Ich muss Play gedrückt und dann die Eingabe auf meinem TIO-Link getippt und es nicht bemerkt haben
Foon

Ich bin mir ziemlich sicher, dass dies jede Python-Vorlage knackt .
Enderland

@enderland Nur wenn sie Ihre Eingabe auswerten, was die meisten von ihnen nicht tun.
Veedrac


4

Python 3, Siphor

Das hat Spaß gemacht. Wir müssen den type(x) != strCheck Pass machen, also müssen wir den Rückgabewert von kontrollieren type(). Wir müssen das __class__Attribut überschreiben und es durch ein benutzerdefiniertes Objekt ersetzen, das erweitert wird typeund dessen __ne__Methode durch ein Objekt ersetzt wird, das immer false zurückgibt. Dadurch wird die Typprüfung bestanden, die Suche schlägt jedoch fehl, da oes sich nicht um eine Zeichenfolge handelt.

class m(type):
    def __ne__(a,b):
        return False
class c:pass
o=c()
o.__class__=m("",(c,),{})
f(o)

Willkommen auf der Seite! :)
DJMcMayhem

4

C #, TheLethalCoder

System.Nullable`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]

Oder eine andere nullfähige Klasse.



3

JS (ES6)

"   "

Jedes Zeichen mit einem Code unter 10 sollte funktionieren. Ich habe taboben ein Zeichen verwendet, das SE in Leerzeichen umwandelt.



Sorry :( und ich denke, Sie müssten Anführungszeichen, damit es eine Zeichenfolge sein
Stephen

@ programmer5000, so sehe ich :(
Shaggy

Kein Problem, @StepHen; Art des Spiels. Ich habe die Anführungszeichen als implizit eingestuft, aber ich bearbeite sie in.
Shaggy

@Shaggy ich was weiß nich das Urteil, sondern f(<tab>)ist eine gültige Syntax (leere Eingabe) , und wir würden zwischen unterscheiden haben f(1)und f("1")sowieso
Stephen



Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.