En un accidente muy inusual que involucra una pequeña muestra de radio, una ballena electrocutada y tres ositos de goma, se ha mutado parte del código fuente de The Management ™. Poco sabe el jefe de The Management ™, en realidad fueron los policías los responsables, en un intento por frustrar los planes "malvados" de The Management ™. Entonces, los Robbers® han sido contratados en un intento de recuperar el código original, porque ¿a quién no le gusta ser malvado a veces?
nota: Este desafío se inspiró en gran medida en Descifrar el código fuente .
Descripción
Este es un desafío de policías y ladrones .
- Los policías escribirán un programa (el código mutado) que realiza la Tarea # 1 (y también escriben un programa que realiza la Tarea # 2, pero se mantiene en secreto).
- Los ladrones intentarán revertir la "mutación" y cambiar este código original en un código que realice la Tarea # 2.
En este desafío, la Tarea n. ° 1 será la salida del n
número primo y la Tarea n. ° 2 será el n
número de Fibonacci (que de alguna manera es malo, de acuerdo con los Cops © de todos modos). La secuencia de Fibonacci se define como ( n=1
→ 1
; n=2
→ 1
; n=3
→ 2
; ...), y los números primos se definen como ( n=1
→ 2
; n=2
→ 3
; n=3
→ 5
; ...).
El objetivo de los policías es minimizar la diferencia entre los programas que completan la Tarea n. ° 1 y la Tarea n. ° 2, mientras se evita que los ladrones vuelvan a crear el código que completa la Tarea n. ° 2.
Reglas de policía
Los policías escribirán dos programas (uno que complete la Tarea # 1 y otro que complete la Tarea # 2), y harán pública la siguiente información:
- El primer programa (que genera el
n
número primo th) - La distancia de edición de Levenshtein entre el primer programa y el segundo programa
- El lenguaje de programación en el que ambos programas están escritos (debe ser el mismo lenguaje para ambos programas)
Las siguientes restricciones se aplican a ambos programas:
- Deben tener 128 caracteres de longitud o menos.
- Solo deben usar ASCII imprimible (más líneas nuevas, que también están permitidas).
- Deben tardar menos de 10 segundos en ejecutarse
n=45
y no están obligados a producir la salida correcta para ningunon>45
. - No deben usar ninguna función hash o criptográfica.
Reglas de ladrones
El ladrón intentará cambiar el programa del policía (que completa la Tarea # 1) en un programa que complete la Tarea # 2 (no necesariamente el programa original escrito por el policía) en la distancia de edición especificada por el policía.
Un envío ya agrietado no se puede volver a agrietar (solo el primer ladrón que descifra un envío obtiene crédito).
Después de descifrar un envío, haga lo siguiente:
- Publique una respuesta a la pregunta adjunta (enlace) de este desafío , proporcionando el idioma, su solución y un enlace a la respuesta original.
- Deje un comentario con el texto "Agrietado" que se vincula a su respuesta publicada.
- Edite la respuesta del policía si tiene privilegios de edición (si no los tiene, espere hasta que otra persona con los privilegios necesarios lo haga por usted o sugiera una edición).
Tanteo
Si el programa de un policía permanece sin descifrar durante 1 semana, el policía puede publicar el código original que completa la Tarea # 2 (en la distancia de edición especificada), y el envío se considera a partir de ese momento "seguro". La presentación segura que tenga la menor distancia de edición ganará. En caso de empate, gana el programa más corto (el original que completa la Tarea # 1). Si dos envíos aún están empatados, el que se publicó anteriormente gana.
Si un ladrón descifra con éxito el envío de un policía, la puntuación del ladrón aumenta en la distancia de edición de ese envío. Por ejemplo, un ladrón que descifra un envío con una distancia de edición de 3 y uno con una distancia de 5 gana 8 puntos. El ladrón con el puntaje más alto gana. En caso de empate, el ladrón que obtuvo el puntaje primero gana.
Tabla de clasificación
Una pequeña herramienta para calcular la distancia de Levenshtein
fuente
Respuestas:
Python 2, distancia = 8 [ agrietada ]
Finalmente conseguí este debajo del límite de char. No debería ser demasiado difícil, pero pensé que la idea era interesante.
Solución prevista:
La idea era usar eso
F(n+2) = 1 + (sum over F(k) from k = 1 to n)
, y el hecho de que los números consecutivos de Fibonacci son coprimos. Se1
suponía que el argumento in the reduce proporcionaba el+1
.¡Parece que Feersum encontró una línea de ataque diferente!
fuente
J, distancia = 5 [ Agrietado ]
Uso:
fuente
Ruby, distancia 6 [seguro]
Crear pares de fórmulas con distancias cortas de edición es divertido, pero parece que este enfoque podría ser más efectivo / molesto. Puede entender exactamente lo que hice, pero eso no significa que pueda revertirlo.
Solución:
Explicación:
fuente
e
ahí abajo cuando hacía fuerza bruta. Solución realmente disimulada. :)Python 2 - LD = 13 agrietado
Una agradable, fácil (espero que no sea demasiado fácil) para comenzar las cosas :)
Parece que fue demasiado fácil;) Me siento bastante tonto porque olvidé que podrías usar comentarios: /
fuente
Haskell, distancia = 13
Esto podría ser más legible, pero se
import
comió demasiados bytes, así que tuve que jugar un poco.fuente
Rubí, distancia 14 ( Agrietada )
fuente
CJam, distancia 10 (agrietada)
Solo ponte
n
STDIN. Pruébalo aquí.Como referencia, la solución original utilizaba lo raro
j
.Original:
fuente
J, distancia = 4 [seguro]
Solución:
Método:
fuente
Python 3, distancia = 14 [ agrietada ]
Tenía algunos caracteres adicionales, así que puse un poco de espacio en blanco para mayor claridad :)
fuente
JAGL Alpha 1.2 - Distancia = 16 [ Agrietado ]
No debería ser demasiado difícil, veremos qué pasa ...
fuente
TI-BASIC , distancia 38
>
representa laSTO→
clave y$
representa el símbolo de la raíz cuadrada.fuente
Python 2 - distancia = 12 [ Agrietado ]
Estoy un poco contento con cómo resultó esto.
Veamos cuánto tiempo lleva ... supongo que todavía estará resquebrajado.
Editar: código acortado un poco, sin efecto en la operación / distancia.
Solución prevista
Traté de no hacer comentarios o cambios en la nueva línea.
fuente
Python 3 - Distancia = 14 [ Agrietado ]
Veremos cuánto dura esto ...
fuente