Ändern Sie den Code, ändern Sie die Reihenfolge: Cops

27

Dies ist eine Herausforderung für . Für den Räuber 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 Herausforderung der Bullen

Ihre Herausforderung als Polizist besteht darin, eine frei verfügbare Sprache und zwei OEIS-Sequenzen auszuwählen . Dann schreibe Code A in die Sprache, die die Eingabe n nimmt und S 1 (n) erzeugt. Wenn dieser Code um einen Levenshtein-Abstand von X Zeichen (wobei X nicht mehr als 0.5 * (length A)) geändert und in Code B in derselben Sprache umgewandelt wird, muss er S 2 (n) erzeugen . Sie müssen diesen Code B tatsächlich schreiben , aber nicht offenlegen, bis Ihre Herausforderung sicher ist (siehe unten).

Die Cops müssen den Namen der Sprache, den vollständigen Code A , die Anzahl der Bytes von A , den X- Wert für die Anzahl der Änderungen an ihrem geheimen B- Code und die gewählten S 1 - und S 2 -Sequenznummern enthalten. Sie können wählen, ob jede Sequenz 0-indiziert oder 1-indiziert ist. Bitte geben Sie dies in Ihrer Einreichung an.

Um einen bestimmten Beitrag zu knacken, müssen Räuber ein Programm C in derselben Sprache (und Version) entwickeln, das S 2 (n) erzeugt und bei dem 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.

Gewinnen und Punkten

Wenn Ihre Antwort nicht innerhalb von 7 Tagen (168 Stunden) geknackt wurde, können Sie Ihre eigene B- Lösung aufdecken. Zu diesem Zeitpunkt gilt Ihre Antwort als sicher. Solange Sie Ihre Lösung nicht preisgeben, kann sie auch dann von Räubern geknackt werden, wenn die sieben Tage bereits verstrichen sind. Wenn Ihre Antwort geknackt wird, geben Sie dies bitte in der Kopfzeile Ihrer Antwort zusammen mit einem Link zur Antwort des entsprechenden Räubers an.

Polizisten gewinnen, indem sie die ungerissene Vorlage mit dem kürzesten A haben . Wenn es gebunden ist, wird das kleinste X als Unterbrecher verwendet. Wenn immer noch unentschieden, gewinnt die frühere Einreichung.

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
Stellen Sie außerdem sicher, dass Sie die Räuber aktualisieren, wenn Sie in dieser Frage etwas ändern.
mbomb007
Was ist, wenn ein Cop eine Funktion / Variable benennt, die in Bezug auf den Code, der die Sequenz generiert, wirklich groß ist? In diesem Fall kann eine beliebige Sequenz erstellt werden, deren Lev-Abstand geringer ist als(0.5*len(A))
hashcode55
@ hashcode55 Zwei Dinge - 1) Das ist wahrscheinlich kein guter Kandidat, um den Thread der Polizei zu gewinnen. 2) wenn es so enorm ist, gibt es den Räubern auch einen guten Spielraum, es zu knacken.
AdmBorkBork
1
" Dies ist Code-Golf, daher gelten alle üblichen Golfregeln. " Bedeutet dies, dass Code A so oft wie möglich golfen muss, oder kann er absichtlich zu wortreich / umständlich geschrieben werden, um ihn Code B ähnlicher zu machen ?
smls
7
Suche
ungeknackte

Antworten:

10

Brain-Flak , 28 Bytes, Abstand von 4, A002817 , A090809 Gebrochen

Diese Antwort verwendet die 1-Indizierung

(({({}[()])}{}){({}[()])}{})

Probieren Sie es online aus

Für alle Interessierten gibt es 27475 gültige Brain-Flak-Programme mit Levenshtein Abstand 4 von diesem Programm und 27707 mit Abstand 4 oder weniger. Eine Brute-Force-Lösung wäre also auf einem Computer für Endverbraucher möglich.

Weizen-Assistent
quelle
Es wäre wahrscheinlich kürzer und schneller zu lesen, wenn Sie X = 4stattdessen haben Levenshtein distance of 4.
mbomb007
1
@ mbomb007 Ich persönlich bin etwas verwirrt, wenn Herausforderungen eine Reihe von Buchstabenvariablen verwenden, um für Dinge einzutreten, die ich vermeiden wollte. Ich habe es jetzt kürzer gemacht, hoffentlich ohne Verwirrung zu stiften.
Weizen-Assistent
Achselzucken . Wenn jeder die Frage liest, sollte er sie bekommen. Xist wirklich die einzige Variable, die sie kennen müssen.
mbomb007
@ mbomb007 Die Frage fragt allerdings auch nach einer Byteanzahl.
DLosc
1
Geknackt!
DJMcMayhem
6

7 , 33 Zeichen, 13 Bytes, X = 10, A000124A000142 , Sicher

171720514057071616777023671335133

Probieren Sie es online!

