Dies ist der Cop-Post. Der Räuberposten ist da .
Ihre Aufgabe ist es, eine Ganzzahleingabe N zu nehmen und die n- te Ziffer in der Sequenz OEIS A002942 auszugeben .
Die Folge besteht aus den rückwärts geschriebenen Quadratzahlen:
1, 4, 9, 61, 52, 63, 94, 46, 18, 1, 121, 441, ...
Beachten Sie, dass führende Nullen weggeschnitten werden ( 100 wird zu 1 , nicht zu 001 ). Verketten in eine Zeichenkette (oder eine lange Zahl ergibt):
1496152639446181121441
Sie müssen die n-te Ziffer in dieser Zeichenfolge / Nummer ausgeben . Sie können N als 0-indexiert oder 1-indexiert wählen (bitte geben Sie an, welches Sie wählen).
Testfälle (1-indiziert):
N = 1, ==> 1
N = 5, ==> 1
N = 17, ==> 1 <- Important test case! It's not zero.
N = 20, ==> 4
N = 78, ==> 0
N = 100, ==> 4
Ihr Code sollte für Zahlen bis zu N = 2 ^ 15 funktionieren (es sei denn, Ihre Sprache kann standardmäßig keine 32-Bit-Ganzzahlen verarbeiten. In diesem Fall kann N niedriger sein).
Polizei:
Sie müssen zwei Funktionen / Programme in derselben Sprache schreiben, die dasselbe tun. Sie müssen eine der Funktionen / Programme sowie den Levenshtein-Abstand zwischen den beiden von Ihnen geschriebenen Funktionen / Programmen posten . Der Levenshtein-Abstand wird in Zeichen gemessen (also ergibt die Addition eines Zwei-Byte-Zeichens eine LD = 1).
Der nicht offenbarte Code darf nicht länger als die ursprüngliche Lösung sein (er kann jedoch dieselbe Größe haben). Die Räuber werden versuchen, einen Code mit der genauen Levenshtein-Distanz zu schreiben, die Sie angegeben haben (er kann sich von Ihrem nicht offenbarten Code unterscheiden, solange er funktioniert).
Der Gewinner ist die ungerissene Einsendung mit der niedrigsten Levenshtein-Distanz.
Sie können die Levenshtein Abstand hier überprüfen!
Wenn Ihre Einreichung 7 Tage lang nicht geknackt wurde, können Sie den von Ihnen geschriebenen alternativen Code offenlegen und Ihre Einreichung als sicher markieren.
quelle
Antworten:
Haskell , LD = 13, gerissen
Probieren Sie es online!
Ich habe doppelt geprüft, ob führende Nullen abgeschnitten sind;)
Erläuterung:
quelle
cQuents 0 , LD = 1, Cracked
Probieren Sie es online!
Ich dachte, dass dies nicht für führende Nullen funktioniert, aber es funktioniert tatsächlich - die Umkehrfunktion in cQuents ist wie folgt codiert
int(reversed(str(n)))
.Erläuterung
quelle
JavaScript (ES6), LD = 103 ( geknackt )
Die Verwendung einer so hohen Levenshtein-Distanz ist wahrscheinlich nicht die beste Strategie, aber versuchen wir es trotzdem.
Testfälle
Code-Snippet anzeigen
Beabsichtigte Lösung
Codierter Teil:
quelle
+
stellt sicher, dass die umgekehrte Zeichenfolge in eine Zahl umgewandelt wird.Python 2, 104 Bytes, LD = 21 Ungültig und geknackt
PS Ist eine unbegrenzte Anzahl von Leerzeichen und Kommentaren zulässig? Wenn ja, ist dies nicht schwer zu knacken.quelle
\n
s (ungefähr 50)6502 Maschinencode (C64), LD = 1 ( geknackt )
Online-Demo , Verwendung:
sys49152,n
Won
ist die 0-indizierte Eingabe.Für den letzten Testfall brauchst du ein bisschen Geduld, da diese arme Maschine Millionen von Bitverschiebungen und Hinzufügungen machen muss, um dir das Ergebnis zu präsentieren;)
Die Sprache hier ist der Maschinencode, daher wird LD in diesem Format gemessen. Um dennoch einen Anfang zu geben, hier ist das Programm in der
ca65
Assembler-Quelle:... und hier ist das Linker-Skript für
ld65
:quelle
Perl 5 , 59 + 1 (
-a
) = 60 Bytes, LD = 55Probieren Sie es online!
quelle
Java 8 (177 Byte) LD = 92 ( geknackt von @Arnauld )
( Ich habe diesen Online-LD-Rechner benutzt. )
Dies ist wahrscheinlich nicht zu schwer, wenn Sie einfach Golf spielen. :)
Erläuterung:
Probieren Sie es hier aus.
quelle
n->{String r="";for(int i=1;r.length()<=n+1;r+=new Long(new StringBuffer(i*i+++"").reverse()+""));return r.charAt(n);}
( 118 Bytes, 92 LD )Oktave , LD = 63, gerissen
Probieren Sie es online!
Die Übermittlung ist 77 Bytes, so müssen Sie ziemlich viel ersetzen =)
quelle
6502 Maschinencode (C64), LD = 1, sicher
Online-Demo , Verwendung:
sys49152,n
Won
ist die 0-indizierte Eingabe.Beabsichtigte Lösung: (diff)
Der
30
(opcodebmi
) wird ersetzt durch90
(opcodebcc
) ersetzt. Dies entspricht dem folgenden Teil in der Assembler-Quelle:Es funktioniert, weil dieser Code prüft, ob eine Zahl kleiner als 8 ist. Der
cmp
Befehl subtrahiert dies und setzt die Flags entsprechend. Wenn also der Akkumulator eine Zahl kleiner als 8 enthält, läuft dies unter und löscht das Übertragsflag. Daher ist der richtige Verzweigungsbefehl in der Tatbcc
.bmi
(Verzweigung wenn negativ), wie im Originalcode, funktioniert auch hier, weil die verglichenen Zahlen klein genug sind, sodass das Ergebnis der Subtraktion im negativen Bereich ($80-$ff
) endet, wenn ein Unterlauf auftritt.Online-Demo
Dies ist eine verbesserte / komprimierte Version von meines vorherigen Beitrags . Neben einigen anderen Tricks, um die Größe zu reduzieren, wird der unnötige Code entfernt, der enthalten war, und es wurde eine Art "einfacher" *) Riss zugelassen. Insgesamt reduziert sich die Größe um 16 Bytes. Diesmal sollte es etwas schwieriger sein, das entsprechende Programm mit LD 1 zu finden :)
*) wahrscheinlich ist noch einiges an arbeit zu finden :)
Hier ist wieder die
ca65
Assembler-Quelle, um den Einstieg in den Code zu erleichtern:... und hier ist das Linker-Skript für
ld65
:quelle
Lua: LD = 1, rissig
Keine ausgefallenen Tricks hier :)
quelle
Mathematica, LD = 43 geknackt
Probieren Sie es online!
quelle
PHP, LD = 35 ( geknackt )
1-indiziert
Probieren Sie es online!
quelle
Python 3: LD = 9 | Geknackt
Dieser sollte ziemlich (sehr) leicht zu bekommen sein: P
quelle
.lstrip("0")
Teil nur kopiert werden kann.C ++, LD = 159
0-indiziert, Eingabe in
argv[1]
, auf GCC 7.2.0 kompiliertquelle
Groovy , 61 Bytes (LD = 23)
Probieren Sie es online!
quelle