La tarea de los policías es escribir una función o programa que, cuando recibe una entrada de sí mismo, emite una cadena determinista finita. Si el programa recibe una entrada diferente, debería devolver una salida diferente.
Reglas:
- Las presentaciones consisten en
- Nombre del lenguaje
- Si se utilizan banderas, deben revelarse.
- Cuenta de bytes del programa
- Recuento de bytes de salida
- Salida
- Si es particularmente largo, proporcione un pastebin o algo similar
- Si contiene elementos no imprimibles, proporcione un volcado hexagonal.
- Las nuevas líneas y espacios en blanco finales deben incluirse en la salida
- De dónde proviene la entrada (STDIN, línea de comando, etc. )
- Nombre del lenguaje
- Si corresponde, puede suponer que el byte que representa EOF no está presente en la entrada, a menos que use ese byte en su programa.
- Si su programa está descifrado, agregue un enlace a la respuesta correspondiente en el hilo del ladrón en su título.
- Su programa no es seguro hasta que haya pasado una semana y usted lo marque así.
- Desapruebo técnicas como la siembra aleatoria con la entrada o las funciones hash criptográficas. No puedo detenerlos, pero no aceptaré una solución que utilice ninguno de estos . También tenga en cuenta que algunas de estas técnicas pueden tener colisiones, donde una cadena diferente produce la misma salida.
- Su objetivo es tener el menor rendimiento. ¡La solución segura más corta publicada dentro de las tres semanas posteriores a la publicación de esta pregunta gana!
La tarea del ladrón es encontrar un programa de tamaño igual o menor que el original, que también obedece las reglas anteriores.
Si un ladrón descifra su programa con una solución diferente a la prevista, entonces tiene la oportunidad de "descifrarlo" demostrando que la solución del ladrón es incorrecta. Puede hacer esto buscando una entrada al programa del ladrón que produzca la misma salida.
Presentación de ejemplo:
brainfuck, 10 bytes, Puntuación: 10
]<.[<],>[,
Esta solución es , [>,] <[. <] Que simplemente invierte la entrada
¡Buena suerte!
code-challenge
cops-and-robbers
Jo King
fuente
fuente
1
por sí mismo y de0
otro modo1021111143210532105110321051101121171164041581121141051101164011111410040105414410111010061393941
otras cadenas.Respuestas:
7 , 31 caracteres, puntaje 30, seguro pero posiblemente roto?
Un programa 7 normalmente es solo un número, pero puede contener espacios en blanco, dividiéndolo en múltiples números. Por lo tanto, esta presentación consta de dos números (que están implícitamente concatenados por el intérprete 7), y el programa también toma dos números como entrada, a través de la entrada estándar. (Los "31 caracteres" en el encabezado son la longitud total de los dos números, más un carácter de espacio en blanco de separación; los dígitos que componen los números se interpretan como octales cuando se usan como programa, pero decimales cuando se usan como entrada, y son los dígitos iguales en los dos casos, no los números reales. Tenga en cuenta que es irrelevante cuando se trata como un programa o cuando se trata como una entrada, ya sea que los separe con un espacio o una nueva línea; espero que eso no No invalidar la presentación.)
La salida esperada es el siguiente número (expresado aquí en decimal, ya que ese es el formato de salida que usa el intérprete 7):
Tenga en cuenta que el intérprete 7 vinculado desde la wiki de Esolang almacena internamente números en unario, lo que significa que es poco probable que tenga suficiente memoria para ejecutar el programa en sí mismo para ver lo que hace. Verifiqué el programa calculando su comportamiento manualmente y probándolo en pequeñas entradas para verificar que hizo lo que esperaba que hiciera. Un enfoque alternativo sería escribir un intérprete que use un método más eficiente para almacenar números.
Evitar grietas aquí fue algo doloroso, pero finalmente estoy satisfecho de que no haya dos números distintos a los del programa en sí mismos que sean capaces de producir 238363505302130098723162537059 como salida. ( EDITAR 1 semana después: es posible que me haya equivocado, dependiendo de cómo interprete la pregunta; ver más abajo ) .
Solución
El programa original fue:
Se pretendía que ninguna otra entrada daría el resultado deseado porque:
Sin embargo, dependiendo de cómo interprete la pregunta, puede haber una segunda entrada que produzca la salida deseada (invalidando así esta solución):
Explicación
Así es como funciona la solución deseada:
fuente
Node.js v10.9.0 , 40 bytes, Puntuación: 40, Agrietado
Entrada
Esta es una función que toma exactamente un parámetro.
Salida
fuente
o=>[...j=o,].sort(n=>(j+=113)&69).join``
, peroj
no puedo ir al número enteroUn peral , 46 bytes de ASCII, puntaje 0, agrietado
La entrada se toma de la entrada estándar. La salida esperada (en la salida estándar) es una cadena vacía (es decir, cuando el programa se entrega como argumento, no se debe imprimir ninguna salida).
En otras palabras, el desafío aquí es escribir un programa A Pear Tree que no muestre nada en la salida estándar cuando se da a sí mismo en la entrada estándar, y que sí arroja algo en la salida estándar cuando se le da algo diferente a sí mismo en la entrada estándar, sin usar más de 46 bytes. (Me las arreglé para hacer esto mientras mantenía el programa en ASCII imprimible, a pesar de que A Pear Tree usa con frecuencia caracteres no ASCII y no imprimibles). Esta es efectivamente la tarea de escribir un programa autoidentificable , con un formato de salida específico (es decir, cadena nula cuando la autoidentificación tiene éxito); sin embargo, A Pear Tree tiene al menos dos giros que hacen que la tarea sea un poco más difícil de lo que parece cuando se hace en este lenguaje específico (por eso lo elegí para mi envío de policía).
Mi solución
Mi solución es un poco diferente del crack:
Pruébalo en línea!
En lugar de usar
exit
, establezco$_
(salida implícita) y$\
(nueva línea después de la salida, incluida la salida implícita) en la cadena nula si hay una coincidencia (y1
si no hay una coincidencia). Unaprint
sigue siendo necesaria porque la producción implícita sólo se activa si hay al menos un byte de entrada (por lo tanto, tenemos que imprimir de forma explícita si algo se nos da una cadena vacía como entrada, que es distinto del programa).Todos los programas de A Pear Tree deben contener una suma de comprobación en alguna parte (esa es la
MZpa
solución). Tanto mi solución como el crack seleccionan nombres de variables (y varían otros detalles menores del código) para hacer que la suma de verificación consista completamente en letras ASCII.fuente
Perl 5
-p0777
, 10 bytes, puntaje 10, seguroEl último carácter aquí es "desplazamiento", código de carácter 14 (decimal) / 0E (hexadecimal). Todos los demás son ASCII imprimibles.
Debido a que estamos usando el argumento de E / S implícito de Perl
-p0777
, la entrada proviene de la entrada estándar y la salida va a la salida estándar.Solución
El programa hace lo siguiente:
lo que significa que el programa en sí, la única entrada que produce la salida deseada, es:
Pruébalo en línea!
Explicación
fuente
Python 3, 50 bytes descifrados
Entrada y salida de / a stdin / -out. La salida es diferente para cada entrada diferente. Salida única cuando se le da el código fuente:
(Eso es 150 dígitos)
¡Buena suerte!
fuente
05AB1E , 35 bytes, Puntuación: 7
Entrada:
desde
stdin
Salida:
QÕ Ƿe
fuente
Cubix , 18 bytes, puntaje 18, seguro
Es una pena que este desafío no haya recibido más atención, pero a veces es así. Iba a dejar esto inseguro, pero decidí publicar la solución antes de olvidarlo.
Esto debería ser bastante fácil de descifrar.
Entrada de
stdin
Salida
Editar: Debo mencionar que esto espera la fuente en su forma abreviada ... y ahora me he dado cuenta de que falta un byte (no imprimible) del resultado que rompí cuando publiqué. Debería copiar ahora. Los valores hexadecimales son
24 60 2a 13 32 61 4a 50 4a 23 37 34 28 6f 29 3b 38 39
El concepto era eliminar imprimir el primer carácter y luego eliminar el índice inverso del carácter, por ejemplo, [caracteres] - [0, len ([caracteres]) .. 2]
El código es
que se asigna al siguiente cubo
Pruébalo aquí
fuente
Jalea , 14 bytes, Puntuación: 21, Seguro
Tanto el programa como el tamaño de salida se cuentan utilizando la página de códigos Jelly.
Entrada
Primer argumento de línea de comando.
Salida
Solución
Pruébalo en línea!
fuente
v⁼
rendirá1
si la entrada evaluada como código Jelly con una entrada de la entrada es igual a la entrada y producirá un0
error (si la entrada es un código Jelly no válido) si no.JavaScript Firefox, <10 bytes, Puntuación: 52, de entrada de argumento de función, Agrietado
btoa(btoa)
codifica la siguiente cadena:lo que da:
acabo de copiar
fuente
GCC 61-> 61 bytes
Programa completo, tome la entrada de stdin y la salida a stdout
fuente
50
?Perl 6, 43 bytes, Puntuación: 15, de stdin
fuente
Pepe , 23 bytes, puntuación: 23, descifrado por MickyT
Entrada:
estándar
Salida:
fuente
J , 26 bytes, Puntuación: 52, Seguro
El programa no es un REPL, sino un script completo que acepta
stdin
e imprime explícitamentestdout
.Entrada
Entrada estándar
Salida
No, no es un método de cifrado.
Solución
Pruébalo en línea!
fuente
Barril , 6 bytes, Puntuación: 6
Entrada
De
stdin
, usando?
Salida
Tenga en cuenta que esas son secuencias de escape para bytes no imprimibles. Reemplace los escapes con los caracteres literales. Texto sin procesar disponible aquí
Buena suerte con este! ¡Nos vemos la próxima semana!
fuente
Perl 6, 31 bytes, Puntuación: 39, de stdin - Agrietado
Agrietado aquí
Solución cruda. Podría sobrevivir.
fuente