Levenshtein distance & OEIS (Ladri)


11

Questo è il post di ladro. Il post di Cop è qui .


Il tuo compito è quello di prendere un input intero N ed emettere l' ennesima cifra nella sequenza OEIS A002942 .

La sequenza è composta dai numeri quadrati scritti al contrario:

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

Si noti che gli zeri iniziali vengono eliminati ( 100 diventa 1 , non 001 ). Concatenando questo in una stringa (o un numero lungo dà):

1496152639446181121441

Dovresti produrre l' ennesima cifra in questa stringa / numero. Puoi scegliere di prendere N come 0-indicizzato o 1-indicizzato (indica quale scegli).

Casi di test (1 indicizzato):

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

Il codice dovrebbe funzionare per numeri fino a N = 2 ^ 15 (a meno che la tua lingua non possa gestire numeri interi a 32 bit per impostazione predefinita, nel qual caso N può essere inferiore).


ladri:

Dovresti provare a decifrare i post della polizia.

Il tuo codice deve essere nella stessa lingua del posto di sbirro e avere una distanza di Levenshtein esattamente uguale alla distanza data dallo sbirro. Il tuo codice non può essere più lungo della soluzione originale (ma può avere le stesse dimensioni).

Puoi controllare la distanza di Levenshtein qui!

Il vincitore sarà il ladro che ha incrinato il maggior numero di post.


Aspetta ... quindi se il risultato del ladro non deve essere lo stesso del programma originale previsto ... Il poliziotto non può semplicemente scrivere un programma e recuperare una distanza ...?
Magic Octopus Urn

Bene, gli sbirri devono fornire il codice alternativo per contrassegnare l'invio come sicuro ed essere idoneo per la vittoria. Ho chiarito nel post della polizia. :)
Stewie Griffin,

Non ho mai provato una sfida da poliziotto e ladro. Tutto questo è stato molto confuso per me, ah!
Magic Octopus Urn

Risposte:



3

JavaScript, Arnauld

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

1
@Arnauld OK, penso che sia stato Array(m+1)risolto.
Lynn,

Lo fa. FWIW, ho aggiunto la soluzione prevista al mio post.
Arnauld,



2

6502 Codice macchina (C64), Felix Palmen

Ho testato questo con tutti i casi di test delle domande e alcuni extra (come 2 ^ 15 ... che ha richiesto un po 'di tempo), e sembra funzionare come l'originale con 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 , utilizzo: sys49152, n dove n è l'input indicizzato 0.


Questo è corretto perché hai trovato del codice completamente inutile di cui non ero a conoscenza e la modifica è in questo codice: 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(...,...))

Provalo online!

Non conosco Lua, ma questo era semplice, ha appena sostituito uno spazio con una nuova riga.


Hum, non pensare che, l'originale era di sostituire (0+)(%d+)$con (0+)(%d+), quindi si trattava di 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

Provalo online!

Nota: questo invio di poliziotti è stato intercettato e non ha funzionato per input inferiori a 5. Mentre ero lì ho costruito questa soluzione che ha la distanza corretta di Levenshtein E corregge il bug.


1

Perl 5, (-p) Xcali

Aggiornato dopo il commento, Levenshtein Distanza tra

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

e

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

è 55

Provalo online


Dato che M5.010 è "gratuito", non credo che dovrebbe valere qui. Non sono davvero sicuro di come contare le bandiere -acontro -p. Le due soluzioni che ho escogitato hanno usato entrambe le stesse bandiere. Penserei che la bandiera sarebbe stata attaccata sul davanti senza uno spazio, ma sono disposto a essere influenzato da altri su questo.
Xcali,

aggiornata la mia risposta
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);}

Provalo online!

Registro delle modifiche

  • Sostituito .replaceAll()con new Long().
  • Rimosso il test per quadrati perfetti. Ora usando direttamente i quadrati perfetti.
  • Aggiornato tutti i nomi delle variabili in maiuscolo.
  • Riscritto le disuguaglianze.
  • E infine aggiunto un commento iniziale di 21 byte per raggiungere il LD corretto.

1
Oh bello. È completamente diverso da quello che avevo in mente, ma è bello avere comunque 92 LD. La soluzione che avevo in mente era: n->{String r="";for(int i=1;r.length()<=n+1;r+=new Long(new StringBuffer(i*i+++"").reverse()+""));return r.charAt(n);}( 118 byte, 92 LD rispetto alla mia altra risposta).
Kevin Cruijssen,

1

Ottava , Stewie Griffin

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

Provalo online!

In realtà stavo tentando la mia risposta Octave e ho individuato quella esistente. Il mio era già significativamente più corto, quindi aggiungere un commento alla fine era sufficiente per raggiungere la distanza richiesta di 63.


Ben fatto :-) Ho avuto un ciclo con input()e tutto ciò che ne consegue ...
Stewie Griffin

1

PHP, Jo.

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

Provalo online!

(Avevo intenzione di cambiare la disuguaglianza per ottenere LD ancora più grandi ...)


0

6502 Codice macchina (C64), Felix Palmen

Può anche essere una crepa "semplice", ma sembra funzionare come l'originale.
Avere LD = 1 è così allettante da provare a decifrarlo (scusate 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 , utilizzo: sys49152, n dove n è l'input indicizzato 0.


Non sono sicuro di dover accettare questo. Sostituisce E9(un comando di sottrazione) con il EBquale non è definito nel codice macchina 6502, ma sembra fare lo stesso sui chip NMOS 6502 e 6510. Ad esempio, questo programma si arresterebbe in modo anomalo sul DTV1 C64. Ma è improbabile trovare un vero C64 che non lo esegua correttamente, quindi potrebbe essere considerato un crack valido? Potrei chiedere opinioni su meta ....
Felix Palmen

Sarei interessato a inserire qui su meta .
Felix Palmen,

@FelixPalmen Prenderò presto questa risposta.
Jo.

tienilo, vedi anche il mio commento su meta. La comunità ha chiaramente espresso l'opinione che sia valida. È colpa mia non richiedere solo il codice 6502 documentato, e lo terrò a mente per il futuro.
Felix Palmen,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.