Este es un desafío de policías y ladrones . Para el hilo de los ladrones, ve aquí .
Este desafío involucra dos secuencias OEIS elegidas por los policías - S 1 , S 2 - y qué tan bien esas secuencias pueden ser golfizadas y ofuscadas.
El desafío de los policías
Su desafío como policía es elegir un idioma disponible libremente y dos secuencias OEIS. Luego, escriba el código A en ese lenguaje que toma la entrada n y produce S 1 (n). Cuando ese código se modifica por una distancia de Levenshtein de X caracteres (con X no más que 0.5 * (length A)
), y se convierte en código B en el mismo lenguaje, entonces debe producir S 2 (n). En realidad, debe escribir este código B , pero no lo revele hasta que su desafío sea seguro (ver más abajo).
Las presentaciones de los policías deben incluir el nombre del idioma, el código completo A , el recuento de bytes de A , el valor X de cuántos cambios para llegar a su código secreto B y los números de secuencia S 1 y S 2 elegidos . Puede elegir si cada secuencia está indexada a 0 o indexada a 1, pero especifíquelo en su envío.
Para descifrar una presentación en particular, los ladrones deben idear un programa C en el mismo lenguaje (y versión) que produce S 2 (n) y si el carácter Y cambia de A (con Y <= X
). Los ladrones no necesariamente necesitan encontrar exactamente el mismo código B que produjo el policía (en secreto).
Ganar y anotar
Si su respuesta de policía no se ha descifrado en 7 días (168 horas), puede revelar su propia solución B , momento en el cual su respuesta se considera segura. Siempre y cuando no reveles tu solución, los ladrones todavía pueden descifrarla, incluso si ya han pasado los 7 días. Si su respuesta se agrieta, indíquelo en el encabezado de su respuesta, junto con un enlace a la respuesta del ladrón correspondiente.
Los policías ganan al tener la presentación sin descifrar con la A más corta . Si está atado, entonces la X más pequeña se usará como desempate. Si aún está empatado, la presentación anterior ganará.
Reglas adicionales
- No debe utilizar ninguna función integrada para generar hash, cifrado o generación de números aleatorios (incluso si coloca el generador de números aleatorios en un valor fijo).
- Se permiten programas o funciones, pero el código no debe ser un fragmento y no debe asumir un entorno REPL.
- Puede tomar entrada y dar salida en cualquier formato conveniente . Los métodos de entrada / salida deben ser los mismos para ambas secuencias.
- La calculadora definitiva para la distancia de Levenshtein para este desafío es esta en Planet Calc.
- Además de ser un desafío CnR, este es el código de golf, por lo que se aplican todas las reglas habituales de golf.
fuente
(0.5*len(A))
Respuestas:
Brain-Flak , 28 bytes, Distancia de 4, A002817 , A090809AgrietadoEsta respuesta usa indexación 1
Pruébalo en línea
Para cualquier persona interesada, hay 27475 programas válidos de Brain-Flak con Levenshtein distancia 4 de este programa y 27707 con distancia 4 o menos. Por lo tanto, una solución de fuerza bruta sería factible en una computadora de grado de consumo.
fuente
X = 4
lugar deLevenshtein distance of 4
.X
es realmente la única variable que necesitan saber.7 , 33 caracteres, 13 bytes, X = 10, A000124 → A000142 , Seguro
Pruébalo en línea!
La distancia de Levenshtein se mide en términos de caracteres, por lo que he escrito el programa en términos de los caracteres que contiene arriba (y ¡Pruébelo en línea!, Incluido el lenguaje en sí, se complace en ejecutar programas codificados en ASCII). Sin embargo, el programa se almacena en el disco utilizando la codificación de sub-byte de 7, lo que significa que el programa en sí es el siguiente hexdump (por lo tanto, 13 bytes de longitud):
(Debido a que la distancia de Levenshtein se mide en términos de caracteres, no necesariamente agrega / elimina / cambia 10 bytes aquí, por lo que probablemente sea mejor trabajar con el ASCII original).
El programa tal como está escrito implementa A000124 (números triangulares + 1); cualquier grieta debe implementar A000142 (factoriales). Ambos programas toman la entrada de stdin (como enteros decimales), escriben su salida en stdout y tratan una entrada de 1 como el primer elemento de la secuencia (y una entrada de 2 como el segundo elemento, etc.).
Con suerte, el valor X muy alto detendrá a las personas que fuerzan el programa, esta vez (que siempre es un riesgo con las entradas de policías y ladrones en 7).
La solución
Pruébalo en línea!
Diferencias con el original:
No tengo explicaciones preparadas sobre cómo funcionan, por lo que me llevará un tiempo obtener una explicación, ya que voy a tener que resolverlo casi desde cero. Esperemos que haya una explicación eventualmente.
fuente
Pyke, Levenshtein distancia de 1, A036487 , A135628 .
¡Agrietado!
Pruébalo aquí!
fuente
Perl 6 , 10 bytes, X = 1, A000012 → A001477
¡Agrietado!
S 1 = A000012 =
1,1,1,1,1,...
= La secuencia de todos los 1. (0 indexado)S 2 = A001477 =
0,1,2,3,4,...
= Los enteros no negativos. (0 indexado)Pruébalo en línea!
Confirmado para trabajar con la versión Perl 6 2017.01 , y con la versión Perl6 ejecutándose en TIO.
( A podría jugar más golf
1***
, espero que también esté permitido como está).fuente
Perl 6 , 13 bytes, X = 1, A161680 → A000217
¡Seguro!
0 0 1 3 6 10 15 21...
= Cero seguido de los números triangulares.0 1 3 6 10 15 21 28 ...
= Los números triangulares.Pruébalo en línea!
(Confirmado para trabajar con la versión de Perl 6 que se ejecuta en TIO).
Solución
Cómo funciona el original:
Cómo funciona la solución:
Explota el hecho de que los operadores numéricos como la suma tratan una lista como su número de elementos, por lo que en el ejemplo la suma es
1 + 2 + 3 + 4 = 10
.Y sí, el no operativo "Reducir con operador de coma" en el original está un poco eludiendo las reglas del código de golf, pero prefiero verlo como un algoritmo tonto que se ha jugado tanto como sea posible (espacios en blanco, etc.) lo que es... :)
fuente
Gelatina , 11 bytes, X = 5, A005185 → A116881
Este es un programa completo que toma un número entero como argumento de línea de comando e imprime un número entero.
Ambas secuencias están indexadas como en OEIS, es decir, A005185 está indexado en 1 y A116881 está indexado en 0.
Pruébalo en línea!
fuente
Javascript, 41 bytes, Distancia de 3, A061313 , A004526 , Agrietado
Pruébalo en línea
Utiliza 1 indexación basada, la solución utiliza 0 indexación basada.
Una vez más, una solución diferente ...
fuente
Perl 6 , 19 bytes, X = 1, A000045 → A000035
¡Agrietado!
0 1 1 2 3 5 8 13 21 34...
= "Números de Fibonacci". ( 0 indexado )0 1 0 1 0 1 0 1 0 1...
= "Período 2". ( 0 indexado )Pruébalo en línea!
(Confirmado para trabajar con la versión de Perl 6 que se ejecuta en TIO).
fuente
WolframAlpha, 18 bytes, X = 1Agrietado por math_junkie!
A veces, WolframAlpha podrá mostrar una función pura como esta en forma funcional (otras veces se confunde); pero se puede invocar alegremente con una entrada dada, por ejemplo,
(sum1to#of n^1)*2&@5
produce30
.S1 = A002378 (números prónicos)
S2 = A000537 (suma de los primeros
n
cubos)Ambas secuencias están indexadas a 0.
fuente
Pyke, Levenshtein distancia de 2, A008788 , A007526
¡Agrietado!
Pruébalo aquí!
Vamos a ser un poco más difícil, ¿de acuerdo?
La primera respuesta está basada en 1 y el crack está basado en 0.
fuente
Javascript, 15704 bytes, distancia de 2, A059841 y A000004 - descifrado
Esta solución es extremadamente larga, por lo que puede encontrar el código completo en este github gist.
La respuesta original (esta) es 1 indexada. (Sé que esto es demasiado tiempo, es solo por diversión).
fuente
Brain-Flak , 16 bytes, distancia de Levenshtein de 4, A000217 y A002378 - ¡ Agrietado por Martin Ender!
Pruébalo en línea!
Esto debería ser bastante fácil de descifrar.
fuente
Javascript, 30 bytes, Distancia de 4, A000290 , A000079 , - ¡Agrietado!
Indexación basada en 0
La solución de @Kritixi Lithos era realmente diferente a la mía
Pruébalo en línea
fuente
x**2
y no2**x
Javascript (ES6), la distancia es 1, A000079 y A000004 - descifrado
La respuesta original (esta) está basada en 0. Ahora que se ha descifrado, aquí está la función B original:
fuente
Perl 6 , 7 bytes, X = 2, A059841 → A001477
¡Agrietado!
1 0 1 0 1 0 1 0...
= "* Período 2: Repetir (1,0)". (0 indexado)0 1 2 3 4 5 6 7...
= "Los enteros no negativos". (0 indexado)Pruébalo en línea!
(Confirmado para trabajar con la versión de Perl 6 que se ejecuta en TIO).
fuente
Java 7, distancia de Levenshtein de 4, A094683 , A000290 , Agrietado
0 indexado.
Pruébalo aquí!
fuente