Der Faden des Räubers ist hier
Die Aufgabe der Polizei besteht darin, eine Funktion oder ein Programm zu schreiben, die, wenn sie eine Eingabe von sich selbst erhalten, eine endliche deterministische Zeichenfolge ausgeben. Wenn das Programm eine andere Eingabe erhält, sollte es eine andere Ausgabe zurückgeben.
Regeln:
- Einreichungen bestehen aus
- Sprache Name
- Wenn Flags verwendet werden, sollten diese aufgedeckt werden.
- Byteanzahl des Programms
- Byteanzahl der Ausgabe
- Ausgabe
- Wenn es besonders lang ist, stellen Sie bitte einen Pastebin oder ähnliches zur Verfügung
- Wenn es nicht druckbare Dateien enthält, geben Sie bitte einen Hexdump an.
- Nachfolgende Zeilenumbrüche und Leerzeichen sollten in die Ausgabe aufgenommen werden
- Woher die Eingabe kommt (STDIN, Befehlszeile usw. )
- Sprache Name
- Falls zutreffend, können Sie davon ausgehen, dass das Byte, das EOF darstellt, in der Eingabe nicht vorhanden ist, es sei denn, Sie verwenden dieses Byte in Ihrem Programm.
- Wenn Ihr Programm geknackt ist, fügen Sie einen Link zur entsprechenden Antwort im Thread des Räubers in Ihrem Titel hinzu.
- Ihr Programm ist erst nach Ablauf einer Woche sicher und Sie markieren es so.
- Ich lehne Techniken wie das zufällige Seeding mit den Eingabe- oder kryptografischen Hash-Funktionen ab. Ich kann sie nicht aufhalten, aber ich werde keine Lösung akzeptieren, die beides nutzt . Beachten Sie auch, dass einige dieser Techniken Kollisionen aufweisen können, bei denen eine andere Zeichenfolge dieselbe Ausgabe erzeugt.
- Ihr Ziel ist es, die kürzeste Leistung zu erzielen. Die kürzeste sichere Lösung, die innerhalb von drei Wochen nach dem Absenden dieser Frage veröffentlicht wurde, gewinnt!
Die Aufgabe des Räubers besteht darin, ein Programm zu finden, dessen Größe dem Original entspricht oder darunter liegt und das auch den oben genannten Regeln entspricht.
Wenn ein Räuber Ihr Programm mit einer anderen als der beabsichtigten Lösung knackt, haben Sie die Möglichkeit, es zu "entknacken", indem Sie nachweisen, dass die Lösung des Räubers falsch ist. Sie können dies tun, indem Sie eine Eingabe für das Räuberprogramm suchen, die dieselbe Ausgabe erzeugt.
Beispieleinreichung:
Brainfuck, 10 Bytes, Punktzahl: 10
]<.[<],>[,
Diese Lösung ist [>,] <[. <] , Die die Eingabe einfach umkehrt
Viel Glück!
quelle
1
für sich selbst und auf0
andere Weise ausgibt1021111143210532105110321051101121171164041581121141051101164011111410040105414410111010061393941
für einige andere Zeichenfolgen ausgegeben wird.Antworten:
7 , 31 Zeichen, Punktzahl 30, sicher, aber möglicherweise kaputt?
Ein 7-Programm ist normalerweise nur eine Zahl, kann jedoch Leerzeichen enthalten und in mehrere Zahlen aufgeteilt werden. Diese Übermittlung besteht daher aus zwei Zahlen (die vom 7-Interpreter implizit verkettet werden), und das Programm verwendet ebenfalls zwei Zahlen als Eingabe über die Standardeingabe. (Die "31 Zeichen" in der Kopfzeile sind die Gesamtlänge der beiden Zahlen plus ein trennendes Leerzeichen. Die Ziffern, aus denen die Zahlen bestehen, werden bei Verwendung als Programm als oktal, bei Verwendung als Eingabe als dezimal interpretiert Es sind die Ziffern, die in beiden Fällen gleich sind, nicht die tatsächlichen Zahlen. Beachten Sie, dass es entweder irrelevant ist, wenn Sie sie als Programm oder als Eingabe behandeln, ob Sie sie durch ein Leerzeichen oder eine neue Zeile trennen. Ich hoffe, dass dies nicht der Fall ist Die Einreichung wird nicht ungültig.)
Die erwartete Ausgabe ist die folgende Zahl (hier in Dezimalzahlen ausgedrückt, da dies das Ausgabeformat ist, das der 7-Interpreter verwendet):
Beachten Sie, dass der aus dem Esolang-Wiki verknüpfte 7-Interpreter Zahlen intern unär speichert, was bedeutet, dass Sie wahrscheinlich nicht über genügend Speicher verfügen, um das Programm tatsächlich auf sich selbst auszuführen, um zu sehen, was es tut. Ich habe das Programm überprüft, indem ich sein Verhalten manuell ausgearbeitet und es an kleinen Eingaben getestet habe, um zu überprüfen, ob es das getan hat, was ich erwartet hatte. Ein alternativer Ansatz wäre, einen Interpreter zu schreiben, der eine effizientere Methode zum Speichern von Zahlen verwendet.
Das Vermeiden von Rissen hier war etwas schmerzhaft, aber ich bin jetzt endlich zufrieden, dass keine anderen Zahlen als die im Programm selbst in der Lage sind, 238363505302130098723162537059 als Ausgabe zu erzeugen. ( BEARBEITEN 1 Woche später: Ich habe mich möglicherweise geirrt, je nachdem, wie Sie die Frage interpretieren; siehe unten. )
Lösung
Das ursprüngliche Programm war:
Es war beabsichtigt, dass keine andere Eingabe das gewünschte Ergebnis liefert, weil:
Abhängig davon, wie Sie die Frage interpretieren, kann es jedoch eine zweite Eingabe geben, die die gewünschte Ausgabe erzeugt (wodurch diese Lösung ungültig wird):
Erläuterung
So funktioniert die beabsichtigte Lösung:
quelle
Node.js v10.9.0 , 40 Bytes, Score: 40, Cracked
Eingang
Dies ist eine Funktion, die genau einen Parameter akzeptiert.
Ausgabe
quelle
o=>[...j=o,].sort(n=>(j+=113)&69).join``
, aberj
nicht zur Ganzzahl gehenEin Birnbaum , 46 Bytes ASCII, Punktzahl 0, Gebrochen
Die Eingabe erfolgt über die Standardeingabe. Die erwartete Ausgabe (bei Standardausgabe) ist eine leere Zeichenfolge (dh wenn das Programm selbst als Argument angegeben wird, sollte keine Ausgabe gedruckt werden).
Mit anderen Worten, die Herausforderung besteht hier darin, ein A Pear Tree-Programm zu schreiben, das bei Standardausgabe nichts auf Standardausgabe ausgibt und bei Standardausgabe etwas auf Standardausgabe ausgibt, wenn bei Standardeingabe etwas anderes als sich selbst angegeben wird, wobei no verwendet wird mehr als 46 Bytes. (Ich habe es geschafft, das Programm auch auf druckbarem ASCII zu halten, obwohl A Pear Tree häufig nicht-ASCII- und nicht druckbare Zeichen verwendet.) Dies ist effektiv die Aufgabe, ein sich selbst identifizierendes Programm mit einem bestimmten Ausgabeformat zu schreiben (dh Nullzeichenfolge, wenn die Selbstidentifizierung erfolgreich ist); Ein Birnbaum hat jedoch mindestens zwei Wendungen, die die Aufgabe etwas schwieriger machen, als es aussieht, wenn sie in dieser bestimmten Sprache ausgeführt wird (weshalb ich sie für meine Cop-Einreichung ausgewählt habe).
Meine Lösung
Meine Lösung unterscheidet sich ein wenig vom Riss:
Probieren Sie es online aus!
Anstatt zu verwenden
exit
, setze ich stattdessen$_
(implizite Ausgabe) und$\
(Zeilenumbruch nach Ausgabe, einschließlich impliziter Ausgabe) auf die Nullzeichenfolge, wenn eine Übereinstimmung vorliegt (und1
wenn keine Übereinstimmung vorliegt ). Aprint
ist weiterhin erforderlich, da die implizite Ausgabe nur aktiviert ist, wenn mindestens ein Byte Eingabe vorhanden ist (daher müssen wir explizit etwas drucken, wenn wir eine leere Zeichenfolge als Eingabe erhalten, die sich vom Programm unterscheidet).Jedes A Pear Tree-Programm muss irgendwo eine Prüfsumme enthalten (das ist die
MZpa
in dieser Lösung). Sowohl meine Lösung als auch die Namen der Crack-Pick-Variablen (und andere kleinere Details des Codes variieren), damit die Prüfsumme vollständig aus ASCII-Buchstaben besteht.quelle
Perl 5
-p0777
, 10 Bytes, Punktzahl 10, sicherDas letzte Zeichen hier ist "Verschieben", Zeichencode 14 (dezimal) / 0E (hex). Alle anderen sind druckbare ASCII.
Da wir das implizite E / A-Argument von Perl verwenden
-p0777
, stammt die Eingabe von der Standardeingabe und die Ausgabe geht an die Standardausgabe.Lösung
Das Programm führt Folgendes aus:
Dies bedeutet, dass das Programm selbst, die einzige Eingabe, die die gewünschte Ausgabe erzeugt, Folgendes ist:
Probieren Sie es online aus!
Erläuterung
quelle
Python 3, 50 Bytes geknackt
Eingabe und Ausgabe von / nach stdin / -out. Die Ausgabe ist für jede einzelne Eingabe unterschiedlich. Einzigartige Ausgabe bei Angabe des Quellcodes:
(Das sind 150 Ziffern)
Viel Glück!
quelle
05AB1E , 35 Bytes, Punktzahl: 7
Eingabe:
Von
stdin
Ausgabe:
QÕ Ƿe
quelle
Cubix , 18 Bytes, Score 18, sicher
Es ist eine Schande, dass diese Herausforderung nicht mehr Beachtung fand, aber so geht es manchmal. Ich wollte dies unsicher lassen, entschied mich aber, die Lösung zu veröffentlichen, bevor ich sie vergaß.
Dies sollte ziemlich leicht zu knacken sein.
Eingabe von
stdin
Ausgabe
Bearbeiten: Ich sollte erwähnen, dass dies die Quelle in ihrer verkürzten Form erwartet ... und jetzt habe ich festgestellt, dass ein fehlendes Byte (nicht druckbar) aus dem Ergebnis fehlt, das ich beim Posten gebrochen habe. Sollte jetzt auskopieren. Die Hex-Werte sind
24 60 2a 13 32 61 4a 50 4a 23 37 34 28 6f 29 3b 38 39
Das Konzept bestand darin, das erste Zeichen zu drucken und dann den inversen Index aus dem Zeichen zu entfernen, z. B. [Zeichen] - [0, len ([Zeichen]). 2]
Der Code ist
welches auf den folgenden Würfel abgebildet wird
Probieren Sie es hier aus
quelle
Gelee , 14 Bytes, Punktzahl: 21, sicher
Sowohl das Programm als auch die Ausgabegröße werden mithilfe der Jelly-Codepage gezählt.
Eingang
Erstes Befehlszeilenargument.
Ausgabe
Lösung
Probieren Sie es online aus!
quelle
v⁼
,1
wenn die als Jelly-Code mit einer Eingabe der Eingabe ausgewertete Eingabe gleich der Eingabe ist, und gibt entweder nach0
oder gibt einen Fehler (wenn die Eingabe ein ungültiger Jelly-Code ist), wenn nicht.JavaScript Firefox, <10 Bytes, Score: 52, aus der Eingabe von Funktionsargumenten, Cracked
btoa(btoa)
codiert die folgende Zeichenfolge:was gibt:
gerade kopiert
quelle
GCC 61-> 61 Bytes
Vollständiges Programm, Eingabe von stdin und Ausgabe an stdout
quelle
50
?Perl 6, 43 Bytes, Score: 15, von stdin
quelle
Pepe , 23 Bytes, Punktzahl: 23, von MickyT geknackt
Eingang:
Standard
Ausgabe:
quelle
J , 26 Bytes, Punktzahl: 52, sicher
Das Programm ist keine REPL, sondern ein vollständiges Skript, das akzeptiert
stdin
und explizit drucktstdout
.Eingang
Standardeingabe.
Ausgabe
Nein, es ist keine Verschlüsselungsmethode.
Lösung
Probieren Sie es online aus!
quelle
Fass , 6 Bytes, Punktzahl: 6
Eingang
Von
stdin
, mit?
Ausgabe
Beachten Sie jedoch, dass dies Escape-Sequenzen für nicht druckbare Bytes sind. Ersetzen Sie die Escapezeichen durch die wörtlichen Zeichen. Rohtext hier verfügbar
Viel Glück mit diesem! Bis nächste Woche!
quelle
Perl 6, 31 Bytes, Score: 39, von stdin - Cracked
Hier geknackt
Rohlösung. Könnte überleben.
quelle