Ändern Sie den Code, ändern Sie die Reihenfolge: Räuber

15

Dies ist eine Herausforderung für . 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 + 5fü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 Daher gelten alle üblichen Golfregeln.
AdmBorkBork
quelle
Suche
ungeknackte

Antworten:

7

Pyke, Levenshtein Abstand von 1, A036487 , A135628 - Score 5

Ein Eintrag von Schlammfischen knacken

wX*e

Probieren Sie es hier aus!

Der ursprüngliche Code X*equadriert die Eingabe, Xmultipliziert diese mit der Eingabe *und halbiert dann das Ergebnis e.

Der Trick ist, dass 'X'56 in der Basis 96-Darstellung von w, also wX56 ergibt, multiplizieren Sie das mit der Eingabe, dann Floor und halbieren Sie und Sie erhalten das 28-fache der Eingabe nach Bedarf.

Jonathan Allan
quelle
Genau das was ich hatte. Dauerte etwas länger als ich erwartet hatte
Blue
Sobald ich es sah, wusste ich, dass es die beabsichtigte Lösung war.
Jonathan Allan
4

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.

#Push the sum of:
(

    #The (n-1)th triangular number, and the range [1, n] (The range doesn't count towards the sum I believe)
    ({(({})[()])}{})

    #Triangulate every number on the stack
    {{({}[()])}{}}

)

Dies ist sinnvoll, weil OEIS feststellt:

Für n> 0 beziehen sich die Terme dieser Sequenz auf A000124 durch a (n) = Summe (i * A000124 (i), i = 0..n-1). [Bruno Berselli, 20. Dezember 2013]

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.

DJMcMayhem
quelle
3

Perl 6, 19 Bytes, X = 1, A000045 → A000035

{(0,1,*+<*...*)[$_]}

+>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 ist

(0, 1, -> $x, $y { $x + $y } ... *)

Gibt 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.

Dennis
quelle
2

Perl 6 , 10 Bytes, Abstand 1 - Punktzahl 5

Ein Eintrag von smls knacken

*[0]o 1***

Wird:

*[0]o 1*+*

Probieren Sie es online!

Jonathan Allan
quelle
Gut gemacht! Ich habe nicht an diese Lösung gedacht, meine war etwas kniffliger und verlangte eigentlich *[0]o , dass sie da ist. Ich schätze, das heißt, ich kann mir aufgrund meines "Tricks" eine weitere Herausforderung
ausdenken
Ich kenne Perl nicht wirklich, habe es nur gesehen ***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!
Jonathan Allan
2
1***wird analysiert als 1 ** *, dh ein Lambda, das "1 hoch x" ist. 1*+*wird analysiert als 1 * (+*), dh ein Lambda, das "1 multipliziert mit (x konvertiert in eine Zahl)" ergibt.
smls
2

Perl 6 , Abstand 2, smls

Original:

+(*%%2)

Riss:

+(*+0%2)

Probieren Sie es online!

Joey Marianer
quelle
Verdammt, wieder eine einfache Lösung, die ich nicht in Betracht gezogen habe ... (Meine war um so mehr verschleiert +(^*Z%2). Ich glaube, ich bin nicht sehr gut darin, diese Herausforderungen zu
formulieren
2

WolframAlpha, Entfernung 1, Greg Martin , A002378 , A000537

(sum1to#of n^1)^2&

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.

Mathe-Junkie
quelle
Sie sollten ihm mitteilen, dass Sie seine Antwort geknackt haben
Wheat Wizard
Gut erkannt! :)
Greg Martin
2

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.

Martin Ender
quelle
Nett! FWIW, die 18-Byte-Lösung, die ich hatte, war({(({}[()])){}}{})
DJMcMayhem
1

JavaScript, Abstand 4, LliwTelracs

Original:

f=x=>{return x?2*x-1+f(x-1):0}

Riss:

f=x=>{return x?2*(-0+f(x-1)):1}

Probieren Sie es online!

Kritixi Lithos
quelle
1

JavaScript (ES6), Entfernung 1, Vorausgesetzt

Original:

as=function(){ return 2*2**((11)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}

Riss:

as=function(){ return 0*2**((11)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}

Probieren Sie es online!

oder

as=function(){ return 2*1**((11)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}

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)

fəˈnəˈtɛk
quelle
Ich bin zu dumm, ich habe nicht über die 2 , um eine Veränderung 0. Hier ist die B - Funktion: as=function(){ return 2*2**((1^1)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}.
1

Java, Distance 4, Peech , A094683 , A000290

Original:

int x{double r=1;for(int i=0;i<42;i++)r=r/2+n/r/2;int k=(int)((int)n*(float)n/Math.pow(n,(Math.sin(n)*Math.sin(n)+Math.cos(n)*Math.cos(n))/2));return n%4%2==(int)Math.log10(Math.E)/Math.log((double)'H'-'@')?(int)r:k;}

Riss:

int x{double r=1;for(int i=0;i<42;i++)r=r/2+n/r/2;int k=(int)((int)n*(float)n/Math.pow(n,(Math.sin(n)*Math.sin(n)+Math.cos(n)*Math.cos(n))/2));return n%4%1==(int)Math.log10(Math.E)/Math.log((double)'H'-'@')?(int)n*n:k;}
                                                                                                                                                          ^                                                         ^^^

gibt n * n zurück

fəˈnəˈtɛk
quelle
1

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

fəˈnəˈtɛk
quelle
1

Pyke, Levenshtein Entfernung von 2, A008788, A007526

'SS^

Probieren Sie es hier aus!

Wie es funktioniert

Dies führt eine gemischte Basenumwandlung durch.

'SNimmt die Eingabe n und wendet sie an und drückt [1, ..., n] auf den Stapel. Der nächste Snimmt 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.

Dennis
quelle
Wie bist du mit so wenigen Versuchen dazu gekommen? Ich interessiere mich für Ihre Gedankengänge
Blue
Mixed Base Conversion ist ein weit verbreiteter Golftrick. Es ist nicht das erste Mal, dass ich es benutzt habe.
Dennis