Die Herausforderung
Ich präsentiere Ihnen eine weitere Herausforderung zwischen Spion und Spion. In diesem Fall ist das zu schützende Datum jedoch kein Eingang, sondern ein Ausgang .
Die Regeln der Herausforderung sind einfach. Schreiben Sie eine Routine mit folgenden Angaben:
- Die Routine kann in einer beliebigen Sprache geschrieben sein, darf jedoch 320 Byte nicht überschreiten.
- Die Routine muss drei 32-Bit-Ganzzahlen mit Vorzeichen als Eingaben akzeptieren. Es kann die Form einer Funktion annehmen, die 3 Argumente akzeptiert, einer Funktion, die ein einzelnes Array mit 3 Elementen akzeptiert, oder eines vollständigen Programms, das 3 Ganzzahlen von einer beliebigen Standardeingabe liest.
- Die Routine muss eine vorzeichenbehaftete 32-Bit-Ganzzahl ausgeben.
- Für alle möglichen Eingaben muss die Routine zwischen 2 und 1000 (einschließlich) eindeutige Werte ausgeben. Die Anzahl der eindeutigen Werte, die eine Routine ausgeben kann, wird als Schlüssel bezeichnet .
Als Beispiel das C-Programm
int foo( int i1, int i2, int i3 ) {
return 20 + (i1^i2^i3) %5;
}
hat einen Schlüssel von 9, da es (hoffentlich) nur Ausgang der neun Werte 16
, 17
, 18
, 19
, 20
, 21
, 22
, 23
, und 24
.
Einige zusätzliche Einschränkungen sind wie folgt:
- Die Routine muss vollständig deterministisch und zeitinvariant sein und identische Ausgaben für identische Eingaben zurückgeben. Die Routine sollte keine Pseudozufallszahlengeneratoren aufrufen.
- Die Routine stützt sich möglicherweise nicht auf "versteckte Variablen" wie Daten in Dateien, Systemvariablen oder esoterische Sprachfunktionen. Beispielsweise sollten Routinen im Allgemeinen nicht auf Konstanten verweisen, es sei denn, die Konstanten sind im Code selbst eindeutig definiert. Von Routinen, die auf Compiler-Macken, Ausgaben von mathematisch undefinierten Operationen, Rechenfehlern usw. beruhen, wird ebenfalls dringend abgeraten. Im Zweifelsfall bitte nachfragen.
- Sie (der Codierer) müssen genau wissen, wie viele eindeutige Ausgaben die Routine erzeugen kann, und sollten in der Lage sein, mindestens eine Eingabesequenz bereitzustellen, die jede Ausgabe erzeugt. (Da es möglicherweise Hunderte von eindeutigen Ausgaben geben kann, wird dieses Set immer nur dann angefordert, wenn Ihr Schlüssel angefochten wird.)
Da dieses Problem der klassischen Verschlüsselung weitaus weniger ähnelt als das vorherige, gehe ich davon aus, dass es einem breiteren Publikum zugänglich sein wird.
Je kreativer, desto besser.
Die Wertung
Die kürzeste (n) nicht geknackte (n) Einsendung (en) pro Byteanzahl wird (werden) zum Gewinner erklärt.
Bei Unklarheiten wenden Sie sich bitte an uns.
Die Gegen-Herausforderung
Alle Leser, einschließlich derer, die ihre eigenen Routinen eingereicht haben, werden aufgefordert, Einsendungen zu "knacken". Ein Beitrag wird geknackt, wenn sein Schlüssel im zugehörigen Kommentarbereich veröffentlicht wird. Wenn eine Einreichung 72 Stunden lang ohne Änderung oder Crack andauert, wird sie als "sicher" eingestuft und jeder nachfolgende Erfolg beim Cracken wird für den Wettbewerb ignoriert.
Pro Einsendung und Leser ist nur ein Crackversuch zulässig. Wenn ich zum Beispiel an Benutzer X sende: "Ihr Schlüssel ist 20" und ich irre mich, lehnt Benutzer X meine Vermutung als falsch ab und ich kann keine weiteren Vermutungen für diese Übermittlung mehr übermitteln.
Gebrochene Einsendungen werden von der Konkurrenz ausgeschlossen (sofern sie nicht "sicher" sind). Sie sollten nicht bearbeitet werden. Wenn ein Leser eine neue Routine einreichen möchte, sollte er dies in einer separaten Antwort tun.
Die Punktzahl eines Crackers ist die Anzahl der Einreichungen (entweder konform oder nicht konform), die er knackt. Bei Crackern mit identischer Anzahl wird die Rangfolge durch die Gesamtbytezahl aller geknackten Einsendungen bestimmt (je höher, desto besser).
Der / die Cracker mit der (den) höchsten Punktzahl (en) wird (werden) zusammen mit den Entwicklern der Gewinnroutine zum Gewinner erklärt.
Bitte knacken Sie nicht Ihren eigenen Beitrag.
Viel Glück. :)
Bestenliste
Zuletzt aktualisiert am 2. September, 10:45 EST
Unbewegliche Barrieren (ungerissene Vorlagen):
- CJam, 105 [Dennis]
Unaufhaltsame Kräfte (Cracker):
- Dennis [ Java, 269 ; C 58 ; Mathematica, 29 ]
- Martin Büttner [ Java, 245 ]
return
etc ...