Die Levenshtein-Distanz wird in Zeichen angegeben, daher habe ich das Programm in den oben angegebenen Zeichen angegeben (und Try it online !, einschließlich der Sprache, kann gerne Programme ausführen, die in ASCII codiert sind). Das Programm wird jedoch mit der Sub-Byte-Codierung von 7 auf der Festplatte gespeichert, was bedeutet, dass das Programm selbst der folgende Hexdump ist (also 13 Byte lang):

00000000: 3cf4 2982 f1ce 3bfe 13dc b74b 7f         <.)...;....K.

(Da der Levenshtein-Abstand in Zeichen gemessen wird, müssen Sie hier nicht unbedingt 10 Bytes hinzufügen / löschen / ändern. Daher ist es wahrscheinlich am besten, mit dem Original-ASCII zu arbeiten.)

Das geschriebene Programm implementiert A000124 (Dreieckszahlen + 1); Jeder Riss muss A000142 (Fakultäten) implementieren. Beide Programme nehmen die Eingabe von stdin (als Dezimalzahlen), schreiben ihre Ausgabe in stdout und behandeln eine Eingabe von 1 als erstes Element der Sequenz (und eine Eingabe von 2 als zweites Element usw.).

Hoffentlich wird der sehr hohe X-Wert die Leute davon abhalten, das Programm brutal zu erzwingen (was bei Cops-and-Robbers-Einträgen in 7 immer ein Risiko darstellt).

Die Lösung

177172051772664057074056167770236713351353

Probieren Sie es online!

Unterschiede zum Original:

17 172051 405707 1 61677702367133513 3
17 7 172051 77266 405707 405 61677702367133513 5 3

Ich habe keine Erklärungen vorbereitet, wie diese funktionieren, deshalb werde ich eine Weile brauchen, um eine Erklärung zu bekommen, da ich es fast von Grund auf neu herausfinden muss. Hoffentlich gibt es irgendwann eine Erklärung.


quelle
4

Perl 6 , 10 Bytes, X = 1, A000012A001477

Geknackt!

*[0]o 1***
  • S 1 = A000012 = 1,1,1,1,1,...= Die Sequenz aller Einsen . (0-indiziert)

  • S 2 = A001477 = 0,1,2,3,4,...= Die nichtnegativen ganzen Zahlen. (0-indiziert)

Probieren Sie es online!

Es wurde bestätigt, dass es mit Perl 6 Release 2017.01 und mit der auf TIO ausgeführten Perl6-Version funktioniert.

( A könnte weiter golfen werden 1***- ich hoffe es ist auch so erlaubt wie es ist.)

smls
quelle
3

Perl 6 , 13 Bytes, X = 1, A161680A000217

Sicher!

{[+] [,] ^$_}
  • S 1 = A161680 = 0 0 1 3 6 10 15 21...= Null gefolgt von den Dreieckszahlen.
  • S 2 = A000217 = 0 1 3 6 10 15 21 28 ...= Die Dreieckszahlen.
  • Nullindexiert.

Probieren Sie es online!

(Es wurde bestätigt, dass es mit der Perl 6-Version unter TIO funktioniert.)

Lösung

{[+] [\,] ^$_}

So funktioniert das Original:

{           }  # A lambda.
          $_   # Lambda argument.                     e.g. 4
         ^     # Range from 0 to n-1.                 e.g. 0, 1, 2, 3
     [,]       # Reduce with comma operator.          e.g. 0, 1, 2, 3
 [+]           # Reduce with addition operator.       e.g. 6

So funktioniert die Lösung:

{            } # A lambda.
           $_  # Lambda argument.                     e.g. 4
          ^    # Range from 0 to n-1.                 e.g. 0, 1, 2, 3
     [\,]      # Triangle reduce with comma operator. e.g. (0), (0,1), (0,1,2), (0,1,2,3)
 [+]           # Reduce with addition operator.       e.g. 10

Nutzt die Tatsache aus, dass numerische Operatoren wie das Addieren eine Liste als Anzahl von Elementen behandeln, so dass im Beispiel die Summe ist 1 + 2 + 3 + 4 = 10.

Und ja, das No-Op "Reduzieren mit Komma" im Original umgeht irgendwie die Code-Golf-Regeln, aber ich betrachte es lieber als einen albernen Algorithmus, für den so viel wie möglich Golf gespielt wurde (Whitespace usw.) was es ist... :)

smls
quelle
Wenn ich die Zeit oder die Neigung (und die Kenntnis von Perl) hätte, würde ich mich brutal dazu zwingen lassen.
Rohan Jhunjhunwala
Das hat lange genug überlebt als sicher markiert werden
fənɛtɪk
2

Jelly , 11 Bytes, X = 5, A005185A116881

ịḣ2S;
1Ç¡ḊḢ

Dies ist ein vollständiges Programm, das eine Ganzzahl als Befehlszeilenargument verwendet und eine Ganzzahl ausgibt.

Beide Sequenzen sind wie bei OEIS indiziert, dh A005185 ist 1-indiziert und A116881 ist 0-indiziert.

Probieren Sie es online!

