Descifrar el código fuente


142

Nota : Este desafío ahora está cerrado a los nuevos envíos de policías. Esto es para garantizar que nadie pueda publicar envíos que solo permanecen sin descifrar porque ya no hay suficientes ladrones interesados ​​en el desafío.

En este juego de policías y ladrones, cada policía escribirá un programa simple para dar un solo resultado. Luego harán públicos cuatro cosas sobre su programa:

  1. El idioma
  2. La duración del programa
  3. La salida deseada
  4. Una versión codificada del código fuente

Luego, los ladrones deben descifrar el código fuente para que su programa funcione como el original.


Reglas de policía

Debes escribir un programa simple, que los ladrones intentarán recrear.

Su programa original debe tener una funcionalidad simple: al ejecutarse, genera una sola cadena / número y se detiene. Debe dar el mismo resultado independientemente de cuándo / dónde se ejecute, y no debe depender de bibliotecas adicionales o de Internet.

Su programa y salida deben usar ASCII imprimible (se permiten nuevas líneas y espacios). La salida no debe tener más de 100 caracteres y el programa debe tardar menos de aproximadamente 5 segundos en ejecutarse en una máquina razonable. Tampoco se le permite usar hashing (u otras funciones criptográficas) en su programa

Luego, proporciona una versión codificada del código fuente y la salida requerida. Puede codificar su código fuente como quiera, siempre que se conserven los caracteres.

Su puntaje es el programa más corto que ha enviado y que no ha sido descifrado. Después de un período de una semana, una presentación no fisurada se volverá inmune. Para reclamar esta inmunidad, debe editar su respuesta para mostrar la respuesta correcta. (Aclaración: hasta que reveles la respuesta, no eres inmune y aún puedes ser descifrado). El puntaje más bajo gana.

Ejemplo simple de respuestas de policías

Perl, 20

ellir"lnto Wo d";prH

Hello World

O...

Perl, 15

