El hilo de ladrones se puede encontrar aquí: The Mystery String Printer (Robbers)
Tu reto
- Escriba un programa, función o script REPL que imprima una cadena en STDOUT.
- Los ladrones intentarán crear un programa que imprima la misma cadena.
- Si pueden crear el programa con éxito dentro de los 7 días, su envío está agrietado.
- Si nadie puede crear un programa que imprima la misma cadena en 7 días, su envío es seguro. Puedes elegir revelar tu programa o dejarlo para desafiar a futuros ladrones. Sin embargo, si no lo revela, no puede obtener ningún punto de su envío (no ponga "seguro" en su encabezado de respuesta si elige hacer esto).
Restricciones
- El programa debe ser menor o igual a 128 bytes en total (más sobre esto más adelante).
- Si el programa depende del nombre del programa o del nombre / contenido de un archivo externo, debe decir que lo hace e incluirlo en su recuento total de bytes.
- La cadena impresa debe ser menor o igual a 2048 bytes.
- La cadena impresa debe constar solo de caracteres ASCII imprimibles (se pueden incluir nuevas líneas).
- El programa debe producir la misma salida cada vez que se ejecuta.
- No se permiten primitivas criptográficas incorporadas (incluye ningún rng, cifrado, descifrado y hash).
- El programa no debe tomar entrada.
- No hay lagunas estándar.
Puntuación
- Si un envío se agrieta antes de los siete días, el envío gana 0 puntos.
- Una presentación segura de ≤128 caracteres gana 1 punto.
- Una presentación segura de ≤64 caracteres gana 2 puntos. Si es menor o igual a 32 bytes, gana 4 puntos, y así sucesivamente.
- Cada envío seguro también gana una bonificación adicional de 3 puntos (independientemente de la duración).
- Hay una pequeña penalización (1/2 punto) por cada grieta después de la primera.
- Tenga en cuenta que la solución del ladrón debe estar en el mismo rango de duración del programa.
- Cada persona puede enviar un máximo de 1 programa por rango de bytes por idioma (diferentes versiones y sustituciones arbitrarias del mismo idioma no cuentan como idiomas separados). Ejemplo: puede publicar un programa pyth de 32 bytes y 64 bytes, pero no puede publicar un programa de 128 bytes en Java 7 y Java 8.
- La persona con el puntaje total más alto gana.
Envíos
Cada presentación debe tener la siguiente información:
- El nombre del idioma. Todas las soluciones de nuevos ladrones deben ser del mismo idioma.
- El rango del tamaño del programa (esta es la potencia más cercana de dos mayor que el tamaño del programa; por ejemplo, si su programa es de 25 bytes, esto sería "≤32").
- La cadena real que se imprimirá.
- Si un envío es seguro, ponga "seguro" y la longitud del programa (a la potencia más cercana de 2) en su encabezado. Si hay varios números en su encabezado, ponga la potencia de 2 al final.
Este fragmento de pila genera tablas de clasificación y enumera todas las presentaciones abiertas. Si hay algún problema con el fragmento, deje un comentario.
Use los siguientes formatos para las entradas:
Language, (any text with the program size as the last number)
=
o
Language
=
Length <= 16
Tenga en cuenta que el fragmento solo colocará la primera palabra en el encabezado como idioma si no detecta una coma.
Para envíos seguros, ponga seguro en su encabezado. El fragmento colocará automáticamente su programa en la columna "segura" si el tiempo ha expirado, por lo que esto es más para decirle a los ladrones que su programa es seguro.
Para envíos agrietados, ponga agrietado en su encabezado.
El programa también debería poder reconocer si un comentario dice "agrietado" y tiene un enlace; Sin embargo, esto no está garantizado.
Orden de desempate: Puntos -> # de envíos seguros -> Cantidad mínima de envíos agrietados.
Tenga en cuenta que el fragmento se clasifica por envíos abiertos antes de que se agrieten, pero los envíos abiertos no se contarán al final del concurso.
Este desafío ahora está cerrado.
Ganador general con más puntos: Dennis
Envíos más seguros: DLosc
(Tenga en cuenta que la cantidad de envíos seguros no se traduce en una cantidad de puntos, ya que el tamaño de los programas se considera al calcular la puntuación).
fuente
Respuestas:
Pyth, seguro, rango ≤ 8
El código:
Explicación:
fuente
]
?VBA, [Seguro]
Rango <= 128 bytes
Sugerencia de dónde salir
Salida 255 bytes
Solución
Código
Explicado
fuente
Mathematica, seguro, rango ≤ 64
Salida:
Fuente:
fuente
GenomeLookup
todo ...ngn APL (seguro)
Rango ≤ 8
Solución
Pruébalo en línea.
Cómo funciona
⍟⍣=42
aplica el logaritmo natural (⍟
) repetidamente a 42 hasta que se alcanza un punto fijo (⍣=
), produciendo 0.31813150520476413J1.3372357014306895 .El valor inicial realmente no importa aquí, siempre que no sea ni 1 ni 0 .
3○
aplica tangente a su argumento correcto, produciendo 0.07343765001657206J0.8920713530605129 .*
aplica la función exponencial natural a su argumento correcto, produciendo el resultado deseado.fuente
Pyth, agrietado por Sp3000
Rango ≤ 8
fuente
> <> (Seguro)
Probado en los intérpretes en línea y oficiales.
Rango: <= 16
Cuerda:
4621430504113348052246441337820019217490490
Esto es bonito 1337, ¿eh?
Explicación:
Aquí está el código fuente (15 bytes):
f
empuja 15 (nuestro contador) en la pila (esto se omite!
al final para no empujar más de un contador)1-
resta 1 del mostrador:0(?;
La cara fruncida prueba si el contador es menor que 0, el resto finaliza el programa si es::
Duplica el contador dos veces0g
Toma el carácter en el punto(c,0)
del código fuente dondec
está el contador*
Multiplica el segundo duplicado del contador por la representación ASCII del personaje previamente capturadon
Imprime el resultado.Entonces, dividido, la salida es
[462, 1430, 504, 1133, 480, 522, 464, 413, 378, 200, 192, 174, 90, 49, 0]
. Esto corresponde a la interpretación ASCII del código en reversa multiplicado por los números 14 a 0 (es decir[!*14, n*13, ... f*0]
).Probablemente la parte más difícil de resolver esto sería descubrir cómo dividir los números correctamente, pero si obtienes los correctos, solo es cuestión de probar cosas hasta que obtengas algo que funcione.
fuente
Muñeco de nieve 1.0.2
Rango ≤32.
La solucion es:
fuente
Matlab, ≤16. Agrietado por Wauzl
Rango ≤16 .
Esto también funciona en Octave .
La cadena impresa es la siguiente:
fuente
Perl (seguro)
Rango ≤ 32
Solución
Pruébalo en línea.
Cómo funciona
for-951..1048
ejecuta el comando anterior para cada número entero en este rango, guardándolo en la variable implícita.y/124589//
realiza la transliteración, eliminando los dígitos especificados de la variable implícita.y///
devolverá el número de eliminaciones, es decir, el número de ocurrencias de esos dígitos en la variable implícita.print 2**
imprime 2 al poder de las eliminaciones ( 1 , 2 , 4 u 8 ).fuente
Python, <= 16 ( descifrado por kennytm )
Esto se produjo a través de REPL (ejecutando un comando en Python shell).
Mientras estoy editando esto, también resumiré los comentarios para futuros ladrones libres de spoilers: esto no funciona en todas las pitones. Funciona en una compilación de Python 2.7 donde
sys.maxint = 9223372036854775807
.fuente
> <> , ≤ 8 [ agrietado ]
Eso es un total de 12
o
s. El programa se detiene sin error y funciona tanto con el intérprete oficial como con el intérprete en línea .fuente
TI-BASIC, ≤4 bytes, descifrado por Reto Koradi
Esto tardó 5 días 23 horas en agrietarse. Tan cerca...
Salida (10 bytes):
Programa:
Dado que es básicamente imposible que alguien adivine esto, mi objetivo al diseñar este programa era hacer de la fuerza bruta el único enfoque posible.
Para hacer esto, evité que la salida, o la salida con una de estas funciones inversas aplicadas, apareciera en el ISC. ISC no tiene una tangente hiperbólica, y pensé que ninguna herramienta similar tendría
tanh(7°
.Para agregar algo de seguridad contra la fuerza bruta, utilicé la conversión de grado a radianes, una característica ligeramente oscura, pero no fue suficiente.
fuente
sin(
1 byte en TI-BASIC. Entonces, algo asísin(sin(sin(e
sería solo 4 bytes.fPart(
.CJam, ≤ 8 [seguro]
No me gustan los números largos, así que aquí hay uno corto. Siéntase libre de tocar el violín fuera de línea y en línea .
Como considero que las presentaciones solo con números son bastante aburridas, poco a poco voy a poner algunas pistas para compensar.
Solución
El programa fue
0W#
es decir0^-1
, que en lugar de equivocarse daInfinity
.s
luego lanza esto a una cadena (nota que`
da en su1d0/
lugar).Para la otra mitad,
Wc
convierte -1 en un carácter, que se convierte en el punto de código 65535 debido a la envoltura de caracteres (consulte este consejo ).i
luego convierte el carácter nuevamente a un int, es decir, 65535.Finalmente,
b
convierte la cadenaInfinity
a la base 65535 para dar el número anterior.fuente
Javascript (consola), <= 32 ( descifrado por insertusernamehere )
Probado en consolas web Chrome y Firefox. Esa es una cadena de 43 caracteres.
Mi solución prevista era un poco más elaborada que la vinculada (¡maldito sea, ES6!).
Explicación:
fuente
Python, <= 32 ( agrietado por Egor Skriptunoff)
La salida es de 1832 bytes, incluidas las nuevas líneas:
fuente
CJam ( agrietado por Dennis)
Longitud <= 4
No le doy a este una posibilidad muy alta de supervivencia, pero de todos modos quería probar una solución de 4 bytes.
Mi código fue exactamente lo que Dennis realizó en ingeniería inversa:
CJam luego imprime todo el contenido de la pila, concatenado. Entonces la salida se
17
concatenó con19^20
.fuente
KK#
, probé algunos poderes más, y finalmente encontréJK#
.Lua, ≤ 4 ( agrietado por feersum)
Salida:
Necesita encontrar una cadena para Lua REPL que resulte en la constante "1 / M".
Es simple, pero no muy trivial.
fuente
=
antes de la expresión.0x2p-21
Pip , <= 16 (seguro)
Esta es mi presentación final de Pip, lo prometo. :)
Me sorprendería si alguien reduce esto a 16 bytes, me tomó varios intentos para que encajara. (¡Toma eso como un desafío si quieres!)
Responder:
Este código hace uso de las variables predefinidas
t
= 10 ys
= espacio.fuente
Ruby, roto por kennytm
Rango: ≤64.
(Y sí, toda la salida es STDOUT).
Solución prevista:
fuente
TI-BASIC ( descifrado por Thomas Kwa )
Variante TI-89
Rango: ≤8
Longitud de salida: 460
No creo que pueda usar RIES en esto, pero dudo que sobrevivirá 7 días de todos modos. Oh bien.
Código:
fuente
MATLAB, roto por Tom Carpenter
Rango <= 16
fuente
Mathematica, agrietado por Sp3000
Rango: <= 32
fuente
Jue - <= 64 Bytes, descifrado por el histocrat.
555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555555
Eso es 2016 5s; por cierto.
fuente
CJam, ≤8 (seguro)
Código original:
Es decir, para comenzar
3.141592653589793
y reemplazar cada carácter"3.141592653589793"
con el carácter correspondiente en"\"3.141592653589793\""
. Con los duplicados eliminados, en realidad se está reemplazando".123456789
con""35\.49831
.fuente
Python 2 (seguro 16)
Rango ≤ 16. En caso de que la versión importe (¿para precisión de impresión?), Estoy usando ideone .
No veo una forma de adivinar el código sin la búsqueda por computadora, pero todos ustedes me han impresionado antes.
Responder:
fuente
dir(complex)
para ver qué operaciones se definen para números complejos. No sabía que podías usar un módulo. Tenga en cuenta que esto probablemente no será útil, pero tal vez ...JavaScript ES6, ≤128 bytes - Agrietado
Salida (1124 bytes):
¡Diviértete y buena suerte!
Código original:
fuente
Still safe :3
TI-BASIC (descifrado por Thomas Kwa)
Rango: <= 2
Cuerda:
-10
Código:
Xmin
Simplemente no hay que engañar a este tipo ...
fuente
~9
(inversión de bits)AppleScript, ≤ 2 bytes agrietados
"Bruto forzado ... gruñido gruñido ..."
¿Qué es esto? ¿Una respuesta corta de AppleScript? : o
(sí, esto se imprime en stdout)
fuente
a=
oa-
1=
o1-
o? No tengo idea =)say"Cracked."
, y, si no le importa la gramática, un byte más consay"Cracked"
. c:> <> (Pez) , Agrietado por Sp3000
Longitud <= 8
La salida es de 23
>
y el programa no produce ningún error.fuente
GolfScript (seguro)
Rango ≤ 8
Solución
Pruébalo en línea.
Cómo funciona
{9?7*}
empuja ese bloque en la pila..%
duplica el bloque y lo mapea ... sobre sí mismo.GolfScript realiza la conversión de tipos como si no hubiera un mañana. En este caso, el intérprete espera un iterable, por lo que el bloque original se convierte en matriz, produciendo la siguiente matriz de códigos de caracteres: [57 63 55 42] .
El bloque en sí eleva cada código de caracteres al noveno poder (
9?
), luego multiplica el resultado por siete (7*
).Para los cuatro códigos de caracteres en la matriz, esto empuja
Antes de salir, el intérprete imprime los cuatro enteros, sin separadores.
fuente