Bei einem sehr ungewöhnlichen Unfall mit einer kleinen Radiumprobe, einem durch Stromschlag getöteten Wal und drei Gummibären wurde ein Teil des Quellcodes von The Management ™ mutiert. Wenig weiß der Chef des Managements, es waren tatsächlich die Cops ©, die dafür verantwortlich waren, um die "bösen" Pläne des Managements zu vereiteln. Also wurden die Räuber angeheuert, um den ursprünglichen Code wiederzugewinnen, denn wer mag es nicht, manchmal böse zu sein?
Hinweis: Diese Herausforderung wurde stark von Unscramble the Source Code inspiriert .
Beschreibung
Dies ist eine Herausforderung für Bullen und Räuber .
- Die Bullen schreiben ein Programm (den mutierten Code), das Aufgabe Nr. 1 ausführt (und schreiben auch ein Programm, das Aufgabe Nr. 2 ausführt, aber geheim gehalten wird).
- Die Räuber versuchen, die "Mutation" rückgängig zu machen und diesen ursprünglichen Code in Code zu ändern, der Aufgabe 2 ausführt.
In dieser Herausforderung besteht Aufgabe Nr. 1 darin, die n
dritte Primzahl und Aufgabe Nr. 2 die n
dritte Fibonacci-Zahl auszugeben (was den Cops © zufolge ohnehin irgendwie böse ist). Die Fibonacci-Folge ist definiert als ( n=1
→ 1
; n=2
→ 1
; n=3
→ 2
; ...) und die Primzahlen sind definiert als ( n=1
→ 2
; n=2
→ 3
; n=3
→ 5
; ...).
Das Ziel der Polizei ist es, den Unterschied zwischen den Programmen, die Task 1 und Task 2 abschließen, zu minimieren und gleichzeitig zu verhindern, dass die Räuber den Code, der Task 2 abschließt, neu erstellen.
Cop-Regeln
Die Bullen werden zwei Programme schreiben (eines, das Aufgabe 1 abschließt, und eines, das Aufgabe 2 abschließt) und die folgenden Informationen veröffentlichen:
- Das erste Programm (das die
n
dritte Primzahl ausgibt ) - Der Levenshtein-Bearbeitungsabstand zwischen dem ersten Programm und dem zweiten Programm
- Die Programmiersprache , in der beide Programme geschrieben sind (muss für beide Programme dieselbe Sprache sein)
Die folgenden Einschränkungen gelten für beide Programme:
- Sie dürfen maximal 128 Zeichen lang sein.
- Sie dürfen nur druckbares ASCII verwenden (plus Zeilenumbrüche, die ebenfalls zulässig sind).
- Die Laufzeit beträgt weniger als 10 Sekunden
n=45
, und es ist nicht erforderlich, dass sie für alle die richtige Ausgabe liefernn>45
. - Sie dürfen keine Hashing- oder kryptografischen Funktionen verwenden.
Räuberregeln
Der Räuber versucht, das Programm des Polizisten (das Task 1 abschließt) in ein Programm zu ändern, das Task 2 (nicht unbedingt das vom Polizisten geschriebene Originalprogramm) in der vom Polizisten festgelegten Bearbeitungsentfernung abschließt.
Eine bereits geknackte Einreichung kann nicht erneut geknackt werden (nur der erste Räuber, der eine Einreichung geknackt hat, erhält eine Gutschrift).
Nachdem Sie eine Einsendung geknackt haben, gehen Sie bitte wie folgt vor:
- Veröffentlichen Sie eine Antwort auf die zugehörige Frage (Link) dieser Herausforderung und geben Sie die Sprache, Ihre Lösung und einen Link zur ursprünglichen Antwort an.
- Hinterlasse einen Kommentar mit dem Text "Cracked", der auf deine gepostete Antwort verweist.
- Bearbeiten Sie die Antwort des Polizisten, wenn Sie über Bearbeitungsberechtigungen verfügen (wenn Sie dies nicht tun, warten Sie entweder, bis eine andere Person mit den erforderlichen Berechtigungen dies für Sie tut, oder schlagen Sie eine Bearbeitung vor).
Wertung
Wenn das Programm eines Polizisten eine Woche lang ungerissen bleibt, kann der Polizist den Originalcode, der Aufgabe Nr. 2 abschließt (in der angegebenen Bearbeitungsentfernung), veröffentlichen, und die Einreichung wird fortan als "sicher" betrachtet. Die sichere Einreichung mit der geringsten Bearbeitungsentfernung gewinnt. Im Falle eines Unentschieden gewinnt das kürzeste Programm (das Original, das Aufgabe 1 abschließt). Wenn zwei Einreichungen immer noch unentschieden sind, gewinnt die zuvor veröffentlichte.
Wenn ein Räuber die Vorlage eines Polizisten erfolgreich knackt, steigt die Punktzahl des Räubers um die Bearbeitungsentfernung dieser Vorlage. Zum Beispiel erhält ein Räuber, der eine Vorlage mit einer Bearbeitungsentfernung von 3 und eine mit einer Entfernung von 5 knackt, 8 Punkte. Der Räuber mit der höchsten Punktzahl gewinnt. Bei einem Unentschieden gewinnt der Räuber, der zuerst das Ergebnis erzielt hat.
Bestenliste
Ein kleines Tool zur Berechnung der Levenshtein-Distanz
quelle
Antworten:
Python 2, Abstand = 8 [ geknackt ]
Endlich ist dieser unter dem Zeichenlimit. Sollte nicht zu schwer sein, aber ich fand die Idee interessant.
Beabsichtigte Lösung:
Die Idee war, das zu benutzen
F(n+2) = 1 + (sum over F(k) from k = 1 to n)
, und die Tatsache, dass fortlaufende Fibonacci-Zahlen Koprime sind. Das1
im Reduce-Argument sollte das liefern+1
.Es sieht so aus, als hätte feersum eine andere Angriffslinie gefunden!
quelle
J, Abstand = 5 [ Gebrochen ]
Verwendung:
quelle
Rubin, Abstand 6 [sicher]
Das Aufstellen von Formelpaaren mit kurzen Bearbeitungsdistanzen macht Spaß, aber es scheint, als wäre dieser Ansatz effektiver / ärgerlicher. Sie verstehen vielleicht genau, was ich getan habe, aber das heißt nicht, dass Sie es rückgängig machen können.
Lösung:
Erläuterung:
quelle
e
, dort unten eine einzufügen, wenn ich brachiale Gewalt praktiziere. Wirklich hinterhältige Lösung. :)Python 2 - LD = 13 Gebrochen
Ein schönes, einfaches (hoffentlich nicht zu einfaches), um die Dinge anzufangen :)
Sieht so aus, als wäre es zu einfach gewesen;) Ich finde es ziemlich dumm, dass ich vergessen habe, dass du Kommentare verwenden könntest: /
quelle
Haskell, Abstand = 13
Das könnte besser lesbar sein, aber die haben
import
zu viele Bytes gefressen, also musste ich ein bisschen Golf spielen.quelle
Rubin, Abstand 14 ( Gebrochen )
quelle
CJam, Abstand 10 (geknackt)
Einfach setzen
n
STDIN aufsetzen. Teste es hier.Als Referenz diente die Originallösung der seltenen
j
.Original:
quelle
J, Abstand = 4 [sicher]
Lösung:
Methode:
quelle
Python 3, Abstand = 14 [ geknackt ]
Ich hatte ein paar freie Zeichen, deshalb habe ich zur Klarheit ein paar Leerzeichen eingefügt :)
quelle
JAGL Alpha 1.2 - Abstand = 16 [ Gebrochen ]
Sollte nicht zu schwer sein, werden wir sehen, was passiert ...
quelle
TI-BASIC , Entfernung 38
>
repräsentiert denSTO→
Schlüssel und$
repräsentiert das Quadratwurzelsymbol.quelle
Python 2 - Abstand = 12 [ Gebrochen ]
Ich bin ein bisschen glücklich darüber, wie sich das herausgestellt hat.
Mal sehen, wie lange es dauert ... Ich nehme an, es wird immer noch geknackt.
Bearbeiten: Code etwas verkürzt, keine Auswirkung auf Bedienung / Entfernung.
Beabsichtigte Lösung
Ich habe versucht, keine Kommentare oder Zeilenumbrüche zu machen.
quelle
Python 3 - Abstand = 14 [ Gebrochen ]
Mal sehen, wie lange das dauert ...
quelle