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>

programmer5000
quelle
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
@NoOneIsHere codegolf.meta.stackexchange.com/q/13437/58826
programmer5000

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)

KBRON111
quelle
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
16

JavaScript (im Browser)

document.all

Das ist überraschenderweise falsch

Edit: Warum ist document.allfalsch ?

Juan Tonina
quelle
4
Ich bin sprachlos.
Dennis
3
Aahh ... Javascript, wo alles seltsam ist
Juan Tonina
1
Ja! Das ist hier die einzig richtige Antwort!
TSH
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!

Stephen
quelle
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.

g.rocket
quelle
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!

Vicente Gallur Valero
quelle
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!

total menschlich
quelle
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

Евгений Новиков
quelle
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.

Sisyphus
quelle
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.

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

Retina , PunPun1000

11111

Probieren Sie es online!

Jede Eingabe mit ns, 1 bei der die Summe der Teiler von n + 1 gleich n + 1 ist, sollte funktionieren.

Kritixi Lithos
quelle
Schön zu sehen, dass jemand die beabsichtigte Lösung
bekommt
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.

Eric Duminil
quelle
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__

Haumed Rahmani
quelle
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?

KriminellVulgar
quelle
Ü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 {}}
});
Birjolaxew
quelle
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({} <= {});

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

JavaScript (Babel Node) , Conor O'Brien

(Repost, versehentlich bei der Polizei eingesetzt.) Nicht sicher, was beabsichtigt war, aber positive Dezimalstellen, die nicht enorm sind, scheinen alle zu funktionieren.

Außerdem kann ich in Cops noch keinen Kommentar abgeben.

f(0.1)
console.log('done')

Probieren Sie es online!

Haumed Rahmani
quelle
Vergaß auch das, gute.
Conor O'Brien
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!

Grant Davis
quelle
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

Bash 4.2, Dennis

PATH=1

Ganz klar nicht die beabsichtigte Lösung, da sie auch auf neueren Bashs funktioniert.

Probieren Sie es online aus.

Veedrac
quelle
4

Python 2, Foon

__import__("os")._exit(0)

Was es auf dem Blech sagt, im Grunde.

Probieren Sie es online aus.

Veedrac
quelle
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)
ebopalisesy
quelle
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.

Luc
quelle
3

Retina

Eine neue Zeile gefolgt von einem 1Werk. Ich habe es sofort gefunden.


1

Probieren Sie es online aus

mbomb007
quelle
Ninja'd von einer Minute
Kritixi Lithos
@Cowsquack Die Frage besagt, dass mehrere Risse für denselben Polizistenposten zulässig sind.
mbomb007
Ich wusste, ich hätte als ersten Schritt Zeilenumbrüche aus der Eingabe entfernen sollen
PunPun1000
3

JS (ES6)

"   "

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

Zottelig
quelle
Ninja'd
programmer5000
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
3

JavaScript (ES6), Programmierer5000

"\0"

Probieren Sie es online!

Der Zustand war !x||x>="\n". Jedes einzelne Zeichen in einer ASCII-Tabelle mit einem Code, der kleiner als der \nist, funktioniert.

Stephen
quelle
Ja, ich dachte, das war es, war nicht sicher ...
Tuskiomi
3

cQuents, Step Hen

Alles gefolgt von einem Leerzeichen und einer positiven ganzen Zahl. Das Leerzeichen trennt die Eingaben und die zusätzliche Eingabe wird zur Nummer des auszugebenden Terms.

Probieren Sie es online!

PurkkaKoodari
quelle
Ich wollte gerade etwas posten a 1! Sie ninja'd mir: /
Mr. Xcoder
@ Mr.Xcoder Ich habe das auf dem Handy getippt und gehofft, dass mich niemand ninja: P
PurkkaKoodari