*3i)xp3rn3*x3t(

272727

Reglas de ladrones

Los ladrones publicarán sus intentos de craqueo como respuestas en un hilo separado, ubicado aquí .

Tienes un intento de descifrar cada envío. Su intento de descifrado será una versión descifrada del código fuente. Si su conjetura coincide con la descripción (los mismos caracteres, salida y, por supuesto, idioma), y usted es la primera conjetura correcta, entonces gana un punto. Es importante tener en cuenta que su programa no tiene que coincidir exactamente con el original, simplemente use los mismos caracteres y tenga la misma funcionalidad. Esto significa que podría haber más de una respuesta correcta.

El ladrón con más puntos (grietas exitosas) gana.

Ejemplo simple de respuestas de ladrones

Tu programa fue print "Hello World";. (Aunque print"Hello World" ;también podría haber funcionado).

Tu programa fue print(3**3x3)x3

Envíos seguros

  1. ASP / ASP.Net, 14 (Jamie Barker)
  2. Befunge-98, 15 (FireFly)
  3. GolfScript, 16 (Peter Taylor)
  4. CJam, 19 (DLosc)
  5. GolfScript, 20 (usuario23013)
  6. Perl, 21 (primo)
  7. Python, 23 (mbomb007)
  8. Ruby, 27 (histocrat)
  9. SAS, 28 (ConMan)
  10. Ruby, 29 (histocrat)
  11. Python, 30 (mbomb007)
  12. JavaScript, 31 (hsl)
  13. Ruby, 33 (histocrat)
  14. Marbelous, 37 (es1024)
  15. Ruby, 43 (histocrat)
  16. PHP, 44 (kenorb)
  17. Ruby, 45 (histocrat)
  18. Marbelous, 45 (es1024)
  19. Python 2, 45 (Emil)
  20. PHP, 46 (Ismael Miguel)
  21. Haskell, 48 (nooodl)
  22. Python, 51 (DLosc)
  23. Python, 60 (Sp3000)
  24. Pitón 2, 62 (pez lodoso)
  25. JavaScript, 68 (Jamie Barker)
  26. Mathematica, 73 (Arcinde)
  27. Haskell, 77 (orgulloso Haskeller)
  28. Python, 90 (DLosc)
  29. C ++, 104 (usuario23013)
  30. ECMAScript 6, 116 (Mateon1)
  31. C ++ 11, 121 (es1024)
  32. Grass, 134 (usuario23013)
  33. PowerShell, 182 (christopherw)

Envíos sin resolver

En orden de tiempo de publicación. Esta lista es cortesía de muchos usuarios.

Una pequeña herramienta para verificar soluciones, cortesía de n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳


44
@xnor Sí, eso es lo que significa.
PhiNotPi

3
Es posible que desee prohibir el hash ... codegolf.stackexchange.com/questions/40304/…
NinjaBearMonkey

77
Probablemente debería especificar que el ganador debe publicar el código fuente original después de una semana. ¿Qué me impide publicar galimatías y afirmar que ninguno de los ladrones obtuvo la respuesta correcta?
user2023861

6262
Pensé "¡Oh, solo escribiré un programa malbolge, lo revuelvo y gano esta cosa!". Pero luego, traté de escribir un programa malbolge.
rodolphito

8
Advertencia: Policías, no utilicen Ideone para probar sus envíos, ya que almacena sus programas y otras personas pueden verlos.
rodolphito

Respuestas:


65

Python 3, tamaño 74 ( agrietado )

Python simplemente no era lo mismo después de ser reeducado por Big Brother.

Entrada:

print(war is peace)
print(freedom is slavery)
print(ignorance is strength)

Hay dos líneas nuevas al final de las líneas 1 y 2.

Salida:

True
True
True

Tenga en cuenta que cada uno Trueestá en su propia línea.


1
¿Qué hay detrás de la puerta 101?
FryAmTheEggman

55
Originalmente tenía 2+2==5una cuarta declaración hasta que descubrí que lo =hacía demasiado fácil.
xnor

55
Bonita referencia de 1984.
Justin

2
Agrietada . Eso fue excelente.
Sp3000

52

Python 3, tamaño 12 ( agrietado )

print (abcd)

Mi programa no produce resultados ni errores.


44
Agrietada . Agradable, la solución es muy contra-intuitiva.
matsjoyce

2
Muy bien, estuve yendo intpor un tiempo.
Fox Wilson el

@matsjoyce Bien hecho. Esa fue mi solución prevista.
xnor

1
@matsjoyce Sí, esperaba que alguien hiciera esto eventualmente. Aún así, animo a todos a no mimarse y tratar de resolverlo a mano. Te aseguro que es una linda solución.
xnor

Creo que lo tengo. La solución que encontré no funciona si primero escribo pythony luego escribo mi solución en el indicador. Pero funciona, si pongo mi solución en un archivo y escribo python file.
kasperd el


26

Python 2, talla 50

Agrietado

Ya sabemos la respuesta a la pregunta, pero ¿cuál es la pregunta?

Código

print *********************--///222222222222222222

Tenga en cuenta que no hay espacios finales ni líneas nuevas. El único carácter de espacio en blanco es el espacio único posterior print.

Salida

42

Intenté equilibrar la longitud y la dificultad del código, pero no me sorprendería si me lo perdiera un poco de cualquier manera. Esperemos que sea suficiente para desalentar la fuerza bruta, al menos.



66
Esto hubiera sido mejor con el tamaño 42.
un CVn

23

Pyth - 71 agrietado

Código

C-3P0: "Sir, the possibility,..."* 
Han Solo: "Never Tell Me The Odds!"

Salida

3720

* Originalmente, George Lucas hizo que Han interrumpiera C3-PO. **

** Llamó a esto su mejor idea desde Jar-Jar.


Nota interesante: a pesar de todos los cambios que Pyth ha experimentado, ¡todavía hay una respuesta válida aquí!


Original

ts,*s,y30 l" : : i i Han Solo "eP-C"h"TsrhT

Explicación

Los caracteres restantes van a la siguiente línea. Pyth solo interpreta la primera línea de un archivo.

ts,hacer una tupla de 2 y obtener su suma -1.
*multiplicar:
s,y30 l"..."suma la tupla de 2 que contiene 2 * 30 y la longitud de la cadena (18).
eP-C"h"Tobtenga el factor primo más grande del valor ascii de h menos 10 (47).
srhTObtenga la suma de los números del 0-10.

Con todo, esto básicamente solo calcula: (30 * 2 + 18) * (47) + 55-1. Después de leer la respuesta de @ isaacg, noté que hay una solución extremadamente simple: *h30tC"y"31 * 120.

Actualizado

*h30tC"y" "-P:Sir, e possibilit,...
Han Solo: Never Tell Me The Odds!"
Todavía funciona incluso después de todo este tiempo ...

Perdón por el formato de explicación deficiente, no sé cómo usar bloques de spoiler: S (aunque @ Sp3000 lo hizo un poco más agradable para usted)

¡Ahora puedes ejecutar Pyth en línea! Pruébalo aquí Gracias @isaacg :)


