Levenshtein Entfernung & OEIS (Räuber)


11

Dies ist der Räuberposten. Der Cop-Beitrag ist hier .


Ihre Aufgabe ist es, eine ganzzahlige Eingabe N zu nehmen und die N-te Ziffer in der Sequenz OEIS A002942 auszugeben .

Die Sequenz besteht aus den rückwärts geschriebenen quadratischen Zahlen:

1, 4, 9, 61, 52, 63, 94, 46, 18, 1, 121, 441, ...

Beachten Sie, dass führende Nullen weggeschnitten werden ( 100 wird 1 , nicht 001 ). Verketten Sie dies zu einer Zeichenfolge (oder eine lange Zahl ergibt):

1496152639446181121441

Sie müssen die N-te Ziffer in dieser Zeichenfolge / Nummer ausgeben . Sie können N als 0-indiziert oder 1-indiziert wählen (bitte geben Sie an, welches Sie wählen).

Testfälle (1-indiziert):

N = 5,      ==> 1
N = 17,     ==> 1   <- Important test case! It's not zero.
N = 20,     ==> 4
N = 78,     ==> 0
N = 100,    ==> 4
N = 274164, ==> 1

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


Räuber:

Sie sollten versuchen, die Beiträge der Cops zu knacken.

Ihr Code muss in derselben Sprache wie der Cop-Post sein und einen Levenshtein-Abstand haben, der genau dem vom Cop angegebenen Abstand entspricht. Ihr Code kann nicht länger als die ursprüngliche Lösung sein (er kann jedoch dieselbe Größe haben).

Hier können Sie die Levenshtein-Entfernung überprüfen!

Der Gewinner wird der Räuber sein, der die meisten Beiträge geknackt hat.


Warten Sie ... also, wenn das Ergebnis des Räubers nicht mit dem ursprünglich beabsichtigten Programm übereinstimmen muss ... Kann der Polizist nicht einfach ein Programm schreiben und eine Distanz ausgleichen ...?
Magic Octopus Urn

Nun, die Cops müssen den alternativen Code bereitstellen, um die Einreichung als sicher zu markieren und für den Gewinn in Frage zu kommen. Ich habe in der Cop Post klargestellt. :)
Stewie Griffin

Ich habe noch nie eine Cop-and-Robber-Herausforderung versucht. Das alles war sehr verwirrend für mich, hah!
Magic Octopus Urn

Antworten:



3

JavaScript, Arnauld

/*ZZ*/m=>[...Array(m+1).keys()].map(eval(atob("eD0+K1suLi4iIit4KnhdLnJldmVyc2VgYC5qb2luYGA="))).join``[m]

1
@Arnauld OK, ich denke, es wurde Array(m+1)behoben.
Lynn

Es tut. FWIW, ich habe meinem Beitrag die beabsichtigte Lösung hinzugefügt.
Arnauld



2

6502 Maschinencode (C64), Felix Palmen

Ich habe dies mit allen Fragen getestet, Testfälle und einige Extras (wie 2 ^ 15 ... die eine Weile gedauert haben), und es scheint genauso zu funktionieren wie das Original mit LD = 1.

00 C0 20 FD AE A0 00 99 5B 00 C8 20 73 00 90 F7 99 5B 00 A2 0B CA 88 30 09 B9
5B 00 29 0F 95 5B 10 F3 A9 00 95 5B CA 10 F9 A9 01 A0 03 99 69 00 88 10 FA A0
20 A2 76 18 B5 E6 90 02 09 10 4A 95 E6 E8 10 F4 A2 03 76 69 CA 10 FB 88 F0 11
A2 09 B5 5C C9 08 30 04 E9 03 95 5C CA 10 F3 30 D6 A2 03 B5 69 95 57 CA 10 F9
A9 01 85 FB A2 03 A9 00 95 FB CA D0 FB A2 03 B5 FB 95 22 95 26 CA 10 F7 A9 00
A2 03 95 69 CA 10 FB A0 20 A2 02 46 25 76 22 CA 10 FB 90 0C A2 7C 18 B5 AA 75
ED 95 ED E8 10 F7 A2 7D 06 26 36 AA E8 10 FB 88 10 DD A0 0B A9 00 99 5A 00 88
D0 FA A0 20 A2 09 B5 5C C9 05 30 04 69 02 95 5C CA 10 F3 06 69 A2 FD 36 6D E8
D0 FB A2 09 B5 5C 2A C9 10 29 0F 95 5C CA 10 F4 88 D0 D7 E0 0A F0 05 E8 B5 5B
F0 F7 09 30 99 5B 00 C8 E8 E0 0B F0 04 B5 5B 90 F1 88 B9 5B 00 C9 30 F0 F8 A2
7C 18 B5 DB E9 00 95 DB E8 10 F7 90 14 88 30 05 B9 5B 00 D0 EA A2 7C F6 7F D0
03 E8 10 F9 4C 73 C0 B9 5B 00 4C D2 FF

