Anagram Quines (Hilo de la policía)


26

Este es un desafío de El hilo de ladrones se puede encontrar aquí.

Su desafío es escribir un programa que genere un anagrama de su código fuente pero no el código fuente original en sí.

Por ejemplo, el siguiente programa de Python,

print`'print*2``'*2`

huellas dactilares

'print*2``print*2``'

que tiene todos los mismos caracteres que su fuente original pero en un orden diferente.

Una vez que haya encontrado dicho programa, incluya la salida del programa como respuesta omitiendo el programa que lo genera. Como habrás adivinado, los ladrones buscarán descubrir el programa que has ocultado o cualquier programa que se ajuste a las especificaciones. Su objetivo es hacer el programa más corto que los ladrones no puedan descifrar.

Reglas

  • Al igual que con la mayoría desafíos de , si su respuesta permanece sin descifrar durante una semana, puede agregar la solución deseada a su respuesta y marcarla como Segura . Una vez segura, los ladrones no pueden descifrar una respuesta.

  • No necesita incluir el idioma de la solución deseada, sin embargo, si no incluye el lenguaje, los ladrones pueden descifrarlo en cualquier idioma anterior al desafío, mientras que si especifica el idioma, solo pueden descifrarlo en el que se proporciona.

  • Se aplican las reglas estándar para Quines.


Mi pregunta habitual: en un lenguaje donde los bytes no corresponden a los caracteres, ¿el anagrama está en el byte o en el nivel de caracteres?

@ ais523 debería ser un anagrama de los bytes.
Wheat Wizard


¿Se aplican las reglas habituales de quine a los ladrones? ¿Se aplican a los policías?
Dennis

1
@Fatalize Si no cambia la salida, está bien, pero la salida debe ser estática.
Wheat Wizard

Respuestas:


12