99
Lo anterior puede contener información inventada abiertamente sobre la creación de Star-Wars.
FryAmTheEggman


@FryAmTheEggman Puede usar etiquetas en bloques, por ejemplo<br>
Sp3000

21

CJam, talla 51 [SEGURO]

Código

main(int argc,char* argv){printf("Hello, World!");}

Salida

55
2292213229222231957511222223333751125537511222222135723331131931959319319

Puedes jugar con él en el intérprete en línea .

Esto debería ser más agrietado de lo que parece.

Insinuación

Comience con la segunda línea de la salida. Unos pocos dígitos no aparecen en todo, y otros sospechosamente a menudo. ¿Por qué podría ser eso? Si puede descifrar eso, el resto casi debería caer en su lugar.

Solución

"that rrrrraging london Hail!v"{elccimf(;W))},(*,pa

El clima debe haber sido bastante malo cuando se me ocurrió ese anagrama ...

Se suponía que la pista apuntaba hacia el hecho de que la segunda línea está compuesta de factorizaciones primarias aplastadas. Esperaba que a partir de ahí sería posible determinar cuántos y qué caracteres van a la cadena, dejando solo unos pocos caracteres al final.


99
Espera, ¿esto está revuelto?
TheDoctor

18

Befunge-98, talla 15 [SEGURO]

Código

"quick"
*+.@\_j

Salida

3314

Original

"u_ji@q.+k*c
"
Una característica curiosa pero algo conocida de Befunge es que puedes terminar una cadena con la misma cita que la inicia, lo que en esencia empuja toda esa línea (excepto la cita) en la pila. Como truco adicional, reutilizo la misma cadena nuevamente , haciendo uso de upara invertir el puntero de instrucción. Entonces es solo algo de aritmética: la idea central es resumir todos esos valores (lo que se hace kpara repetir la +operación).


¿En qué intérpretes lo has probado y, en particular, qué suposiciones hacen sobre el ancho de bits de la celda?
Peter Taylor

@PeterTaylor Lo he probado en cfunge bajo x86_64 linux. Algunas pruebas parecen indicar que usa enteros con signo de 64 bits, aunque puedo decir que mi solución no depende de la semántica de desbordamiento, por lo que no estoy seguro de si es importante.
FireFly

Ok, entonces no debería estar buscando desbordamientos de 8 bits. Es una pena, eso podría haberlo simplificado;)
Peter Taylor

Ugh Hice programas para imprimir 3312, 3300y varios otros cerca 3314. Tan cerca ...
Justin

@Quincunx excelente ...: P
FireFly

16

GolfScript (16 bytes) [SEGURO]

%%()*../1129n{}~

Rendimiento esperado:

-117345085515973157874551915956356303213327583847247840186528288852476459638212404362749