Online-Demo , Verwendung: sys49152, n wobei n die 0-indizierte Eingabe ist.


Dies ist richtig, weil Sie einen völlig nutzlosen Code gefunden haben, den ich nicht kannte, und die Änderung in diesem Code enthalten ist: o
Felix Palmen

1

Lua , Katenkyo

i=1s=""while(#s<...+0)do s=s..((i*i)..""):reverse():gsub("(0+)(%d+)$","%2")i=i+1 end
print(s:sub(...,...))

Probieren Sie es online aus!

Ich kenne Lua nicht, aber dies war eine einfache, nur ein Leerzeichen durch eine neue Zeile ersetzt.


Hum, dachte nicht darüber nach, das Original sollte ersetzt (0+)(%d+)$werden (0+)(%d+), also ging es um Regex ^^ '
Katenkyo


1

Python 2 , Dylnan

d=lambda y:y if y%10>0 else d(y/10)
lambda n:''.join([str(d(x*x))[::-1]for x in range(1,n+1)])[n-1]#fix

Probieren Sie es online aus!

Hinweis: Diese Cop-Übermittlung war fehlerhaft und funktionierte nicht für Eingaben unter 5. Während ich dabei war, habe ich diese Lösung erstellt, die den richtigen Levenshtein-Abstand hat UND den Fehler behebt.


1

Perl 5, (-p) Xcali

Nach Kommentar aktualisiert, Levenshtein Abstand zwischen

a$j.=int reverse$_**2for 1..$_;$_--;say$j=~s/.{$_}(.).*/$1/r

und

p$_=substr w.(join"",map{whyddwzz;0|reverse$_**2}1..$_),$_,1

ist 55

Probieren Sie es online aus


Angesichts der Tatsache, dass M5.010 "kostenlos" ist, denke ich nicht, dass es hier zählen sollte. Ich bin mir nicht sicher, wie ich die -aVersus- -pFlags zählen soll. Die beiden Lösungen, die ich mir ausgedacht habe, verwendeten dieselben Flags. Ich würde denken, dass die Flagge nur ohne Leerzeichen an der Vorderseite befestigt werden würde, aber ich bin bereit, mich von anderen dazu beeinflussen zu lassen.
Xcali

hat meine Antwort aktualisiert
Nahuel Fouilleul

1

Java 8, Kevin Cruijssen

/*!FooBarFooBarFoo!*/N->{String R="",T=R;for(int I=1,J;N+2>R.length();I++){for(T="",J=(I*I+"").length();0<J;T+=(I*I+"").charAt(--J));R+=new Long(T)+"";}return R.charAt(N);}

Probieren Sie es online aus!

Änderungsprotokoll

  • Ersetzt .replaceAll()durch new Long().
  • Der Test für perfekte Quadrate wurde entfernt. Verwenden Sie jetzt direkt perfekte Quadrate.
  • Alle Variablennamen wurden in Großbuchstaben aktualisiert.
  • Die Ungleichungen wurden umgeschrieben.
  • Und schließlich wurde ein 21-Byte-Leitkommentar hinzugefügt, um die richtige LD zu erreichen.

1
Oh schön. Das ist völlig anders als ich gedacht hatte, aber schön, dass du trotzdem 92 LD hast. Die Lösung, die ich im Sinn hatte, war: 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 im Vergleich zu meiner anderen Antwort.)
Kevin Cruijssen

