A diferencia de muchos desafíos de C&R, esto no requiere una publicación de ladrones por separado; El objetivo de los ladrones es descifrar la respuesta anterior y luego publicar una nueva como policía.
Como respondedores, escribirás una serie de políglotas que se verán así (cada columna es un idioma y cada entrada es la salida de la respuesta en ese idioma):
Language: 1 2 3 4 5 6 7 8 ...
Answer 1: 0 1 2
Answer 2: 1 2 3
Answer 3: 2 3 4
Answer 4: 3 4 5
Answer 5: 4 5 6
Answer 6: 5 6 7
...
(los espacios en blanco significan que no se requiere comportamiento en ese caso).
Cada respuesta debe trabajar en 3 idiomas e imprimir 3 números consecutivos diferentes que son cada uno más de los números impresos por la respuesta anterior (impresa la primera respuesta 0
, 1
y 2
). Cada respuesta utiliza dos idiomas de la presentación anterior y un tercer idioma nuevo. El respondedor debe tratar de ofuscar lo que es este tercer idioma.
Para publicar una nueva respuesta, debes:
- Encuentra la respuesta más reciente al encontrar cuál es su tercer idioma.
- Preferiblemente, agregue una explicación para su crack y notifique al afiche la respuesta. Una vez que se haya descifrado su envío, también debe agregar una explicación.
- Escriba un políglota que consista en el segundo y tercer idioma de esta respuesta, junto con otro idioma de su elección. Revela tus dos primeros idiomas, pero no reveles el nuevo. El objetivo del próximo póster será encontrar este idioma (o cualquier otro idioma en el que funcione), por lo que debe intentar ofuscarlo.
Presupuesto
Los criterios para un lenguaje de programación válido son los mismos que los de The Programming Language Quiz, Mark II - Cops :
- Tiene un artículo de Wikipedia en inglés , un artículo de esolangs o un artículo de Rosetta Code en el momento en que se publicó este desafío, o está en ¡ Pruébelo en línea! . Tener un intérprete vinculado en cualquiera de estas páginas hace que ese intérprete sea completamente legal.
- Debe satisfacer nuestras reglas sobre lo que constituye un lenguaje de programación .
- Debe tener un intérprete gratuito (como en cerveza). Gratis aquí significa que cualquiera puede usar el programa sin tener que pagar para hacerlo.
Cada respuesta debe ejecutarse en menos de un minuto en una PC razonable.
- Usted puede volver a utilizar lenguajes de programación, pero debe haber al menos dos respuestas en el medio (por lo que una respuesta individual no puede volver a utilizar un lenguaje).
- Romper una presentación consiste en encontrar cualquier lenguaje de programación que imprima el resultado correcto, no solo el deseado. Si se ejecuta un envío en cualquier idioma que no se haya declarado o encontrado que funciona, no hay requisitos para hacer nada.
- No puede publicar dos veces (o más) seguidas.
Criterio ganador
La respuesta ganadora es la que tomó más tiempo en descifrar. El desafío nunca terminará, por lo que siempre es posible que la respuesta ganadora cambie.
fuente
Respuestas:
Hexagony, Klein (101) y ???
Esto se imprime
7
en Hexagony ,8
en Klein (101) y9
en ???.El
9
no funciona si se añade una nueva línea al final del código. Ten cuidado si estás probando localmente.Editar: Estar en vivo durante 20 horas ya es un récord, por lo que daré algunas pistas a partir de ahora. (También porque el idioma en cuestión es IMO aún no es muy conocido).
Consejos
9
No funciona si se agrega una nueva línea al final" es muy significativo, así como los dos primeros espacios (que Hexagony y Klein ignoran).v
comando finaliza el programa.Explicación ( publicación agrietada )
En el código fuente
Las instrucciones relevantes en Klein (101) son:
Klein es un lenguaje 2D fungelike donde cruzar el límite del área de código (que es un cuadrado) depende de la topología de Klein.
/
Y\
son espejos.La IP comienza en la esquina superior izquierda hacia la derecha. Se encuentra con un espejo hacia el límite superior y vuelve a entrar en el área del código en el lado derecho como se muestra arriba. Luego golpea el espejo nuevamente, se presiona 8 y luego (después de pasar por el límite varias veces) se detiene en
@
. Luego, el contenido de la pila se imprime en stdout, que es solo 8.fuente
Befunge-96, Hexagony and ???
Esto se imprime
6
en Befunge-96 ,7
en hexagonía y8
en ???.Explicación
El código de hexagonía, cuando está "prettificado" es:
El camino de ejecución comienza en la esquina superior izquierda en dirección Este. La fila superior no hace mucho.
-
cambia el borde de memoria actual para que el valor en él sea0
. La ejecución continúa hacia el este en la fila central, donde las7!
cargas7
en el borde de la memoria actual y las impresiones son como un número entero.[
cambia el puntero de instrucciones a North East a partir de7
. Después7+3
, la ejecución alcanza[
y cambia el puntero de instrucción a Noroeste comenzando en la esquina sureste. Finalmente la ruta es..@
donde@
termina el programa.fuente
Lua, cerebro, ???
Imprime 3 en Lua, 4 en brainfuck y 5 en ???.
Explicación de la publicación agrietada :
3--(-1)
es 2, por lo queprint(f)
imprime 2 (las otras cosas son innecesarias)--
nuevamente hay un comentario, por lo que3--(-1)
es solo 3, por lo queprint(f)
imprime 3 (otras cosas son innecesarias).
carácter de salida 52, que es 4.fuente
Gatillo , JavaScript y ???
Huellas dactilares
11
en Trigger ,12
en JavaScript y13
enREDACTED
.Dado que esto no se ha descifrado por más tiempo que cualquier otra respuesta hasta ahora, aquí hay algunos consejos:
Т
yе
en la primera línea son caracteres multibyte.[ //
y\\ ][ //
son no-ops.-²52
, es código muerto.²6
forma un bucle infinito.²
, junto con6
, forma un bucle infinito./!'!/
Explicación
Bueno, esto tomó algún tiempo para quebrarse. Veamos cómo se ve el código:
Esto significa que, si bien muchos emuladores disponibles se comportan correctamente, la implementación de las reglas está vinculada a la segunda oración de la página de Wikipedia . Por supuesto, no se puede ejecutar directamente en una PC promedio, pero he encontrado que el emulador Emma 02 vinculado en la página VIP de COSMAC funciona mejor.
fuente
Python 2, Python 3, ???
Esto imprime 1 en Python 2, 2 en Python 3 y 3 en ???.
Explicación de la grieta (publicación agrietada) :
0
: C: La primera línea define una macro similar a una funciónprint
que ignora su argumento único y se evalúa comomain(){puts("0");}
un programa completo que imprime0
y sale. Toda la expresión1+bool(1/2)
se ignora cuando laprint( )
macro en la segunda línea se expande amain(){puts("0");}
.1
: Python 2: la primera línea es un comentario.1/2
usa la división de enteros en Python 2, dando 0. Este valor se interpreta como un booleano (bool(0)
->False
) y luego se agrega a1
(1+False
->1
), y luego se imprime.2
: Python 3: la primera línea es un comentario.1/2
usa la división flotante en Python 3, dando 0.5. Este valor se interpreta como un booleano (bool(0.5)
->True
) y luego se agrega a1
(1+True
->2
), y luego se imprime.fuente
JavaScript , CHIP-8 y ???
12
en JavaScript ,13
en CHIP-8 y14
en ???Voy a arriesgarme y llamarlo agrietado, aunque no puedo hacer que funcione, estoy seguro del idioma (que parece ser lo que piden las reglas).
Aquí hay una explicación imperfecta de la publicación agrietada
El código en hexadecimal "es" (podría estar un poco apagado):
Se puede ir aquí , hacer clic en "Herramientas binarias" y pegar esto en el cuadro de matriz de bytes. Haga clic en "Descompilar".
Los elementos clave del código son: instrucciones para decir dónde está el "número", el
sprite
comando que imprime el número, la cantidad correcta de basura aquí y allá, y lo siguiente:Para ver lo que esto representa, puede hacer clic en "Editor de Sprite" y pegar estos hexadecimales en el cuadro debajo. Verás la respuesta:
Estoy bastante seguro de que puede poner lo que quiera al final y el resultado de CHIP-8 no cambiará, de ahí la nueva entrada.
Me encantaría que alguien pudiera hacer que esto funcione por completo, en lugar de la "prueba" de la respuesta que he dado aquí.
fuente
C, Python 2, ???
Esto se imprime
0
en C,1
en Python 2 y2
en ???.Esto será extremadamente fácil de descifrar para las personas que conocen Python, pero quería un punto de partida para otras respuestas. Las respuestas posteriores deberían tratar de ofuscar el tercer idioma (no hice esto).
fuente
Python 3, Lua, ???
Imprime 2 en Python 3, 3 en Lua y 4 en ???.
Explicación de la publicación agrietada :
fuente
> <>, Befunge-96 y ???
Imprime 5
><>
pulgadas , 6 pulgadasBefunge-96
y7
in ???.Sé que la solución prevista era Befunge-93, pero no pude resistirme.
Explicación:
Befunge-96 sigue el mismo camino que
><>
, pero ignora las instrucciones desconocidas, termina agregando uno al 5 y multiplicándolo por 9 para obtener 54, el código ascii para6
.fuente
Comentarista , Beatnik , ???
Salidas 15 en comentarista , 16 en Beatnik y 17 en el único idioma que se supone que debes encontrar.
Bien, es hora de pistas:
fuente
fn main()
, entre otras cosas), pero en realidad no se ejecuta en Rust (explicit lifetime required in the type of 's'
), ni en TIO ni en otro intérprete que encontré. Y no puedo encontrar ningún otro idioma que usefn
como identificador de función.Brainfuck,> <> y ???
Imprime
4
en Brainfuck,5
en> <> y6
en ???v
redirige el flujo del programa hacia abajo. Eln
se N salida Umeric.;
finaliza la ejecuciónfuente
Klein (101), Z80Golf, ???
Imprime
8
en Klein (101) ,9
en Z80Golf y10
en ??? .fuente
Beatnik , Rust , ???
Esto imprime 16 en Beatnik, 17 en Rust y 18 en ???.
El
�
carácter en la línea 4 debe reemplazarse con el carácter ASCII 18 (esto no se hizo en los enlaces TIO ya que no es relevante para ninguno de ellos).Explicación ( agrietada ):
El lenguaje de la respuesta anterior era Rust: específicamente, Rust compilado con mrustc . mrustc es un compilador experimental, y como está destinado principalmente a arrancar una versión válida de
rustc
, ignora la verificación de préstamos y la verificación de mutabilidad, permitiendo que el fragmento de @ NieDzejkob se compile sin errores.Este programa funcionará con el compilador Rust normal, por lo que no necesita instalar mrustc para probarlo.
Consejos
Dado que esta respuesta ha sido la más larga sin agrietarse, dejaré una pista y continuaré haciéndolo regularmente hasta que se agriete:
�
personaje es un arenque rojo y tiene muy poca importancia. La mayoría de los bytes se pueden sustituir en su lugar y el programa seguirá funcionando.fuente
@
,P
,{
, om
comienza un literal carácter y algo imprime después de su punto de código en decimal, pero eso no explica todos los++
s ...Z80Golf , Somme , ???
Esto imprime 9 en Z80Golf , 10 en Somme y 11 en ???.
Gracias a Bubbler por descifrar la publicación anterior como Somme, que toma la suma de la columna como las instrucciones. Las primeras tres columnas evalúan
Que empuja 10, lo imprime y sale.
fuente
Somme, Trigger and ???
This prints
10
in Somme,11
in Trigger, and12
in ???.Since the last two languages are easy to polyglot, I decided to mix that language in.
Explanation (cracked post)
Trigger sees the whole code as a series of tokens (tokenization is greedy):
A
)AAB
)AAA
)AAAA
)In the source code
the significant tokens are
((1
11+
111
111
, where the first two does nothing and the last two prints 1 each - thus 11.fuente
CHIP-8, Klein (100), ???
Outputs 13 in CHIP-8 (I assume), 14 in Klein, and 15 in ???.
Another Klein topology, tsk tsk. I've preserved the code before the
@
, since I don't know what will affect CHIP-8.Clues
I'm kinda overdue for these, sorry. I'll try and add one a day.
not
s and thesay
can be removed without affecting the programFor reference, the program without that stuff looks like this:
Try it online!
fuente
1
and a string that is the made up from first line and goes "this isn't a value" and discards them, the update will concat, even though I have an operator for that, but concat operates on characters and numbers as well as strings, where as+
treats them as numbers). But it was super spooky to be like "I wonder what...oh god, this could be left unmodified and be the next entry...if only I knew the ??? language..."Klein (100), Commentator, ???
Outputs 14 in Klein (100), 15 in Commentator, 16 in ???.
I'm seriously bad at obfuscating polyglots.
Explanation (Cracked post)
In Commentator, common comment tokens and spaces are the important commands, and any other characters are ignored.
<#
does XOR 1 on the current memory cell.%
is used to reset the current memory cell to zero.Wait, there are 16 spaces after
%
, what happened?It's actually a small bug (or feature?) in the interpreter.
/
is treated as the start of a 2-char command, so the space after it is consumed. But/<space>
is undefined command (thus a no-op), so the space is effectively skipped.fuente