Fuente original:

n)~{.*911%(}./2%


¿Esta salida esperada excluye la nueva línea final o la nueva línea simplemente no se generará?
ProgramFOX

@ProgramFOX, la salida terminará en una nueva línea. Las únicas maneras que sé de evitar eso requerirían :.
Peter Taylor


13

Python, 69 caracteres [ agrietado por grc ]

Revuelto:

((((((((((((())))))))))))),,,,accdddiiiiillmmnopprrrrrssssssttttttttu

Salida:

1083

Esto es simplemente un poco inofensivo de diversión :) Probado en CPython 2.7.8, 3.3.2 y por el gusto de hacerlo PyPy3 2.3.1.


Explicación

Utiliza funciones integradas str, dict, listpara construir una cadena y luego se aplica mapcon ordconvertir la cadena a una lista de enteros, que están a continuación, summed.




11

Python 3, 70 caracteres

Revuelto:

""(((())))****++++222222222;;;;;=======cccccccccceeeiinnpprrttxxxxxxxx

Salida (99 caracteres de largo):

388626024960000000000026872002432000000000000676169243200000000000007317718780000000000000028820330

Actualizar

Ha pasado una semana, así que en lugar de publicar la respuesta, aquí hay una pista:

Intenta sacar la raíz cuadrada del número y trabajar desde allí



9

JavaScript, 94 Agrietado por FireFly

alert(' '' '''((()))+++,,,,,,,,,,,,,000111111114444577888;;;;;======[[[]]]aaafhinorrrrvvvxx||)

Salida

fun in the sun

Original

a=alert;v='';r=[1,7,8,14,11,8,14,10,0,5,14,4,7,8];for(x in r)v+=('h'+(1==0)+a)[r[x]]||'';a(v);


Tengo la sensación de que esto no funcionará en todos los navegadores / motores. ¿En qué entorno probaste esto?
Martin Ender


Ah ... y estaba convencido de que lo había hecho alertprimero, ya que los índices coincidían muy bien con los caracteres necesarios. Interesante coincidencia.
FireFly

De hecho, también lo tuve primero cuando comencé a trabajar en él, pero lo cambié para reducir las diferencias del navegador.
SLuck49

No funciona en Chrome. Tengo la última versión. DiceSyntax Error: Unexpected String
Oliver Ni

8

Ruby, 38 - descifrado por Martin Büttner

print(succ(downcase!))$$$..[[]]6e0<><_

Salida:

u

Original:

$6.pincdwnca[]rescue$><<$!.to_s[((0))]



1
@ MartinBüttner Heh, de ninguna manera cerca del original. Pero su solución es posiblemente aún más aterradora que la original. ;)
Pomo de la puerta

1
Hola, hay un pez
TheDoctor

Así que printy downcase!fueron arenques rojos. Esperaba usar la respuesta puts, no pensé en eso $><<.
kernigh

7

Python 3, tamaño 16 ( agrietado )

Código:

help tim__rolo__

Salida (con nueva línea al final):

Hello world!


1
@ MartinBüttner Sabía que alguien había visto el huevo de Pascua ...
matsjoyce

1
No lo había hecho, pero rápidamente lo busqué en Google. ;) Para ser honesto, si no hubiera tenido tanta prisa, probablemente podría haber visto que los caracteres restantes helloeran un anagrama de import. ^^
Martin Ender

7

Perl - 47 ( agrietado por grc )