Dennis
quelle
2

Javascript, 41 Bytes, Abstand von 3, A061313 , A004526 , Gebrochen

f=x=>{return x>1?x%2?f(x+1)+1:f(x/2)+1:0}

Probieren Sie es online

Verwendet 1-basierte Indizierung, die Lösung verwendet 0-basierte Indizierung.

Nochmals eine andere Lösung ...

f=x=>{return x>1?x<2?f(x-1)+1:f(x-2)+1:0}
fəˈnəˈtɪk
quelle
Geknackt
Dennis
3
Übrigens sollten Sie keine tio.run- Permalinks verwenden. Sie werden bald aufhören zu arbeiten.
Dennis
^ Verwenden Sie stattdessen tio.run/nexus .
mbomb007
1

Perl 6 , 19 Bytes, X = 1, A000045A000035

Geknackt!

{(0,1,*+*...*)[$_]}
  • S 1 = A000045 0 1 1 2 3 5 8 13 21 34...= "Fibonacci-Zahlen". ( 0-indiziert )
  • S 2 = A000035 = 0 1 0 1 0 1 0 1 0 1...= "Period 2". ( 0-indiziert )

Probieren Sie es online!

(Es wurde bestätigt, dass es mit der Perl 6-Version unter TIO funktioniert.)

smls
quelle
Geknackt
Dennis
1

WolframAlpha, 18 Bytes, X = 1

Von math_junkie geknackt!

(sum1to#of n^1)*2&

Manchmal kann WolframAlpha tatsächlich eine solche reine Funktion in funktionaler Form anzeigen (manchmal wird es verwirrend). aber es kann mit einer bestimmten Eingabe fröhlich aufgerufen werden - zum Beispiel (sum1to#of n^1)*2&@5Erträge 30.

S1 = A002378 (Pronenzahlen)

S2 = A000537 (Summe der ersten nWürfel)

Beide Sequenzen sind 0-indiziert.

Greg Martin
quelle
Geknackt!
Math Junkie
1

Javascript, 15704 Bytes, Abstand von 2, A059841 und A000004 - geknackt

Diese Lösung ist extrem lang, sodass Sie den vollständigen Code in diesem Github finden.

Die ursprüngliche Antwort (diese) ist 1 indiziert. (Ich weiß, das ist viel zu lang, es ist nur zum Spaß.)

Gemeinschaft
quelle
Rissig . Auch das Hinzufügen absolut nutzlos Code + [] - ist nicht wirklich in dem Geist der Regeln (+ []!)
fənɛtɪk
Nur damit Sie wissen, verursacht diese Antwort einige Probleme für das OP dieser Herausforderung. Anscheinend wird dadurch die gesamte Seite blockiert, da sie wie skizzenhaftes JavaScript aussieht. Könnten Sie vielleicht den Code in einen externen Link setzen? (Gist, pastedump, etc)
DJMcMayhem
Eigentlich habe ich es selbst auf den Punkt gebracht. Wenn Sie den Code lieber woanders haben möchten, können Sie ihn jederzeit erneut bearbeiten, wenn ich meine Grenzen überschritten habe.
DJMcMayhem
Ich vermute, dass das! + [] - (! + []) Es so macht, dass Sie die Konvertierung nicht einfach rückgängig machen können. Aber ein Teil des anderen Mülls macht es nur länger. Der entsprechende Code ist nur 15640 Bytes.
14.
0

Javascript, 30 Bytes, Abstand von 4, A000290 , A000079 , - Gebrochen!

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

0-basierte Indizierung

Die Lösung von @Kritixi Lithos war tatsächlich anders als meine

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

Probieren Sie es online aus

fəˈnəˈtɪk
quelle
1
Dies ist x**2und nicht2**x
Kritixi Lithos
Ich denke, es ist A000290 , nicht A000079.
betseg
@KritixiLithos soll es beides sein. Ich habe den falschen Sequenzlink oben geändert, als ich das andere Ende geändert habe.
Freitag, den
Cracked
Kritixi Lithos
0

Javascript (ES6), Entfernung ist 1, A000079 und A000004 - geknackt

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

Die ursprüngliche Antwort (diese) basiert auf 0. Nachdem es geknackt wurde, ist hier die ursprüngliche B-Funktion:

as=function(){ return 2*2**((1^1)*-1*~arguments[0]/11-(4-(as+[]).length%89))-(as+[]).length%7}
Gemeinschaft
quelle
1
Ich konnte meinen Crack codegolf.stackexchange.com/a/109976/64505 dazu bringen, sich inkonsistent zwischen zwei verschiedenen Umgebungen zu verhalten.
Freitag,
0

Java 7, Levenshtein Abstand von 4, A094683 , A000290 , Gebrochen

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;}

0-indiziert.
Probieren Sie es hier aus!

peech
quelle
@LliwTelracs hat das für die ersten 15 nicht-negativen ganzen Zahlen gemacht, siehe meine aktualisierte Antwort.
Peech
Gebrochene
fənɛtɪk