XOR encripta tus programas con la fuente de otros programas

24

Escriba dos programas de manera que cuando los bytes de su código fuente sean XOR-d juntos, produzca un tercer programa válido, todos en el mismo idioma. La longitud de cada uno de los tres programas en bytes debe ser idéntica.

El primer programa debería salir A. El segundo programa debería salir B. El tercer programa debería salir C.

Una nueva línea es opcional, pero si una genera una nueva línea, las otras dos también deben hacerlo.

Si utiliza cualquier indicador de línea de comando, debe usar los mismos para cada programa, es decir, los tres programas deben ejecutarse de la misma manera. Si está utilizando un lenguaje como PHP que tradicionalmente comienza con la misma combinación de caracteres, por ejemplo, <?pero hay una opción de línea de comando que elimina esos caracteres que puede usar en su lugar, es decir, PHP solo debe ejecutarse desde la línea de comando.

No se permite ninguna entrada. Cada programa debe ser autónomo.

Si su programa está escrito completamente en ASCII, las siguientes tablas pueden ayudar:

Codes 0x20 - 0x3F
 !"#$%&'()*+,-./
0123456789:;<=>?

Codes 0x40 - 0x5F
@ABCDEFGHIJKLMNO
PQRSTUVWXYZ[\]^_

Codes 0x60 - 0x7E
`abcdefghijklmno
pqrstuvwxyz{|}~

EDITAR

Se permite el uso de caracteres que no se imprimen, ya que originalmente no lo prohibí expresamente. Sin embargo, si desea publicar una versión que también use solo caracteres imprimibles, ¡sería genial! (Marque el que sea más corto). El "factor inteligente" de usar códigos de control ha desaparecido un poco ahora ...

EDICIÓN FINAL

Hacer XOR de dos códigos del mismo bloque producirá un código menor que 0x20 que, por lo tanto, no es un código ASCII imprimible válido, por ejemplo, 0x41 ( A) XOR 0x5A ( Z) = 0x1B. Hacer XOR de cualquiera de los dos códigos de diferentes bloques producirá un código del tercer bloque, por ejemplo, 0x61 ( a) XOR 0x54 ( T) = 0x35 ( 5).

    |  @` !Aa "Bb #Cc $Dd %Ee &Ff 'Gg (Hh )Ii *Jj +Kk ,Ll -Mm .Nn /Oo 0Pp 1Qq 2Rr 3Ss 4Tt 5Uu 6Vv 7Ww 8Xx 9Yy :Zz ;[{ <\| =]} >^~ ?_
--- + --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- --- ---
 @` |  @` !Aa "Bb #Cc $Dd %Ee &Ff 'Gg (Hh )Ii *Jj +Kk ,Ll -Mm .Nn /Oo 0Pp 1Qq 2Rr 3Ss 4Tt 5Uu 6Vv 7Ww 8Xx 9Yy :Zz ;[{ <\| =]} >^~ ?_