Código (también hay un espacio allí)

 """"$$$$$$((()))**....///;;[[]]~==01finoprrstx

Salida:

012345012345012345012345012345

Puede ejecutarlo en línea aquí y funciona bajo stricty warnings.



@grc ¡Diría que es válido! ¡Buen trabajo! Imprime lo correcto. Si desea algunas sugerencias sobre la versión que se ejecuta stricty warningshágamelo saber.
hmatt1

7

Ruby, 33 - descifrado por user23013

enpsttux [[[]]]++\-\**????$$$$...

Salida:

[*]

Original:

puts ?[+[*?*..?]][$$-$$]+?\\.next


¿Qué versión es esta?
Lynn

@nooodl Tengo 1.9.3, pero no hay nada específico de versión sobre este.
Pomo de la puerta

Esto es dificil. Esto es lo que tengo hasta ahora: puts obviamente será lo primero, .nexthay otra palabra clave que se puede usar, y el resto es una especie de hechicería con $variables rubí y creación de matriz de caracteres ... +1
rodolphito


@ user23013 ¡Bien! No es el original, sin embargo; Probablemente debería tener caracteres de salida que no estaban realmente en la fuente;)
Pomo de la puerta

7

Python2, 132 caracteres

____        ,,,,:::''""""""""""((()))[[]]\\\0126aaaabcccceeeeeeeeeEffggiiiiiilllllmmmmnnnnnnooooopppppqqrrrrrrrrrssssStttttttuuvxxyy

Salida (con una nueva línea):

chance

Versión actualizada, 96 caracteres.

La respuesta a la versión original sugirió el en execlugar de compile+ eval, así que aquí hay una versión simplificada:

____       :::''""(())[[]]\\\0126aaabcccceeeeeeeeEffiimmnnnnooopppqqrrrrrrrrrssStttttttuuxxxxyy

Actualización: agrietada

Completamente agrietado por Alex Van Liew y KennyTM . Las soluciones originales fueron (desplácese hacia la derecha para revelar el spoiler):

                                                                                                                                eval(compile('try: compile("from __future__ import braces","","single")\nexcept SyntaxError as q:\n\tprint q[0][6:12]',"","single"))
                                                                                                                                exec('try:exec("from __future__ import braces")\nexcept SyntaxError as q:\n\tprint q[0][6:12]')
                                                                                                                                The hint meant "Consider {}, which are not present in the source code".

¿Cuántas líneas nuevas hay?
Sp3000

Ninguno (sin contar líneas nuevas lógicas como \ncadenas literales internas). Con las nuevas líneas, el código podría ser más corto.
Vi.

2
1 por no dar suficientes xs y cs para mí hacer lo que quiero hacer: P
SP3000

1
¿Debo pensar alguna pista? Vamos a empezar con una vaga uno: Don't count ones which exist. Count ones which do not exist.
Vi.


7

Ruby, 29 [seguro]

Tratando de ver cuán corto puedo llegar a Ruby sin que me quiebren.

Código

paper view
otool
$()**,.8<<=>

Salida

[0][0, 3][0, 3, 6][0, 3, 6, 9][0, 3, 6, 9, 12][0, 3, 6, 9, 12, 16][0, 3, 6, 9, 12, 16, 20]

Original

eval <<p*8 o=*o,$>.write(o) p

Explicación

La primera línea crea un heredoc que comienza en la siguiente línea y está delimitado por el final , en los caracteres codificados, que no funcionará porque necesita el bytecount.p , luego concatena la cadena resultante a sí misma 8 veces. Como termina en una nueva línea, esto crea efectivamente un bucle. El código en bucle asigna una matriz a la variable o, que consta de los elementos en o.to_a(a través de la *abreviatura), seguido de la salida de $<.write(o), que se convierte oen una cadena, lo imprime en STDOUT y devuelve el número de bytes impresos. Una variable a la que se le asigna por primera vez tiene nilel propósito de evaluar el lado derecho, por lo tanto, en la primera ejecución*oestá vacío y la escritura no genera nada y devuelve 0. Cada ronda posterior genera la matriz de bytes producidos en rondas anteriores. El uso de un heredoc delimitado por p crea métodos de señuelo para la salida py$><<


6

PHP, tamaño 49 [ Agrietado por Martin Büttner ]

Código

sub(print2w, $+expect+$+one+$+str+$+in=$@~main$);

Salida

{main}

¿Te importaría revelar con qué versión de PHP has probado esto?
Martin Ender

