Dies ist Teil einer Herausforderung für Polizisten und Räuber . Gehen Sie hier für die Polizisten.
Die Herausforderung der Räuber
Die Antwort eines Polizisten kann geknackt werden, indem eine beliebige Teilmenge von Zeichen aus dem Haystack-Programm entfernt wird, sodass sie ausgegeben Needle
wird Haystack
(obwohl sie immer noch in derselben Sprache gültig ist). Sie müssen nicht genau die gleiche Lösung finden, die der Polizist beabsichtigt hat, solange Ihre Lösung unter den oben genannten Bedingungen gültig ist.
Wenn du das schaffst, poste eine Antwort mit der Lösung, verlinke die Antwort des Polizisten und hinterlasse einen Kommentar zu der Antwort des Polizisten, die zurück zu deiner führt.
Der Räuber, der die meisten Cop-Antworten knackt, gewinnt. Die Krawatten werden durch die Summe der Größen der geknackten Antworten der Polizisten gebrochen (zugunsten des Räubers, der längere Einreichungen knackt).
Jede Antwort eines Polizisten kann nur einmal geknackt werden, und natürlich dürfen Sie Ihre eigene Antwort nicht knacken. Wenn sich herausstellt, dass die Antwort des Polizisten vor oder nach dem Knacken ungültig ist, wird sie nicht auf die Punktzahl des Räubers angerechnet.
Beispiele
Hier einige einfache Beispiele in verschiedenen Sprachen:
Ruby
Haystack: puts 1>0?"Haystack":"Needle"
Delete: XXXXXXXXXXXXXXX
Needle: puts "Needle"
Python 2
Haystack: print "kcatsyaHeldeeN"[-7::-1]
Delete: XXXXXXXX XX
Needle: print "eldeeN"[::-1]
Beachten Sie, dass die Teilmenge der entfernten Zeichen nicht zusammenhängend sein muss.
quelle
hashing, encryption or random number generation
ist es erlaubt? (Obwohl Möglichkeit winzig)Antworten:
JavaScript, 85 Byte (ES6)
Knackt Arnauld's Antwort
Demo "Needle"
Code-Snippet anzeigen
Erläuterung
Die ursprüngliche Funktion war:
was besser lesbar ist als:
Beachten Sie, dass wenn
n=21625674
, dannn.toString(35)
ist'eedle'
.Die 35 in der Eingabe kann wahrscheinlich nicht in eine Teilmenge geändert werden (weil wir eine Basis wollen, die groß genug ist, um alle Buchstaben 'del' zu enthalten, brauchen wir eine Basis, die mindestens 22 ist). So sind die Zahlen sind zu ändern
74837258394056219
,268435455
und124038877
. Wir wollen sie durch die Zahlen a, b, c ersetzen, die jeweils aus einer Teilmenge der Ziffern der ursprünglichen Zahlen bestehen, sodass die Funktiong(k) = (k * a & b)
, beginnend mitk=35
und 35-mal iteriert und dann mit c XOR-verknüpft, ergibt21625674
.Für diesen, nachdem ein wenig zu denken, da die Längen klein sind (die maximale
a
Länge 17,b
undc
hat Länge 9), I nur brute-force verwendet :-) Schrieb eine C ++ Programm alle möglichen Zahlen zu erzeugena
,b
,c
als Teilmengen gebildet iterieren Sie von den ursprünglichen Nummern durch allea
undb
und prüfen Sie, ob die erforderlichenc
im Satz waren. Läuft in etwa 15 Sekunden, und die einzige Ausgabe ista=4853461
,b=268435455
,c=12408877
(Umdrehungen aus der Anzahlb
muss nicht geändert werden). Ich bin mir nicht sicher, ob es eine klügere Art gibt, diese Funktion zu invertieren.quelle
Heuhaufen , 82 Bytes
Risse HyperNeutrino Antwort-
Probieren Sie es online!
quelle
0
am Anfang zu entfernen : P Schön, aber einen anderen Ansatz zu sehen! +1Brain-Flak , 96 Bytes
Knackt die Antwort von Funky Computer Man .
Probieren Sie es online!
Das war eine lustige Herausforderung.
Die -24 am Anfang
y
,a
in die im Original konvertiert wird , wird jetzt zum Konvertierene
in verwendetM
, das dann anN
Ort und Stelle konvertiert wird, indem die gesamte Endschleife in geändert wird())
. Der erste Push- Briefk
wurde geändert,e
indem einfach ein Push-Pop entfernt wurde, der 6 hinzufügt. Der Rest ist meistens einfach zusammengebrochen, mit einigen humorvollen Fehlern auf dem Weg (einschließlich eines Programms, dessen Ausgabe warMeddle
).Vergleich der beiden Programme:
quelle
N
es 77 statt 78 war, also habe ich es nicht verstanden.Haskell
Risse @ Laikonis Antwort .
Probieren Sie es online!
Originalcode:
entfernte Zeichen durch Unterstriche ersetzen:
Wie
Needle
konstruiert ist: die Zeichenfolge am Ende des Codes in Worte aufgeteilt wird. Das erste Zeichen jedes Wortes wird so oft erhöht, wie es Zeichen im Wort gibt, z. B.Haysta
->H
plus 6 Zeichen ->N
.quelle
Hexagony , 17 Bytes, H.PWiz
Probieren Sie es online!
Vergleich mit Original:
Visualisierung:
Erläuterung
Bonusmarken - verwendet alle 6 IPs und alle bis auf eine der Zellen!
Die IP # 0 beginnt, indem Sie rechts entlang des schwarzen Pfads in die
]
.Wir gehen dann zu IP # 1 über, das sich entlang des roten Pfades bewegt, druckt
N
und sichN;
dann wieder in das]
wieder einwickelt .Wir gehen dann zu IP # 2 über, das sich entlang des blauen Pfads bewegt,
e
in der aktuellen Speicherzelle speichert und dann entlang des grünen Pfads, wobei ausgeführt wird (mit einer Reflexion bei\
), von;;(;
welcher gedruckt wirdee
, die Speicherzelle dekrementierte
undd
dann gedruckt wirdd
.Die IP fährt auf dem orangefarbenen Pfad fort und führt aus,
Nl;se
was gedrucktl
unde
in der aktuellen Speicherzelle gespeichert wird. Es geht weiter entlang des braunen Pfades und druckt dase
mit;
. Zu diesem Zeitpunkt haben wir bereits gedrucktNeedle
, sodass der Rest gerade fertig ist. Die IP speichertc
, dann trifft]
.Wir gehen dann zu IP # 3 über, die sich auf dem blauen Pfad entlangbewegt
\
und aufprallt, in_
den hineinprallt]
.Wir wechseln dann zu IP Nr. 4, die sich auf dem grünen Pfad entlangbewegt
_
, dann springt\
und zu verzweigt]
(dac
positiv ist).Schließlich übergehen wir zu IP # 5, die speichert
e
dann Ausfahrten mit@
.quelle
Python 2 , 123 Bytes
Cracks agtoever's Answer
repl.it
Vergleich:
Es hat mir sehr viel Spaß gemacht, Lösungen zu finden, die gedruckt
Meedle
undNeedlf
durch Anpassen eines Polynoms an den Median der Indizes der Zahlensymbole, die mit jedem der Buchstaben in beginnen, erstellt wurdenNeedle
. Ich habe dann versucht, ähnliche Koeffizienten mit Teilmengen des ursprünglichen Programms von Hand zu finden, aber ich musste darauf zurückgreifen, um eine gültige Lösung zu finden.quelle
Javascript, 91 Bytes
Knackt das . Es hat Spaß gemacht.
Code-Snippet anzeigen
quelle
Gelee , 14 Bytes
Knackt Jonathan Allans Antwort
Probieren Sie es online!
Vergleich:
Früher habe ich
œc
verschiedene Teilmengen der Literalzeichenfolgen durchlaufen, dietr -d
für jeden möglichen Filter undgrep
für Needle verwendet wurden. Unter der Annahme, dass keines der in der ersten Zeichenfolge verwendeten Zeichen in der Antwort verwendet wurde, wird in weniger als 15 Sekunden eine Antwort gefunden.quelle
Nebbed
+ruble
ohne vonrub
.Python 2 , 73 Bytes
Risse user71546 Antwort- .
Probieren Sie es online!
Mit diesem Programm gelöst .
quelle
Java (OpenJDK 8), 191 Byte
Knackt die Antwort von Luke Steven
Probieren Sie es online!
Gelöschte Zeichen:
Dadurch wird
d
ausgewertet078101101100108101
, zu welchen ZaubersprüchenNeedle
.quelle
Rubin , 149 Bytes
Knackt dies: /codegolf//a/144790/74216
Das Modul war ziemlich klein, also schrieb ich ein Multithread-Geburtstagsgeschenk und hoffte auf das Beste.
Edit: Und danach eine noch kürzere Antwort gefunden.
Probieren Sie es online!
Änderungen:
quelle
Gleichstrom , 34 Bytes
Knackt das . TIO .
Ich begann mit der numerischen Darstellung von Haystack (5215583380252484459) und Needle (86197399743589). Als nächstes habe ich eine Faktorisierung des letzteren durchgeführt, nämlich 47 * 432323 * 4242169. Daraus war es ziemlich einfach, diese Zahlen zu rekonstruieren.
Kennzeichnung der verwendeten Zeichen:
quelle
Hexagony , 19 Bytes, Martin Ender
Probieren Sie es online!
Vergleich mit Original
Entfalteter Code
Also, ich habe noch nie etwas in Hexagony geschrieben, aber ich habe mit nur 37 Bytes herausgefunden, dass ich mit dem Riss kommen könnte. Martin, ich hoffe du weißt, dass ich viel Zeit investiert habe, um das herauszufinden. :)
Ich kann falsch sein, aber ich werde erklären, was ich denke, dass dieser Code tut:
Das Programm startet mit
[
, das automatisch auf IP # 5 wechselt. Diese IP beginnt in der Westecke und geht wieder in Richtung[
, wodurch sie auf IP Nr. 4 verschoben wird. Von hier aus führt esN;e
dann in die südöstliche Ecke und führt aus;
, springt nach rechts, um einen anderen;
zu erhalten, auf(
den der Strome
zu einem dekrementiert wirdd
. Weiter geht es dann (mit einem Wrap) bis...;.
dann prallt auf diel
und wird zum[
letzten Mal, um IP zu bewegen # 3. Sie führt;
,>
Umleitungen nach Nordwesten.
dann<
Umleitungen im Westen, Schlagene
, Umwicklung;
und zur Einstellung auf dem@
.Ausführliche Version
Code-Snippet anzeigen
Ich bin so froh, dass Sie für das Nadelprogramm eine normale Sechskantgröße verwendet haben. Ich habe Programme der Größe 19 (für ein 3-seitiges Sechseck) überprüft, als mir klar wurde, dass Sie beliebig viele Zeichen entfernen können und das Sechseck
.
am Ende automatisch mit s gefüllt wird , was das Knacken erheblich erschwert. So wie es ist, ist Hexagony eine böse Sprache für diese Herausforderung, da (meistens) jedes entfernte Zeichen den gesamten Ausführungspfad des Programms verändert. Davon abgesehen hat es mir Spaß gemacht, dies zu versuchen, auch wenn ich es am Ende brutal erzwungen habe. :)quelle
Java (OpenJDK 8) , 151 Byte
Risse Kevin Cruijssen Antwort-
Probieren Sie es online!
Vergleich:
Ich habe das Gefühl, dass der letzte Teil nicht beabsichtigt war.
quelle
v->{String h="Haystack";int x=7;return new String(new java.math.BigInteger(new byte[]{(byte)((~-~-~-~-~-~-~-~1^-x++*x)+15),new Byte(""+10+((x=h.length()*4/x)+x-7))}).toByteArray())+(new StringBuffer("hidden".substring(++x%3,x).replaceFirst("d","e"+(char)(x*21+3))).reverse());}
(weiß nicht , warum ich das BigInteger aufgenommen haben , da nur Byte-Array genug ist ..) , aber ich mag deine besser .. :)Brain-Flak , 102 Bytes
Risse H.PWiz Antwort .
Probieren Sie es online!
quelle
Ly , 21 Bytes
Probieren Sie es online!
Risse LyricLy Antwort .
quelle
Java von Johnathan S.
TiO
Entfernen Sie einfach die Schlaufe, die das Heu hinzufügt, und nichts bleibt auf dem Stapel außer der Nadel.
quelle
equals
Methode funktioniert genauso gut.Pyth , 21 Bytes
knackt das .
Probieren Sie es online!
quelle
T-SQL von phroureo , 757 Bytes
Irgendwie glaube ich nicht, dass das die beabsichtigte Lösung war. Verwendet die Zeichen, die umgeben sind von
{}
:quelle
PHP
Knackt Titus Antwort
Probieren Sie es online aus
quelle