Dies ist eine Herausforderung für Bullen und Räuber . Für die Bullen Faden, gehen hier .
Diese Herausforderung beinhaltet zwei OEIS- Sequenzen, die von den Cops ausgewählt wurden - S 1 , S 2 - und wie gut diese Sequenzen golfen und verschleiert werden können.
Die Bullen konstruieren Code A , der S 1 erzeugt, und geben eine Zahl X an , die ihrer Meinung nach die bestmögliche Levenshtein-Distanz (in Zeichen) ist, um B zu erzeugen , die S 2 erzeugt .
Die Herausforderung der Räuber
Um die Submission eines bestimmten Polizisten zu knacken, müssen Räuber ein Programm C in derselben Sprache (und Version) wie die Antwort ausarbeiten, die S 2 (n) ergibt und bei der das Y- Zeichen von A (mit Y <= X
) abweicht. Räuber müssen nicht unbedingt denselben B- Code finden, den der Cop (heimlich) produziert hat. Die Einreichungen der Räuber müssen sich an denselben 0-Index oder 1-Index halten, wie sie in der Einreichung des Polizisten angegeben sind.
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.
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.
Gewinnen und Punkten
Die Räuber erhalten (X - Y)*5 + 5
für jeden ihrer Risse eine Wertung, und der Räuber mit der höchsten Gesamtpunktzahl gewinnt.
Weitere Regeln
- Sie dürfen keine integrierten Funktionen zum Hashing, zur Verschlüsselung oder zur Generierung von Zufallszahlen verwenden (auch wenn Sie den Zufallszahlengenerator auf einen festen Wert setzen).
- Es sind entweder Programme oder Funktionen zulässig, aber der Code darf kein Snippet sein und Sie dürfen keine REPL-Umgebung annehmen.
- Sie können Eingaben und Ausgaben in jedem beliebigen Format vornehmen . Die Eingabe- / Ausgabemethoden müssen für beide Sequenzen gleich sein.
- Der endgültige Rechner für die Levenshtein-Distanz für diese Herausforderung ist dieser auf Planet Calc.
- Dies ist nicht nur eine CnR-Herausforderung, sondern auch Code-Golf. Daher gelten alle üblichen Golfregeln.
quelle
Antworten:
Pyke, Levenshtein Abstand von 1, A036487 , A135628 - Score 5
Ein Eintrag von Schlammfischen knacken
Probieren Sie es hier aus!
Der ursprüngliche Code
X*e
quadriert die Eingabe,X
multipliziert diese mit der Eingabe*
und halbiert dann das Ergebnise
.Der Trick ist, dass
'X'
56 in der Basis 96-Darstellung vonw
, alsowX
56 ergibt, multiplizieren Sie das mit der Eingabe, dann Floor und halbieren Sie und Sie erhalten das 28-fache der Eingabe nach Bedarf.quelle
Brain-Flak , 28 Bytes, Abstand von 4, A002817 , A090809
Diese Antwort wurde mit Hilfe eines Brute-Forcers gefunden, der 35.000 mögliche Programme generierte (viele davon waren unausgeglichen und damit ungültiger Brain-Flak-Code, aber ich habe mit dem Fehler gewürfelt und trotzdem die Antwort gefunden). Das war ungefähr das zwanzigtausendste getestete Programm, und es dauerte ungefähr eine Stunde, um es zu finden (obwohl ich nicht genau weiß, wie lange ich weg war, als es fertig war).
Ich wollte diese Antwort noch nicht posten, da ich noch kein vollständiges Verständnis dafür habe, wie dieses Programm funktioniert. Die Antwort ist jedoch im Begriff, sicher zu sein, damit sie nicht abläuft. Ich hoffe, diese Antwort zu aktualisieren, sobald ich sie vollständig verstanden habe, und den Code zu veröffentlichen, mit dem ich diese Antwort gefunden habe. Aber im Moment werde ich nur eine teilweise Erklärung posten.
Dies ist sinnvoll, weil OEIS feststellt:
Und A000124 sind die Dreieckszahlen + 1. Allerdings weiß ich nicht genau, was das Forumla ist, daher kann ich nicht vollständig erklären, wie dies funktioniert.
quelle
Perl 6, 19 Bytes, X = 1, A000045 → A000035
+>
anstelle von+<
würde auch funktionieren.Probieren Sie es online!
Wie es funktioniert
infix ... ist sehr nützlich für einfache rekursive Sequenzen. Der
(0,1,*+*...*)
Teil des Originalcodes, der eine Abkürzung für istGibt eine Sequenz an, die mit 0 und 1 beginnt , und fügt dann Elemente hinzu, indem die Summe der beiden vorherigen Elemente der Sequenz berechnet wird.
Im Gegensatz dazu funktioniert
(0,1,*+<*...*)
die linke Bitverschiebung (die+>
rechte auch), um die Paritätssequenz zu konstruieren. Da die Verschiebung von 1 um null Einheiten nach links 1 ist und die Verschiebung von 0 um eine Einheit nach links 0 ist , erhalten wir die gewünschten abwechselnden Muster von Einsen und Nullen.quelle
Perl 6 , 10 Bytes, Abstand 1 - Punktzahl 5
Ein Eintrag von smls knacken
Wird:
Probieren Sie es online!
quelle
*[0]o
, dass sie da ist. Ich schätze, das heißt, ich kann mir aufgrund meines "Tricks" eine weitere Herausforderung***
und dachte, es könnte die dyadische Multiplikationsoperation entfalten.*
Mit den vorherigen Argumenten weiß ich wirklich nicht, was der Code tatsächlich tut. Fühlen Sie sich frei, um in einer Erklärung zu bearbeiten!1***
wird analysiert als1 ** *
, dh ein Lambda, das "1 hoch x" ist.1*+*
wird analysiert als1 * (+*)
, dh ein Lambda, das "1 multipliziert mit (x konvertiert in eine Zahl)" ergibt.Perl 6 , Abstand 2, smls
Original:
Riss:
Probieren Sie es online!
quelle
+(^*Z%2)
. Ich glaube, ich bin nicht sehr gut darin, diese Herausforderungen zuWolframAlpha, Entfernung 1, Greg Martin , A002378 , A000537
Wie es funktioniert
Interessanterweise wurde mir klar, dass (n * (n + 1) / 2) ^ 2 eine Formel für die zweite Folge ist. Da die Summe (1 bis n) n * (n + 1) / 2 entspricht, musste ich nur das * auf ein ^ umstellen.
quelle
Brain-Flak , 20 Bytes, DJMcMayhem
Probieren Sie es online!
Fügte ein
({})
am Anfang der Schleife hinzu, um den Wert in jeder Iteration zu verdoppeln.quelle
({(({}[()])){}}{})
JavaScript, Abstand 4, LliwTelracs
Original:
Riss:
Probieren Sie es online!
quelle
JavaScript (ES6), Entfernung 1, Vorausgesetzt
Original:
Riss:
Probieren Sie es online!
oder
Probieren Sie es online!
Irgendwie habe ich es geschafft, dass es sich zwischen TIO und repl.it anders verhält (absolut keine Ahnung, warum 2 * 1 ^ ... laut repl.it gleich 0 wäre)
quelle
as=function(){ return 2*2**((1^1)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}
.Javascript, 41 Bytes, Abstand von 3, A061313, A004526
Probieren Sie es online!
quelle
Java, Distance 4, Peech , A094683 , A000290
Original:
Riss:
gibt n * n zurück
quelle
Javascript, Advancid , Abstand von 2, A059841 und A000004
Lassen Sie den Code nur hinter dem TIO-Link, weil er die Site zu beschädigen scheint.
Vielen Dank an @nderscore, dessen Code ich zum Entschlüsseln des ursprünglichen Codes verwendet habe
Es gab redundanten Code wie !! [] + [] + [] anstelle von !! [] + [].
Das Hinzufügen von! + [] - (! + []) (+ 1-1) verhinderte zunächst die Entschlüsselung.
Probieren Sie es online
quelle
Pyke, Levenshtein Entfernung von 2, A008788, A007526
Probieren Sie es hier aus!
Wie es funktioniert
Dies führt eine gemischte Basenumwandlung durch.
'S
Nimmt die Eingabe n und wendet sie an und drückt [1, ..., n] auf den Stapel. Der nächsteS
nimmt die Eingabe n und schiebt das gleiche Array noch einmal.'
scheint zu bewirken, dass der nächste Befehl auf den vorherigen Anfang des Stapels angewendet wird; Ich bin ein bisschen verschwommen bei den Details.Wendet schließlich eine
^
gemischte Basenumwandlung an, so berechnet [1, ..., n] [1, ..., n] a (n): = [1] n + n + (n) (n-1). . + [n!] 1 wobei die Klammern den Stellenwert und die Zahl rechts von der Ziffer angeben.f
Nun ist a (n) = (1 + (1) (n-1) + (n-1) (n-2) (n-3) + ... + (n-1)!) N = n ( a (n) + 1) ist dieselbe rekursive Formel, die in [A007526] a (n) definiert . Da eine leere Summe Null ist, ist a (0) = 0 und der Basisfall stimmt ebenfalls überein.
quelle