Brain-Flak , 231 bytes agrietado por Wheat Wizard

}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{][][][][][][][)()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()()(

El programa original usa el -Aargumento.

Aquí están los recuentos:

( -> 74
) -> 74
{ -> 34
} -> 34
[ -> 7
] -> 7



4

Haskell, 107 bytes, descifrado por nimi

"$$$$'''''''',,----....::<<<<<<<<========>>>>[[[[[[[[]]]]]]]]aaddddddddddddiiiiiiiiiiiimmnnnnpprrtt||||||"

Hay una nueva línea final adicional.


Solución original:


main=print$id=<<[[id|i<-"main=print$id=<<[[id|i<-,i==d]>>d:[d]|d<-['$'..'|']]",i==d]>>d:[d]|d<-['$'..'|']]

Pruébalo en línea!

Mi idea principal era escribir un quine que clasificara su propio código fuente antes de enviarlo sin usar una sortfunción de biblioteca . Solo después de un intento inicial de craqueo por parte de nimi , se me ocurrió que el código del programa podía clasificarse manualmente, codificarse en el programa y luego imprimirse mientras duplicaba cada letra. Sin embargo, los caracteres disponibles limitados hacen que este enfoque sea más engorroso y el crack exitoso de nimi es bastante similar a mi programa original.

Explicación:

main=print$                                      -- full program which prints the following string
  id=<<[[id|i<-"...",i==d]>>d:[d]|d<-['$'..'|']]
                                 |d<-['$'..'|']  -- for each char d in "$%&'()*+,-./012 ... xyz{|"
        [id|i<-"...",i==d]                       -- build a list with as many elements as d is contained in the string
                          >>d:[d]                -- replicate the string "dd" as often as the previous list is long 
  id=<<[                                       ] -- concatenate the resulting list of srings to one single string

@nimi Sí, es un programa completo. ¿No es esta una regla estándar para quines?
Laikoni

No es seguro. Teníamos quines antes que permitían funciones. E incluso si los programas completos son estándar, el "programa" en el desafío podría interpretarse como sobrescribir los valores predeterminados y también permitir funciones .
nimi

@nimi Lo siento, la versión anterior fue engañosa. Lo había escrito después de haber visto su primer intento y antes de notar que no era válido de acuerdo con las especificaciones. Incluso lo publiqué y luego retrocedí rápidamente con la esperanza de que nadie lo viera, como se puede ver en el historial de revisiones. Después de ver su versión fija, volví a esta versión, sin considerar que la descripción ya no era adecuada.
Laikoni

No estaba seguro de si se refería a mi respuesta, por eso eliminé mi comentario. De hecho, es posible usar una cadena preseleccionada (reemplazar ;con un NL): i[]d=[d,d];main=print$i[]=<<"$$ ... |||"--y todos los caracteres que faltan después de --. Encontré esta versión después de mi respuesta del hilo de ladrones y después de que reveló su respuesta con la explicación ahora modificada.
nimi

4

Idioma no especificado, 124 bytes,

En el tema de la respuesta de DJMcMayhem, estos son los primeros 32 caracteres ASCII (aparte de 0x00) impresos cuatro veces cada uno. Como ninguno de estos son visibles, no he incluido el código real en mi respuesta.

Aquí está el hexdump:

00000000: 0101 0101 0202 0202 0303 0303 0404 0404  ................
00000010: 0505 0505 0606 0606 0707 0707 0808 0808  ................
00000020: 0909 0909 0a0a 0a0a 0b0b 0b0b 0c0c 0c0c  ................
00000030: 0d0d 0d0d 0e0e 0e0e 0f0f 0f0f 1010 1010  ................
00000040: 1111 1111 1212 1212 1313 1313 1414 1414  ................
00000050: 1515 1515 1616 1616 1717 1717 1818 1818  ................
00000060: 1919 1919 1a1a 1a1a 1b1b 1b1b 1c1c 1c1c  ................
00000070: 1d1d 1d1d 1e1e 1e1e 1f1f 1f1f            ............

Sin embargo, aquí hay algo de Python que lo imprime (y una nueva línea) si desea:

print"".join(chr(x)*4for x in range(1,32))

4

Pyth , 32 bytes, descifrado por math_junkie

J+J=JJ 1-2#pTN%"J+J=JJ 1-2#pTN%"

Solución original

J2#p+"J+J=JJ 1-2#pTN%"N=J-J1 %TJ

Pruébalo en línea!

J2                               # Assign 2 to the variable J
  #                              # Infinite loop, break on error
    +"J+J=JJ 1-2#pTN%"N          # appending a '"' to the string 'J+J=JJ 1-2#pTN%'
   p                             # print the string above
                       =J-J1     # subtract 1 from J and assign back to J
                             %TJ # calculated 10%J, with a blank space before to supress output,
                                 # on the 3rd iteration this will be 10%0 that will generate an
                                 # erro and will break out the loop



4

V , 21 bytes (¡Seguro!)


"&./124ipq|ÍÓÚîñòÿ

Tenga en cuenta la nueva línea principal.

Como esto contiene elementos no imprimibles, aquí hay un hexdump:

00000000: 0a16 1b22 262e 2f31 3234 6970 717c cdd3  ..."&./124ipq|..
00000010: daee f1f2 ff                             .....

Para ayudar a algunas personas, aquí hay un enlace a la línea V extensible estándar


Aquí está la versión original:

ñi241"qp|Ó./ò&
ÚÍîÿ

Pruébalo en línea!

La versión legible es:

ñi<C-v>241<esc>"qp|Ó./ò&
ÚÍîÿ

La forma en que esto funciona es incrustando la ordenación en la línea extensible predeterminada. Mientras pensaba en V-quines debido a esta respuesta, me di cuenta de que la quine extensible estándar puede acortarse en tres bytes, por lo que esta solución podría haber sido:

ñiéÑ~"qp|Ó./ò&
ÚÍîÿ

Explicación:

ñi<C-v>241<esc>"qp  " Standard V-quine. Everything after this is recorded into register 'q'
                    " so we can do whatever we want without ruining it's "quine-ness"


|       " Go the first character on the line (I just realized now that this is pointless)
 Ó./ò&  " Put every character on a newline
Ú       " Sort every line
 Íî     " Join all lines together
   ÿ    " Necessary for V-quines

1
olfateo huelo regex fresco
Kritixi Lithos

3

Idioma no especificado, 254 bytes Craqueado por @Dennis!

Dudo que esto gane por brevedad, pero será difícil de descifrar, por lo que aún vale la pena hacerlo.

Debido a un error, el orden 0x0b, 0x0c, 0x0ase mezcló un poco, pero este es definitivamente el resultado real.

Pensé que no especificaría el idioma solo para poder ver en qué idiomas diferentes es posible. Dado que la salida es en su mayoría no ASCII, aquí hay un hexadecimal de la salida:

00000000: 0102 0304 0506 0708 090b 0c0a 0e0f 1011  ................
00000010: 1213 1415 1617 1819 1a1b 1c1d 1e1f 2021  .............. !
00000020: 2223 2425 2627 2829 2a2b 2c2d 2e2f 3031  "#$%&'()*+,-./01
00000030: 3233 3435 3637 3839 3a3b 3c3d 3e3f 4041  23456789:;<=>?@A
00000040: 4243 4445 4647 4849 4a4b 4c4d 4e4f 5051  BCDEFGHIJKLMNOPQ
00000050: 5253 5455 5657 5859 5a5b 5c5d 5e5f 6061  RSTUVWXYZ[\]^_`a
00000060: 6263 6465 6667 6869 6a6b 6c6d 6e6f 7071  bcdefghijklmnopq
00000070: 7273 7475 7677 7879 7a7b 7c7d 7e7f 8081  rstuvwxyz{|}~...
00000080: 8283 8485 8687 8889 8a8b 8c8d 8e8f 9091  ................
00000090: 9293 9495 9697 9899 9a9b 9c9d 9e9f a0a1  ................
000000a0: a2a3 a4a5 a6a7 a8a9 aaab acad aeaf b0b1  ................
000000b0: b2b3 b4b5 b6b7 b8b9 babb bcbd bebf c0c1  ................
000000c0: c2c3 c4c5 c6c7 c8c9 cacb cccd cecf d0d1  ................
000000d0: d2d3 d4d5 d6d7 d8d9 dadb dcdd dedf e0e1  ................
000000e0: e2e3 e4e5 e6e7 e8e9 eaeb eced eeef f0f1  ................
000000f0: f2f3 f4f5 f6f7 f8f9 fafb fcfd feff       ..............

Esos son todos los caracteres ASCII excepto por 0x00y 0x0Dporque ambos causaron un comportamiento extraño en TIO. Diviértete cracking! >: D


El código original estaba en V.

Pruébalo en línea

Hexdump:

00000000: ee02 0304 0506 0708 090b 0c0e 0f10 1112  ................
00000010: 1314 1516 1718 191a 1b1c 1d1e 1f20 2122  ............. !"
00000020: 2324 2526 2728 292a 2b2c 2d2e 2f30 3132  #$%&'()*+,-./012
00000030: 3334 3536 3738 393a 3b3c 3d3e 3f40 4142  3456789:;<=>?@AB
00000040: 4344 4546 4748 494a 4b4c 4d4e 4f50 5152  CDEFGHIJKLMNOPQR
00000050: 5455 5657 5859 5a5b 5c5d 5e5f 6061 6263  TUVWXYZ[\]^_`abc
00000060: 6465 6667 6869 6a6b 6c6d 6e6f 7071 7273  defghijklmnopqrs
00000070: 7475 7677 7879 7a7b 7c7d 7e7f 8081 8283  tuvwxyz{|}~.....
00000080: 8485 8687 8889 8a8b 8c8d 8e8f 9091 9293  ................
00000090: 9495 9697 9899 9a9b 9c9d 9e9f a0a1 a2a3  ................
000000a0: a4a5 a6a7 a8a9 aaab adae afb0 b1b2 b3b4  ................
000000b0: b5b6 b7b8 b9ba bbbc bdbe bfc0 c1c2 c3c4  ................
000000c0: c5c6 c7c8 c9ca cbcc cdce cfd0 d1d2 d3d4  ................
000000d0: d5d6 d7d8 d9da dbdc ddde dfe0 e1e2 e3e4  ................
000000e0: e5e6 e7e8 e9ea ebec edef f0f1 f2f3 f4f5  ................
000000f0: f6f7 f8f9 fafb fcfd feff 0a53 ac01       ...........S..

Básicamente, todo hasta el Sjusto inserta basura en el búfer. El 0xEEprincipio es solo para asegurar que todo después de la nueva línea no suceda en parte de un bucle o macro. Entonces, hacemos

¬<C-a>   "Insert every character in the range 0x01-0xFF



2

PHP, 130 bytes (seguro)

    $$$$$$''''(((((((()))))))),,22;;;;;;<<==??\\\\____aaccddeeeeeeeehhhhiiiillllmmoooooopppppppppprrrrrrrrssssssssttttttttttvvvvvv

Solución original

No pude entender que no estaba roto

<?php $v=str_split(str_repeat('<?php\ $v=str_split(str_repeat(\'\',2));sort($v);echo\ implode($v);',2));sort($v);echo implode($v);

0

Guess, 43 bytes

{4"2)4q):)u(4o'{4t:q(e)(",(t22(u()o)?,?'2e

Fue una decisión difícil compartir o no el idioma que era, pero creo que esta opción es mejor. Tenga en cuenta que hay una nueva línea final.


1
Una respuesta solo es segura si agrega la solución deseada a la respuesta. Hasta entonces, esta respuesta no es segura.
mbomb007
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.