Esta es la publicación de policía. La publicación de Robber 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 = 1, ==> 1
N = 5, ==> 1
N = 17, ==> 1 <- Important test case! It's not zero.
N = 20, ==> 4
N = 78, ==> 0
N = 100, ==> 4
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).
Policías:
Debe escribir dos funciones / programas, en el mismo lenguaje, que hagan lo mismo. Debe publicar una de las funciones / programas, así como la distancia de Levenshtein entre las dos funciones / programas que ha escrito. La distancia de Levenshtein se mide en caracteres (por lo que la adición de un carácter de dos bytes dará un LD = 1).
El código no revelado no puede ser más largo que la solución original (pero puede ser del mismo tamaño). Los ladrones intentarán escribir un código con la distancia exacta de Levenshtein que diste (puede ser diferente de tu código no revelado, siempre que funcione).
El ganador será la presentación sin descifrar que tenga la menor distancia de Levenshtein.
¡Puede consultar la distancia de Levenshtein aquí!
Si su envío no se descifra durante 7 días, puede revelar el código alternativo que ha escrito y marcar su envío como seguro.
fuente
Respuestas:
Haskell , LD = 13, agrietado
Pruébalo en línea!
Verifiqué que los ceros iniciales estén recortados;)
Explicación:
fuente
cQuents 0 , LD = 1, agrietado
Pruébalo en línea!
Pensé que esto no funcionaba para los ceros iniciales, pero en realidad sí funciona: la función inversa en cQuents se codifica como
int(reversed(str(n)))
.Explicación
fuente
JavaScript (ES6), LD = 103 ( agrietado )
Usar una distancia de Levenshtein tan alta probablemente no sea la mejor estrategia, pero probémoslo de todos modos.
Casos de prueba
Mostrar fragmento de código
Solución prevista
Parte codificada:
fuente
+
asegura que la cadena invertida se coaccione a un Número.Python 2, 104 bytes, LD = 21 no válido y agrietado
PD ¿Se permite una cantidad ilimitada de espacios en blanco y comentarios? Si es así, esto no será difícil de descifrar.fuente
\n
s (aproximadamente 50)Código de máquina 6502 (C64), LD = 1 ( descifrado )
Demostración en línea , uso:
sys49152,n
dónden
está la entrada indexada 0.Para el último caso de prueba, necesita un poco de paciencia, ya que esta máquina pobre tiene que hacer millones de cambios de bits y adiciones para presentarle el resultado;)
El lenguaje aquí es el código de la máquina, por lo que LD se mide en este formato; sin embargo, para empezar, aquí está el programa en la
ca65
fuente del ensamblador:... y aquí está el script de enlace para
ld65
:fuente
Perl 5 , 59 + 1 (
-a
) = 60 bytes, LD = 55Pruébalo en línea!
fuente
Java 8, (177 bytes) LD = 92 ( descifrado por @Arnauld )
( He usado esta calculadora de LD en línea ) .
Esto probablemente no sea demasiado difícil si simplemente juegas al golf. :)
Explicación:
Pruébalo aquí
fuente
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 )Octava , LD = 63, Agrietada
Pruébalo en línea!
El envío es de 77 bytes, por lo que debe sustituir un poco =)
fuente
6502 código máquina (C64), LD = 1, seguro
Demostración en línea , uso:
sys49152,n
dónden
está la entrada indexada 0.Solución prevista: (diff)
El
30
(opcodebmi
) se reemplaza por90
(opcodebcc
). Esto corresponde a la siguiente parte en la fuente del ensamblador:Funciona porque este código verifica si un número es menor que 8. La
cmp
instrucción realiza una resta para eso, estableciendo las banderas en consecuencia. Entonces, si el acumulador contiene un número menor que 8, esto se desborda, borrando el indicador de acarreo, por lo tanto, la instrucción de ramificación correcta esbcc
.bmi
(ramificando cuando es negativo), como en el código original, simplemente funciona aquí también, porque los números comparados son lo suficientemente pequeños, por lo que el resultado de la resta termina en el rango negativo ($80-$ff
) cuando ocurre un flujo inferior.Demostración en línea
Esta es una versión mejorada / compacta de mi envío anterior . Entre otros trucos para reducir el tamaño, elimina el código inútil que estaba contenido y permitía una especie de "simple" *) crack. Con todo, el tamaño se reduce en 16 bytes. Esta vez, debería ser un poco más difícil encontrar el programa equivalente con LD 1 :)
*) probablemente todavía hay bastante trabajo por encontrar, por supuesto :)
De nuevo, aquí está el
ca65
fuente ensamblador, para ayudar a comenzar con el código:... y aquí está el script de enlace para
ld65
:fuente
Lua: LD = 1, agrietado
No hay trucos elegantes aquí :)
fuente
Mathematica, LD = 43 agrietado
Pruébalo en línea!
fuente
PHP, LD = 35 ( Agrietado )
1 indexado
Pruébalo en línea!
fuente
Python 3: LD = 9 | Agrietado
Este debería ser bastante (muy) fácil de obtener: P
fuente
.lstrip("0")
parte solo se puede copiar.C ++, LD = 159
0 indexado, entrada
argv[1]
, compilado en GCC 7.2.0fuente
Groovy , 61 bytes (LD = 23)
Pruébalo en línea!
fuente