Dystans Levenshtein i OEIS (Rabusie)

11

To jest post Rabusia. Cop post jest tutaj .


Twoim zadaniem jest, aby wejście całkowitą N i wysyłać Pn cyfrowy w sekwencji OEIS A002942 .

Sekwencja składa się z kwadratowych liczb zapisanych wstecz:

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

Zauważ, że zera wiodące są usuwane ( 100 zmienia się na 1 , a nie 001 ). Łączenie tego w ciąg (lub jedną długą liczbę daje):

1496152639446181121441

Wyrzucisz N - cyfrę w tym ciągu / numerze. Możesz wybrać N jako 0 lub 1 indeks (proszę podać, który wybierzesz).

Przypadki testowe (indeksowane 1):

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

Twój kod powinien działać dla liczb do N = 2 ^ 15 (chyba że twój język domyślnie nie obsługuje 32-bitowych liczb całkowitych, w którym to przypadku N może być niższy).


Rabusie:

Powinieneś spróbować złamać posty gliniarzy.

Twój kod musi być w tym samym języku co posterunek gliny i mieć odległość Levenshteina dokładnie równą odległości podanej przez gliniarza. Twój kod nie może być dłuższy niż oryginalne rozwiązanie (ale może mieć ten sam rozmiar).

Tutaj możesz sprawdzić odległość Levenshtein!

Zwycięzcą zostanie złodziej, który złamał najwięcej postów.

Stewie Griffin
źródło
Poczekaj ... więc jeśli wynik rabunku nie musi być taki sam jak pierwotnie zamierzony program ... Czy policjant nie może napisać jednego programu i nadrobić dystansu ...?
Magic Octopus Urn
Cóż, gliniarze muszą podać alternatywny kod, aby oznaczyć zgłoszenie jako bezpieczne i kwalifikować się do wygranej. Wyjaśniłem w poście gliniarza. :)
Stewie Griffin
Nigdy nie próbowałem wyzwania gliniarza i rabusia. Wszystko to było dla mnie bardzo mylące, hah!
Magic Octopus Urn

Odpowiedzi:

3

JavaScript, Arnauld

/*ZZ*/m=>[...Array(m+1).keys()].map(eval(atob("eD0+K1suLi4iIit4KnhdLnJldmVyc2VgYC5qb2luYGA="))).join``[m]
Lynn
źródło
1
@Arnauld OK, myślę, że Array(m+1)to naprawiłem.
Lynn
To robi. FWIW, dodałem zamierzone rozwiązanie do mojego postu.
Arnauld,
2

6502 Kod maszynowy (C64), Felix Palmen

Przetestowałem to ze wszystkimi testowymi pytaniami i kilkoma dodatkami (np. 2 ^ 15 ... które zajęły trochę czasu) i wydaje się, że działa tak samo jak oryginał z 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

Demo online , użycie: sys49152, n gdzie n oznacza wejście indeksowane 0.

Jo.
źródło
Jest to poprawne, ponieważ znalazłeś całkowicie niepotrzebny kod, o którym nie wiedziałem, a zmiana dotyczy tego kodu: 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(...,...))

Wypróbuj online!

Nie znam Lua, ale to było proste, po prostu zastąpiłem spację nową linią.

Erik the Outgolfer
źródło
Hum, nie myśleć o tym, że oryginał był o wymianie (0+)(%d+)$z (0+)(%d+), więc było o 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

Wypróbuj online!

Uwaga: to zgłoszenie policjanta było błędne i nie działało dla danych wejściowych niższych niż 5. Podczas gdy ja byłem przy nim, zbudowałem to rozwiązanie, które ma prawidłową odległość Levenshteina ORAZ naprawia błąd.

Lew
źródło
1

Perl 5, (-p) Xcali

Zaktualizowano po komentarzu, Levenshtein Odległość między

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

i

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

ma 55 lat

Wypróbuj online

Nahuel Fouilleul
źródło
Biorąc pod uwagę, że M5.010 jest „darmowy”, nie sądzę, że powinien się tutaj liczyć. Nie jestem do końca pewien, jak liczyć flagi -akontra -p. Dwa rozwiązania, które wymyśliłem, wykorzystywały te same flagi. Sądzę, że flaga zostanie po prostu przyczepiona do frontu bez spacji, ale jestem skłonny dać się zwieść innym.
Xcali,
zaktualizowałem moją odpowiedź
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);}

Wypróbuj online!

Zmień dziennik

  • Zastąpiony .replaceAll() z new Long().
  • Usunięto test na idealne kwadraty. Teraz bezpośrednio używają idealnych kwadratów.
  • Zaktualizowano wszystkie nazwy zmiennych na wielkie litery.
  • Przepisz nierówności.
  • I w końcu dodał 21-bajtowy wiodący komentarz, aby osiągnąć poprawną LD.
Arnauld
źródło
1
Och, miło. To zupełnie inne niż myślałem, ale fajnie, że i tak osiągnąłeś 92 LD. Rozwiązanie, o którym myślałem, to: n->{String r="";for(int i=1;r.length()<=n+1;r+=new Long(new StringBuffer(i*i+++"").reverse()+""));return r.charAt(n);}( 118 bajtów, 92 LD w porównaniu z moją inną odpowiedzią).
Kevin Cruijssen
1

Oktawa , Stewie Griffin

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

Wypróbuj online!

Próbowałem własnej odpowiedzi Octave i zauważyłem już istniejącą. Mój był już znacznie krótszy, więc dodanie komentarza na końcu wystarczyło, aby dostać się na wymaganą odległość 63.

Tom Carpenter
źródło
Dobra robota :-) Miałem pętlę input()i wszystko, co się z tym wiąże ...
Stewie Griffin
1

PHP, Jo.

<?for($j++;strlen($p)<$argv[1];$j++)$p.=(int)strrev($j**2);echo($p[$argv[1]+2-3]);

Wypróbuj online!

(Planowałem zmienić nierówność, aby uzyskać jeszcze większy LD ...)

Colera Su
źródło
0

6502 Kod maszynowy (C64), Felix Palmen

Może być również „prostym” pęknięciem, ale wydaje się, że działa jak oryginał.
Posiadanie LD = 1 jest tak kuszące, aby spróbować go złamać (przepraszam, 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

Demo online , użycie: sys49152, n gdzie n oznacza wejście indeksowane 0.

Jo.
źródło
Nie jestem pewien, czy muszę to zaakceptować. Zastępuje on E9(polecenie odejmowania) przez EBktóry jest niezdefiniowany w 6502 kodu maszynowego, ale dzieje się to samo na NMOS 6502 i 6510 żetonów. Ten program mógłby na przykład ulec awarii na C64 DTV1. Ale jest mało prawdopodobne, aby znaleźć prawdziwy C64, który nie wykona go poprawnie, więc można go uznać za prawidłowy crack? Mogę poprosić o opinię na temat meta ....
Felix Palmen
Byłbym zainteresowany wkładem tutaj na meta .
Felix Palmen,
@FelixPalmen Wkrótce usunę tę odpowiedź.
Jo.
zachowaj to, zobacz także mój komentarz do meta. Społeczność wyraźnie wyraziła opinię, że jest ważna. To moja wina, że ​​nie wymagam tylko udokumentowanego kodu 6502 i będę o tym pamiętać na przyszłość.
Felix Palmen