!Aa | !Aa  @` #Cc "Bb %Ee $Dd 'Gg &Ff )Ii (Hh +Kk *Jj -Mm ,Ll /Oo .Nn 1Qq 0Pp 3Ss 2Rr 5Uu 4Tt 7Ww 6Vv 9Yy 8Xx ;[{ :Zz =]} <\| ?_ >^~
"Bb | "Bb #Cc  @` !Aa &Ff 'Gg $Dd %Ee *Jj +Kk (Hh )Ii .Nn /Oo ,Ll -Mm 2Rr 3Ss 0Pp 1Qq 6Vv 7Ww 4Tt 5Uu :Zz ;[{ 8Xx 9Yy >^~ ?_ <\| =]}
#Cc | #Cc "Bb !Aa  @` 'Gg &Ff %Ee $Dd +Kk *Jj )Ii (Hh /Oo .Nn -Mm ,Ll 3Ss 2Rr 1Qq 0Pp 7Ww 6Vv 5Uu 4Tt ;[{ :Zz 9Yy 8Xx ?_ >^~ =]} <\|
$Dd | $Dd %Ee &Ff 'Gg  @` !Aa "Bb #Cc ,Ll -Mm .Nn /Oo (Hh )Ii *Jj +Kk 4Tt 5Uu 6Vv 7Ww 0Pp 1Qq 2Rr 3Ss <\| =]} >^~ ?_ 8Xx 9Yy :Zz ;[{
%Ee | %Ee $Dd 'Gg &Ff !Aa  @` #Cc "Bb -Mm ,Ll /Oo .Nn )Ii (Hh +Kk *Jj 5Uu 4Tt 7Ww 6Vv 1Qq 0Pp 3Ss 2Rr =]} <\| ?_ >^~ 9Yy 8Xx ;[{ :Zz
&Ff | &Ff 'Gg $Dd %Ee "Bb #Cc  @` !Aa .Nn /Oo ,Ll -Mm *Jj +Kk (Hh )Ii 6Vv 7Ww 4Tt 5Uu 2Rr 3Ss 0Pp 1Qq >^~ ?_ <\| =]} :Zz ;[{ 8Xx 9Yy
'Gg | 'Gg &Ff %Ee $Dd #Cc "Bb !Aa  @` /Oo .Nn -Mm ,Ll +Kk *Jj )Ii (Hh 7Ww 6Vv 5Uu 4Tt 3Ss 2Rr 1Qq 0Pp ?_ >^~ =]} <\| ;[{ :Zz 9Yy 8Xx
(Hh | (Hh )Ii *Jj +Kk ,Ll -Mm .Nn /Oo  @` !Aa "Bb #Cc $Dd %Ee &Ff 'Gg 8Xx 9Yy :Zz ;[{ <\| =]} >^~ ?_ 0Pp 1Qq 2Rr 3Ss 4Tt 5Uu 6Vv 7Ww
)Ii | )Ii (Hh +Kk *Jj -Mm ,Ll /Oo .Nn !Aa  @` #Cc "Bb %Ee $Dd 'Gg &Ff 9Yy 8Xx ;[{ :Zz =]} <\| ?_ >^~ 1Qq 0Pp 3Ss 2Rr 5Uu 4Tt 7Ww 6Vv
*Jj | *Jj +Kk (Hh )Ii .Nn /Oo ,Ll -Mm "Bb #Cc  @` !Aa &Ff 'Gg $Dd %Ee :Zz ;[{ 8Xx 9Yy >^~ ?_ <\| =]} 2Rr 3Ss 0Pp 1Qq 6Vv 7Ww 4Tt 5Uu
+Kk | +Kk *Jj )Ii (Hh /Oo .Nn -Mm ,Ll #Cc "Bb !Aa  @` 'Gg &Ff %Ee $Dd ;[{ :Zz 9Yy 8Xx ?_ >^~ =]} <\| 3Ss 2Rr 1Qq 0Pp 7Ww 6Vv 5Uu 4Tt
,Ll | ,Ll -Mm .Nn /Oo (Hh )Ii *Jj +Kk $Dd %Ee &Ff 'Gg  @` !Aa "Bb #Cc <\| =]} >^~ ?_ 8Xx 9Yy :Zz ;[{ 4Tt 5Uu 6Vv 7Ww 0Pp 1Qq 2Rr 3Ss
-Mm | -Mm ,Ll /Oo .Nn )Ii (Hh +Kk *Jj %Ee $Dd 'Gg &Ff !Aa  @` #Cc "Bb =]} <\| ?_ >^~ 9Yy 8Xx ;[{ :Zz 5Uu 4Tt 7Ww 6Vv 1Qq 0Pp 3Ss 2Rr
.Nn | .Nn /Oo ,Ll -Mm *Jj +Kk (Hh )Ii &Ff 'Gg $Dd %Ee "Bb #Cc  @` !Aa >^~ ?_ <\| =]} :Zz ;[{ 8Xx 9Yy 6Vv 7Ww 4Tt 5Uu 2Rr 3Ss 0Pp 1Qq
/Oo | /Oo .Nn -Mm ,Ll +Kk *Jj )Ii (Hh 'Gg &Ff %Ee $Dd #Cc "Bb !Aa  @` ?_ >^~ =]} <\| ;[{ :Zz 9Yy 8Xx 7Ww 6Vv 5Uu 4Tt 3Ss 2Rr 1Qq 0Pp
0Pp | 0Pp 1Qq 2Rr 3Ss 4Tt 5Uu 6Vv 7Ww 8Xx 9Yy :Zz ;[{ <\| =]} >^~ ?_  @` !Aa "Bb #Cc $Dd %Ee &Ff 'Gg (Hh )Ii *Jj +Kk ,Ll -Mm .Nn /Oo
1Qq | 1Qq 0Pp 3Ss 2Rr 5Uu 4Tt 7Ww 6Vv 9Yy 8Xx ;[{ :Zz =]} <\| ?_ >^~ !Aa  @` #Cc "Bb %Ee $Dd 'Gg &Ff )Ii (Hh +Kk *Jj -Mm ,Ll /Oo .Nn
2Rr | 2Rr 3Ss 0Pp 1Qq 6Vv 7Ww 4Tt 5Uu :Zz ;[{ 8Xx 9Yy >^~ ?_ <\| =]} "Bb #Cc  @` !Aa &Ff 'Gg $Dd %Ee *Jj +Kk (Hh )Ii .Nn /Oo ,Ll -Mm
3Ss | 3Ss 2Rr 1Qq 0Pp 7Ww 6Vv 5Uu 4Tt ;[{ :Zz 9Yy 8Xx ?_ >^~ =]} <\| #Cc "Bb !Aa  @` 'Gg &Ff %Ee $Dd +Kk *Jj )Ii (Hh /Oo .Nn -Mm ,Ll
4Tt | 4Tt 5Uu 6Vv 7Ww 0Pp 1Qq 2Rr 3Ss <\| =]} >^~ ?_ 8Xx 9Yy :Zz ;[{ $Dd %Ee &Ff 'Gg  @` !Aa "Bb #Cc ,Ll -Mm .Nn /Oo (Hh )Ii *Jj +Kk
5Uu | 5Uu 4Tt 7Ww 6Vv 1Qq 0Pp 3Ss 2Rr =]} <\| ?_ >^~ 9Yy 8Xx ;[{ :Zz %Ee $Dd 'Gg &Ff !Aa  @` #Cc "Bb -Mm ,Ll /Oo .Nn )Ii (Hh +Kk *Jj
6Vv | 6Vv 7Ww 4Tt 5Uu 2Rr 3Ss 0Pp 1Qq >^~ ?_ <\| =]} :Zz ;[{ 8Xx 9Yy &Ff 'Gg $Dd %Ee "Bb #Cc  @` !Aa .Nn /Oo ,Ll -Mm *Jj +Kk (Hh )Ii
7Ww | 7Ww 6Vv 5Uu 4Tt 3Ss 2Rr 1Qq 0Pp ?_ >^~ =]} <\| ;[{ :Zz 9Yy 8Xx 'Gg &Ff %Ee $Dd #Cc "Bb !Aa  @` /Oo .Nn -Mm ,Ll +Kk *Jj )Ii (Hh
8Xx | 8Xx 9Yy :Zz ;[{ <\| =]} >^~ ?_ 0Pp 1Qq 2Rr 3Ss 4Tt 5Uu 6Vv 7Ww (Hh )Ii *Jj +Kk ,Ll -Mm .Nn /Oo  @` !Aa "Bb #Cc $Dd %Ee &Ff 'Gg
9Yy | 9Yy 8Xx ;[{ :Zz =]} <\| ?_ >^~ 1Qq 0Pp 3Ss 2Rr 5Uu 4Tt 7Ww 6Vv )Ii (Hh +Kk *Jj -Mm ,Ll /Oo .Nn !Aa  @` #Cc "Bb %Ee $Dd 'Gg &Ff
:Zz | :Zz ;[{ 8Xx 9Yy >^~ ?_ <\| =]} 2Rr 3Ss 0Pp 1Qq 6Vv 7Ww 4Tt 5Uu *Jj +Kk (Hh )Ii .Nn /Oo ,Ll -Mm "Bb #Cc  @` !Aa &Ff 'Gg $Dd %Ee
;[{ | ;[{ :Zz 9Yy 8Xx ?_ >^~ =]} <\| 3Ss 2Rr 1Qq 0Pp 7Ww 6Vv 5Uu 4Tt +Kk *Jj )Ii (Hh /Oo .Nn -Mm ,Ll #Cc "Bb !Aa  @` 'Gg &Ff %Ee $Dd
<\| | <\| =]} >^~ ?_ 8Xx 9Yy :Zz ;[{ 4Tt 5Uu 6Vv 7Ww 0Pp 1Qq 2Rr 3Ss ,Ll -Mm .Nn /Oo (Hh )Ii *Jj +Kk $Dd %Ee &Ff 'Gg  @` !Aa "Bb #Cc
=]} | =]} <\| ?_ >^~ 9Yy 8Xx ;[{ :Zz 5Uu 4Tt 7Ww 6Vv 1Qq 0Pp 3Ss 2Rr -Mm ,Ll /Oo .Nn )Ii (Hh +Kk *Jj %Ee $Dd 'Gg &Ff !Aa  @` #Cc "Bb
>^~ | >^~ ?_ <\| =]} :Zz ;[{ 8Xx 9Yy 6Vv 7Ww 4Tt 5Uu 2Rr 3Ss 0Pp 1Qq .Nn /Oo ,Ll -Mm *Jj +Kk (Hh )Ii &Ff 'Gg $Dd %Ee "Bb #Cc  @` !Aa
?_ | ?_ >^~ =]} <\| ;[{ :Zz 9Yy 8Xx 7Ww 6Vv 5Uu 4Tt 3Ss 2Rr 1Qq 0Pp /Oo .Nn -Mm ,Ll +Kk *Jj )Ii (Hh 'Gg &Ff %Ee $Dd #Cc "Bb !Aa  @`

Busque dos personajes de diferentes columnas y elija el personaje de su intersección que está en la otra columna, por ejemplo, By e: "BbXOR %Eees 'Gg. BEs la segunda columna y ees la tercera columna para recoger el carácter de la primera columna en 'Gg: '.

Fuente de ejemplo:

 Ld+|?dpHs'-,pUe    (Program 1)
~bWn=n5Xe!t_G($3    (Program 2)
^.3EAQQ(-RSrkXqV    (Program 3)

Tenga en cuenta que en cada columna solo puede haber un dígito, una letra mayúscula y una letra minúscula. Para cada columna, puede usar cualquier carácter que desee en el primer programa, luego puede elegir entre 64 caracteres en el segundo programa pero solo un carácter posible en el tercer programa. 0x7F no es válido en ningún lugar.

Si usa Unicode, depende de usted validar el XOR-ing y debe decir cómo está codificado, por ejemplo, UTF-8, UTF-16, etc. Cada archivo debe usar la misma codificación.

Puntuación: Duración de un programa. ¡Pocos bytes ganan!

CJ Dennis
fuente

Respuestas:

13

GolfScript, 6 bytes

UNA

A'AA'|

si

cdc"B"

do

"C"ce^

|y ^son setwise o y xor con la cadena de entrada vacía, que no haría nada más que eliminar duplicados en la cadena.

Versión original (con caracteres no imprimibles)

UNA

Xz'A'v

si

z9\x05"B"

do

"C"ceT

GolfScript ignora las cosas indefinidas, y los tres programas son justos 'A' "B" "C".

jimmy23013
fuente
12

Javascript, 23 bytes

Programa A

alert(' A '[~-~~2],'B')

Programa B:

alert(FL$RSsYnYW1f='B')

Programa C:

\0\0\0\0\0\0alert('C')\0;\0\0\03\0\0

Puede probar la conversión con la siguiente función:

function xorString(a, b) {
  b = b || '';
  var length = Math.max(a.length, b.length);
  var chars = a.split('').map(function(charA, i) {
    var charB = b[i] || ' ';
    return String.fromCharCode(charA.charCodeAt(0) ^ charB.charCodeAt(0));
  });

  return chars.join('');
}
George Reith
fuente
¡¡¡Buena esa!!! Puede incluir un stacksnippet que lo muestre.
Ismael Miguel
3

PHP, 15 + 1 bytes

Este era fácil REALMENTE más difícil de lo esperado, ¡pero divertido!
Lamentablemente, esta es la tercera reescritura debido a respuestas no válidas.

Esta vez, está destinado a ejecutarse en la consola (utilizando el parámetro -r).

Programa A

echo A;E925Z9A;

Programa B:

echo B; zzzzzz;

Resultado de XORing:

\0\0\0\0\0\3\0eCHO C;\0 //base 64: AAAAAAADAGVDSE8gQzsA

Volcado hexadecimal:

   |00|01|02|03|04|05|06|07|08|09|0A|0B|0C|0D|0E|0F|      TEXT      
--------------------------------------------------------------------
00 |00|00|00|00|00|03|00|65|43|48|4F|20|43|3B|00|  |.......eCHO C;.
====================================================================

PHP lanzará advertencias sobre tener los caracteres \0y \3antes del eco, pero eso es ignorable.
¡Son solo advertencias!
¡Todavía se ejecuta y genera la respuesta correcta!


Intenta ejecutar esto en tu consola:

php -r "@eval('echo B; zzzzzz;' ^ 'echo A;E925Z9A;');"

Si no puede, pruebe uno de estos:

Si aún no puede, ejecute el código usted mismo:

<?php

error_reporting( 0 );

$program_a = 'echo A;E925Z9A;';

$program_b = 'echo B; zzzzzz;';

eval( $program_a );

eval( $program_b );

eval( $program_c = $program_a ^ $program_b );

echo PHP_EOL, 'a ^ b = ';

var_dump( $program_c );

Código antiguo, inválido:

Programa A

<?=A;zzzzz;

Programa B:

<?=B;FEG9A;

Resultado de XORing:

\0\0\0\0<?=C;\0 //base64: AAAAAwA8Pz1DOwA=
Ismael Miguel
fuente
Realmente no puedo escribir \x00en mi consola, pero reemplazarlos con \x03trabajos y \x00dentro de PHP en mi servidor aún se ejecuta, ¡así que supongo que su respuesta es válida ahora! También tuve que usar una bandera para suprimir todos los errores: php -d error_reporting=0 -r "^C^C^C^C^C^CeCHO C;^C"Salidas C. Redirigir stderr ( 2>en Windows) no eliminó todos los errores de la salida.
CJ Dennis
Su programa en la consola de Windows: "♥ eCHO C;"
CJ Dennis
@CJDennis Las advertencias siempre se ignoran. Si fuera un error fatal, sería peor. Pero me parece extraño que produzca eso, cuando XORing. Pero tal vez sea por \3eso, que se muestra como el club de los corazones. ¿Pero quieres que agregue la -dbandera al conteo?
Ismael Miguel
Como no estás superando el código GolfScript, no te preocupes por eso. Si encuentra una versión de 6 bytes, ¡tendré que reconsiderarla! ¡Pero tuve que trabajar muy duro sin reconfigurar mi archivo php.ini para que funcione correctamente! ¡Me gustó la forma en que Windows convirtió el \x03corazón en un corazón! Windows ♥ PHP!
CJ Dennis
1
Sí, se las @arregló para suprimir todos los errores!
CJ Dennis
3

Pip, 4 bytes

Como user23013 está utilizando ASCII sin impresión en GolfScript, pensé que podría hacer lo mismo en Pip . Requiere redirigir stderr, pero está bien , ¿ verdad?

UNA

??'A

donde los dos ?s representan el carácter ASCII 0.

si

'C'B

do

'C??

donde los dos ?s representan caracteres ASCII 0 y 3, respectivamente.

Coloque cada programa en un archivo ( A.pippor ejemplo). En Linux, haz:

./pip.py A.pip 2>/dev/null

En Windows:

pip.py A.pip 2>nul

Si la salida de error es verboten, aquí hay una solución de 5 bytes en ASCII imprimible:

pAa'A
 f"B"
P'Cec
DLosc
fuente
Sí, tanto la redirección de stderr (¡fea como es!) Como el uso de caracteres que no se imprimen están permitidos. Sin embargo, ¡también aprecio que publiques una versión completamente imprimible!
CJ Dennis
2

Microscript , 8 bytes cada uno

UNA: 'APhgap)

SI: 'BPh@" A

DO: <0><3><0><0>'CPh

SuperJedi224
fuente
No me di cuenta de que muchos idiomas son muy indulgentes con los códigos de control en la fuente. Eche un vistazo a las otras respuestas, algunas de las cuales utilizan códigos que no se imprimen. ¡Siéntete libre de hacer lo mismo!
CJ Dennis
Pensé que decía no usar ASCII sin impresión, pero puedo estar equivocado. EDITAR: Y ahora veo que lo has cambiado. Muy bien, veré qué puedo hacer.
SuperJedi224
1
¿No debería ser eso <0><3><0><0>...?
CJ Dennis
Tienes razón. Gracias por señalar eso.
SuperJedi224
2

Pitón, 19 15 14 bytes

a.py

00000000  70 72 69 6e 00 28 32 50  69 0a 74 22 41 22        |prin.(2Pi.t"A"|

b.py

00000000  70 72 69 6e 74 22 42 22  00 64 00 00 02 00        |print"B".d....|

c.py

00000000  00 00 00 00 74 0a 70 72  69 6e 74 22 43 22        |....t.print"C"|

Se me ocurrió esta solución cuando noté que python (2.7.6 en Ubuntu 14.04) después de ver un carácter NUL ignorará el resto de esa línea.

Acortado por 1 bytes una vez que me di cuenta de que el espacio después de la impresión no era necesario. Y acortado por 4 bytes más una vez que me di cuenta de que el carácter NUL también hace que se ignore la nueva línea para que pueda usarla para romper líneas en el medio de una palabra clave.

kasperd
fuente
0

Chip de 8 bytes

Todos requieren la bandera -w.

Programa A

a*gt*...

( .es el carácter nulo \x00)

Programa B

...*gb*t

( .es el carácter nulo \x00)

Programa C

a*g^Mb*t

Tanto A como B producen tres advertencias cada una (por ejemplo:) 1:6 WARN: '' (0) is not a valid character, pero se pueden ignorar con seguridad ya que van a stderr. Los elementos ^y Mson válidos, pero no hacen nada aquí.

Estoy bastante seguro de que esto es lo mejor que se puede hacer con no imprimibles permitidos. No estoy seguro de que esta prueba esté completa, pero aquí va:

A requiere a, g, t, y de alguna manera para activar los elementos (un mínimo de dos símbolos son necesarios para esto, y *es la opción más simple aquí). Del mismo modo,
B requiere b, g, t, y dos *s, y
C requiere a, b, g, t, y dos *s.

Si C toma prestados sus símbolos directamente de A y B, habrá dos letras y dos *s que permanecerán sin reclamar. (En mi implementación, A ty B g). Esos cuatro elementos pueden superponerse para que se destrocen en C (produciendo ^y Men este caso). Ahora tenemos esos dos elementos destrozados, más los seis elementos requeridos desde arriba (C requiere 6, los otros solo 5, pero necesitamos max () aquí), para un total de 8 elementos.


Chip (sin advertencia), 10 bytes

Todos requieren las banderas -wo.

Programa A

a*HH^t*Gg 

(hay un espacio final)

Programa B

KKb*t*^g G

Programa C

*a*b*^t Gg

Probablemente sea lo mejor que podemos hacer con ASCII imprimible, de la siguiente manera: los tres programas, combinados, necesitan un total de 2 as, 2 bs, 3 gsy 3 ts. Como ninguno de estos personajes puede pasar a otro, necesitamos 2+2+3+3 = 10posiciones separadas.

Phlarx
fuente