1

Oktave , Stewie Griffin

@(n)regexprep(fliplr(num2str((1:n)'.^2))'(:)',' +0*','')(n)%abcdefghijk

Probieren Sie es online aus!

Ich habe tatsächlich versucht, meine eigene Octave-Antwort zu finden, und die vorhandene entdeckt. Meins war bereits deutlich kürzer, so dass das Hinzufügen eines Kommentars am Ende ausreichte, um die erforderliche Entfernung von 63 zu erreichen.


Gut gemacht :-) Ich hatte eine Schleife mit input()und alles was dazu gehört ...
Stewie Griffin


0

6502 Maschinencode (C64), Felix Palmen

Kann auch ein "einfacher" Riss sein, aber es scheint wie das Original zu funktionieren.
Die LD = 1 zu haben ist einfach so verlockend zu versuchen, sie zu knacken (sorry, Felix). :) :)

00 C0 20 FD AE A0 00 99 5B 00 C8 20 73 00 90 F7 99 5B 00 A2 0B CA 98 88 30 09
B9 5B 00 29 0F 95 5B 10 F2 95 5B CA 10 FB A0 20 A2 76 18 B5 E6 90 02 09 10 4A
95 E6 E8 10 F4 A2 03 76 69 CA 10 FB 88 F0 11 A2 09 B5 5C C9 08 30 04 EB 03 95
5C CA 10 F3 30 D6 A2 03 B5 69 95 57 CA 10 F9 A9 01 85 FB A2 03 A9 00 95 FB CA
D0 FB A2 03 B5 FB 95 22 95 26 CA 10 F7 A9 00 A2 03 95 69 CA 10 FB A0 20 A2 02
46 25 76 22 CA 10 FB 90 0C A2 7C 18 B5 AA 75 ED 95 ED E8 10 F7 A2 7D 06 26 36
AA E8 10 FB 88 10 DD A2 0B A9 00 95 5A CA D0 FB A0 20 A2 09 B5 5C C9 05 30 04
69 02 95 5C CA 10 F3 06 69 A2 FD 36 6D E8 D0 FB A2 09 B5 5C 2A C9 10 29 0F 95
5C CA 10 F4 88 D0 D7 E8 B5 5B F0 FB 09 30 99 5B 00 C8 E8 E0 0B F0 04 B5 5B 90
F1 88 B9 5B 00 C9 30 F0 F8 A2 7C 18 B5 DB E9 00 95 DB E8 10 F7 90 14 88 30 05
B9 5B 00 D0 EA A2 7C F6 7F D0 03 E8 10 F9 4C 68 C0 B9 5B 00 4C D2 FF

Online-Demo , Verwendung: sys49152, n wobei n die 0-indizierte Eingabe ist.


Ich bin mir nicht sicher, ob ich das akzeptieren muss. Es ersetzt E9(einen Subtraktionsbefehl), durch EBden im 6502-Maschinencode undefiniert ist , tut dies jedoch zufällig auf NMOS 6502- und 6510-Chips. Dieses Programm würde zum Beispiel auf dem C64 DTV1 abstürzen. Aber es ist unwahrscheinlich , dass eine finden echten C64 , dass es nicht richtig ausgeführt werden , so dass es könnte einen gültigen Riss in Betracht gezogen werden? Ich könnte nach Meinungen zu Meta fragen ...
Felix Palmen

Ich würde mich für Beiträge hier auf Meta interessieren .
Felix Palmen

@FelixPalmen Ich werde diese Antwort bald notieren.
Jo.

behalte es, siehe auch meinen Kommentar zu Meta. Die Community hat klar die Meinung geäußert, dass es gültig ist. Es ist meine Schuld, nicht nur dokumentierten 6502-Code zu benötigen, und ich werde dies für die Zukunft berücksichtigen.
Felix Palmen
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.