Distancia Levenshtein y OEIS (ladrones)

11

Esta es la publicación de Robber. La publicación de la policía está aquí .


Su tarea es tomar una entrada entera N y generar el enésimo dígito en la secuencia OEIS A002942 .

La secuencia consiste en los números cuadrados escritos al revés:

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

Tenga en cuenta que los ceros iniciales se recortan ( 100 se convierte en 1 , no en 001 ). Concatenando esto en una cadena (o un número largo da):

1496152639446181121441

Deberá generar el enésimo dígito en esta cadena / número. Puede optar por tomar N como indexado 0 o indexado 1 (indique cuál elige).

Casos de prueba (1 indexado):

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

Su código debería funcionar para números hasta N = 2 ^ 15 (a menos que su idioma no pueda manejar enteros de 32 bits por defecto, en cuyo caso N puede ser menor).


Ladrones:

Deberías intentar descifrar las publicaciones de los policías.

Su código debe estar en el mismo idioma que la publicación de la policía, y tener una distancia de Levenshtein exactamente igual a la distancia dada por la policía. Su código no puede ser más largo que la solución original (pero puede ser del mismo tamaño).

¡Puede consultar la distancia de Levenshtein aquí!

El ganador será el ladrón que logró más publicaciones.

Stewie Griffin
fuente
Espere ... así que si el resultado del ladrón no tiene que ser el mismo que el programa original previsto ... ¿No puede el policía simplemente escribir un programa y hacer una distancia ...?
Urna de pulpo mágico el
Bueno, los policías deben proporcionar el código alternativo para marcar el envío como seguro y ser elegible para la victoria. He aclarado en la publicación de policía. :)
Stewie Griffin
Nunca he intentado un desafío de policía y ladrón. Todo esto fue muy confuso para mí ¡ja!
Urna mágica del pulpo

Respuestas:

3

JavaScript, Arnauld

/*ZZ*/m=>[...Array(m+1).keys()].map(eval(atob("eD0+K1suLi4iIit4KnhdLnJldmVyc2VgYC5qb2luYGA="))).join``[m]
Lynn
fuente
1
@Arnauld OK, creo que lo Array(m+1)arreglé.
Lynn
Lo hace. FWIW, he agregado la solución prevista a mi publicación.
Arnauld
2

6502 Código máquina (C64), Felix Palmen

Probé esto con todas las preguntas de casos de prueba y bastantes extras (como 2 ^ 15 ... que tomó un tiempo), y parece funcionar igual que el original 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

Demostración en línea , uso: sys49152, n donde n es la entrada indexada en 0.

Jo
fuente
Esto es correcto porque encontró un código completamente inútil que no conocía y el cambio está en este código: 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(...,...))

Pruébalo en línea!

No conozco a Lua, pero este era simple, solo reemplazó un espacio con una nueva línea.

Erik el Outgolfer
fuente
Hum, no pensar en eso, el original estaba a punto de reemplazar (0+)(%d+)$con (0+)(%d+), por lo que estaba a punto de expresiones regulares ^^'
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

Pruébalo en línea!

Nota: este envío de policía estaba dañado y no funcionaba para entradas inferiores a 5. Mientras lo hacía, creé esta solución que tiene la distancia correcta de Levenshtein Y corrige el error.

León
fuente
1

Perl 5, (-p) Xcali

Actualizado después del comentario, Levenshtein Distancia entre

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

y

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

es 55

Pruébalo en línea

Nahuel Fouilleul
fuente
Dado que M5.010 es "gratis", no creo que deba contar aquí. No estoy realmente seguro de cómo contar las banderas -aversus -p. Las dos soluciones que se me ocurrieron usaron las mismas banderas. Creo que la bandera se clavaría en el frente sin espacio, pero estoy dispuesto a dejarme influenciar por eso.
Xcali
actualicé mi respuesta
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);}

Pruébalo en línea!

Cambiar registro

  • Sustituido .replaceAll()por new Long().
  • Se eliminó la prueba de cuadrados perfectos. Ahora usando cuadrados perfectos directamente.
  • Se actualizaron todos los nombres de variables a mayúsculas.
  • Reescrito las desigualdades.
  • Y finalmente agregó un comentario principal de 21 bytes para alcanzar el LD correcto.
Arnauld
fuente
1
Oh bien. Eso es completamente diferente de lo que tenía en mente, pero es bueno que hayas llegado a 92 LD de todos modos. La solución que tenía en 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 bytes, 92 LD en comparación con mi otra respuesta).
Kevin Cruijssen
1

Octave , Stewie Griffin

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

Pruébalo en línea!

En realidad estaba intentando mi propia respuesta de Octave y descubrí la existente. El mío ya era significativamente más corto, por lo que agregar un comentario al final fue suficiente para llegar a la distancia requerida de 63.

Tom Carpenter
fuente
Bien hecho :-) Tuve un bucle input()y todo lo que conlleva ...
Stewie Griffin
1

PHP, Jo.

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

Pruébalo en línea!

(Estaba planeando cambiar la desigualdad para obtener un LD aún mayor ...)

Colera Su
fuente
0

6502 Código máquina (C64), Felix Palmen

También puede ser un crack "simple", pero parece funcionar como el original.
Tener el LD = 1 es muy tentador para intentar descifrarlo (lo siento, 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

Demostración en línea , uso: sys49152, n donde n es la entrada indexada en 0.

Jo
fuente
No estoy seguro de si tengo que aceptar esto. Reemplaza E9(un comando de resta) por el EBcual no está definido en el código de máquina 6502, pero sucede lo mismo en los chips NMOS 6502 y 6510. Este programa, por ejemplo, se bloquea en el C64 DTV1. Pero es poco probable que encuentre un C64 real que no lo ejecute correctamente, por lo que podría considerarse un crack válido. Podría pedir opiniones sobre meta ...
Felix Palmen
Me interesaría la entrada aquí en meta .
Felix Palmen
@FelixPalmen Tomaré esta respuesta pronto.
Jo.
guárdelo, vea también mi comentario sobre meta. La comunidad expresó claramente la opinión de que es válida. Es mi culpa no requerir solo el código 6502 documentado, y lo tendré en cuenta para el futuro.
Felix Palmen