@ MartinBüttner No especificaré el rango exacto, pero todo, desde 5.3.0 en adelante, tendrá el resultado correcto.
bwoebi el

3
Agrietado. Solo tomó como ... 4 horas ...
Martin Ender

@ MartinBüttner wow, ¡felicidades! No esperaba que no te rindas. :-)
bwoebi



6

Haskell, 100 caracteres (no válido, salida demasiado larga)

Código

//Sup
tl=[]
while(syn==(+j)) tl+=b.a();
//(: #jquery :)\\
$("#jquery").on("click", j=>alert(j==m))

Salida:

"\er\\e\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"\\\\\\\\\\\\"\\\\\\\\\\\\\"\\\\\\\


Original

(#)=(>);(//)=(++)
l=j.show
main=putStr.l.l$l"eer"
j[]="\\"
j(y:u)=let(q,c)=break(#y)u in y:j c//j q

55
Por un momento pensé que estaba leyendo la pregunta "Evolución de Hello World" .
Vi.

1
@ Vi, sí, pero creo que la distancia de Levenshtein es un poco más de 7 en esta publicación.
Zaq

1
La producción es más larga que 100 caracteres
Lynn

1
@Zaq: la limitación de tamaño no está en el tamaño del código, ¡está en la salida!
Lynn

1
Huh Y supuse que hiciste algo con fix show. Definitivamente indescifrable
orgulloso Haskeller el

6

J, 22 bytes

Código

!%()1348:::bbceehorvxx

Salida (97 caracteres)

1226317306651180983274420265228191056569220222873505571155987454033425908908110103433163350999040

Espero que esto sea prácticamente imposible ...


6

CJam, 32 bytes ( agrietado )

Fuente revuelta

"Beware the Jabberwock, my son!"

Salida

4074552392882954617076720538102062920

2
Hm, ¿de dónde sacaste la idea de usar una cotización como código CJam codificado? ;)
Martin Ender


@ MartinBüttner: Esa es una línea de un poema, no una cita de una película. ¡Completamente diferente!
Dennis

@ Dennis Espera, la mía tampoco fue de una película. (No exactamente de un poema , sin embargo.: D)
Martin Ender


5

TinyMUSH 3.1 , 20

Revuelto:

(#ret,#3!#+#2i\2#,@)

Salida:

3210

66
¿Cómo se supone que debemos ejecutar esto? ¿Dónde está la referencia del idioma? (El enlace no ayuda aquí).
n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀ĥ̷̳

3
@ n̴̖̋h̷͉̃a̷̭̿h̸̡̅ẗ̵̨́d̷̰̀h Puede ejecutar este código conectándose a un MUSH que ejecute la versión TinyMUSH adecuada. Explore aquí para encontrar uno donde el Tipo de servidor sea "MUSH", o descargue la fuente del servidor desde aquí y ejecute MUSH usted mismo.
Muqo

5

Python 3, longitud 110 [ agrietada por grc ]

Revuelto ( \ndenota una nueva línea)

\n\n\n   ""((((())))),.......9::;===IOS[]__addeeegghiiiiiiiiijllmmnnoooooooppprrrrsssssssssstttttttttttuuuuuvwyyy

Salida:

The better is Flat dense. break never of be do at never. If bad it honking

Aquí hay otra divertida: no pretende ser difícil, sino algo inusual y desconcertante. :)


Explicación

Las palabras de aspecto aleatorio se toman del Zen de Python (PEP 20), que se imprime automáticamente a través del huevo de Pascua import this. El pasaje es solo cada novena palabra, como lo insinúa el 9::[]presente.
Para extraer cada novena palabra sin imprimir automáticamente el pasaje al importar, redirigimos sys.stdouta a StringIO().



5

Javascript, 29 - Agrietado

Ejecutar en una consola del navegador Chrome

Código

23*47,(no,(.][j,i|i,j][.),on)

Salida

181

Código original

[,,,].join(3)|[,4,].join(7)*2


Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.