XOR crypte vos programmes avec la source d'autres programmes


24

Écrivez deux programmes de telle sorte que lorsque les octets de leur code source sont XOR-d ensemble, il produit un troisième programme valide, tous dans la même langue. La longueur de chacun des trois programmes en octets doit être identique.

Le premier programme devrait sortir A. Le deuxième programme devrait sortir B. Le troisième programme devrait sortir C.

Une nouvelle ligne est facultative, mais si l'une sort une nouvelle ligne, les deux autres le doivent aussi.

Si vous utilisez des drapeaux de ligne de commande, vous devez être les mêmes pour chaque programme, c'est-à-dire que les trois programmes doivent être exécutés de la même manière. Si vous utilisez un langage comme PHP qui commence traditionnellement avec la même combinaison de caractères, par exemple, <?mais qu'il existe une option de ligne de commande qui supprime ces caractères, vous pouvez l'utiliser à la place, c'est-à-dire que PHP ne doit être exécuté qu'à partir de la ligne de commande.

Aucune entrée n'est autorisée. Chaque programme doit être autonome.

Si votre programme est entièrement écrit en ASCII, les tableaux suivants peuvent vous aider:

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

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

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

MODIFIER

L'utilisation de caractères non imprimables est autorisée car je ne l'ai pas expressément interdit à l'origine. Cependant, si vous souhaitez publier une version qui n'utilise que des caractères imprimables, ce serait bien! (Le score est le plus court.) Le "facteur intelligent" de l'utilisation des codes de contrôle s'est quelque peu dissipé maintenant ...

FIN DE LA MODIFICATION

XOR-ing deux codes à partir du même bloc produira un code inférieur à 0x20 qui n'est donc pas un code ASCII imprimable valide, par exemple 0x41 ( A) XOR 0x5A ( Z) = 0x1B. XOR-ing deux codes de blocs différents produira un code à partir du troisième bloc, par exemple 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  @`

Recherchez deux caractères dans différentes colonnes et choisissez le caractère de leur intersection qui est dans l'autre colonne, par exemple Bet e: "BbXOR %Eeest 'Gg. Best la seconde colonne et eest donc troisième colonne choisir le caractère de la première colonne dans 'Gg: '.

Exemple de source:

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

Notez que dans chaque colonne, il ne peut y avoir qu'un seul chiffre, une lettre majuscule et une lettre minuscule. Pour chaque colonne, vous pouvez utiliser n'importe quel caractère que vous aimez dans le premier programme, puis votre choix de 64 caractères dans le deuxième programme mais un seul caractère possible dans le troisième programme. 0x7F n'est valide nulle part.

Si vous utilisez Unicode, c'est à vous de valider le XOR-ing et vous devez dire comment il est encodé, par exemple UTF-8, UTF-16, etc. Chaque fichier doit utiliser le même encodage.

Score: Durée d'un programme. Moins d'octets gagnent!

Réponses:


13

GolfScript, 6 octets

UNE

A'AA'|

B

cdc"B"

C

"C"ce^

|et ^sont setwise ou et xor avec la chaîne d'entrée vide, ce qui ne ferait que supprimer les doublons dans la chaîne.

Version originale (avec caractères non imprimables)

UNE

Xz'A'v

B

z9\x05"B"

C

"C"ceT

GolfScript ignore les choses indéfinies, et les trois programmes sont justes 'A' "B" "C".


12

Javascript, 23 octets

Programme A:

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

Programme B:

alert(FL$RSsYnYW1f='B')

Programme C:

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

Vous pouvez tester la conversion avec la fonction suivante:

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('');
}

Joli!!! Vous pouvez inclure un stacksnippet montrant cela.
Ismael Miguel

3

PHP, 15 + 1 octets

Celui-ci était facile VRAIMENT plus difficile que prévu, mais amusant!
Malheureusement, il s'agit de la 3e réécriture en raison de réponses invalides.

Cette fois, il est censé s'exécuter dans la console (en utilisant le paramètre -r).

Programme A:

echo A;E925Z9A;

Programme B:

echo B; zzzzzz;

Résultat de XORing:

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

Vidage hexadécimal:

   |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 lancera des avertissements sur la présence des caractères \0et \3avant l'écho, mais cela est ignorable.
Ce ne sont que des avertissements!
Il fonctionne toujours et génère la bonne réponse!


Essayez d'exécuter ceci, dans votre console:

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

Si vous ne le pouvez pas, essayez l'une des solutions suivantes:

Si vous ne pouvez toujours pas, exécutez le code vous-même:

<?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 );

Ancien code, invalide:

Programme A:

<?=A;zzzzz;

Programme B:

<?=B;FEG9A;

Résultat de XORing:

\0\0\0\0<?=C;\0 //base64: AAAAAwA8Pz1DOwA=

Je ne peux pas vraiment taper \x00dans ma console mais les remplacer par des \x03travaux et \x00dans PHP lui-même sur mon serveur fonctionne toujours, donc je suppose que votre réponse est valide maintenant! J'ai également dû utiliser un indicateur pour supprimer toutes les erreurs: les php -d error_reporting=0 -r "^C^C^C^C^C^CeCHO C;^C"sorties C. La redirection de stderr ( 2>sous Windows) n'a pas supprimé toutes les erreurs de la sortie.
CJ Dennis

Votre programme dans la console Windows: "♥ eCHO C;"!
CJ Dennis

Les avertissements @CJDennis sont toujours ignorés. S'il s'agissait d'une erreur fatale, ce serait pire. Mais je trouve bizarre que ça produise ça, quand XORing. Mais peut-être que c'est à cause de \3là, ça se voit comme le club des cœurs. Mais voulez-vous que j'ajoute le -ddrapeau au décompte?
Ismael Miguel

Puisque vous ne battez pas le code GolfScript, ne vous en faites pas. Si vous trouvez une version 6 octets, je devrai reconsidérer! Mais j'ai dû travailler très dur sans reconfigurer mon fichier php.ini pour le faire fonctionner correctement! J'ai aimé la façon dont Windows a transformé le \x03en cœur! Windows ♥ PHP!
CJ Dennis

1
Oui, le @réussi à supprimer toutes les erreurs!
CJ Dennis

3

Pip, 4 octets

Étant donné que user23013 utilise ASCII non imprimable dans GolfScript, j'ai pensé que je pouvais faire la même chose dans Pip . Cela nécessite une redirection stderr, mais ça va , non?

UNE

??'A

où les deux ?s représentent le caractère ASCII 0.

B

'C'B

C

'C??

où les deux ?s représentent respectivement les caractères ASCII 0 et 3.

Placez chaque programme dans un fichier ( A.pippar exemple). Sous Linux, faites:

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

Sous Windows:

pip.py A.pip 2>nul

Si la sortie d'erreur est verboten, voici une solution à 5 octets en ASCII imprimable:

pAa'A
 f"B"
P'Cec

Oui, à la fois la redirection de stderr (aussi moche soit-elle!) Et l'utilisation de caractères non imprimables sont autorisées. J'apprécie également que vous ayez publié une version entièrement imprimable!
CJ Dennis

2

Microscript , 8 octets chacun

UNE: 'APhgap)

B: 'BPh@" A

C: <0><3><0><0>'CPh


Je ne savais pas que tant de langues sont très indulgentes avec les codes de contrôle dans la source. Jetez un œil aux autres réponses, dont certaines utilisent des codes non imprimables. N'hésitez pas à faire de même!
CJ Dennis

Je pensais qu'il disait de ne pas utiliser ASCII non imprimable, mais je peux me tromper. EDIT: Et maintenant je vois que vous l'avez changé. D'accord, je vais voir ce que je peux faire.
SuperJedi224

1
N'est-ce pas <0><3><0><0>...?
CJ Dennis

Tu as raison. Merci d'avoir fait remarquer cela.
SuperJedi224

2

Python, 19 15 14 octets

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"|

J'ai trouvé cette solution lorsque j'ai remarqué que python (2.7.6 sur Ubuntu 14.04) après avoir vu un caractère NUL ignorera le reste de cette ligne.

Raccourci de 1 octet une fois que j'ai réalisé que l'espace après l'impression n'était pas nécessaire. Et raccourci de 4 octets supplémentaires une fois que je me suis rendu compte que le caractère NUL provoquait également l'ignorance de la nouvelle ligne afin que je puisse l'utiliser pour couper les lignes au milieu d'un mot clé.


0

Puce , 8 octets

Tous nécessitent le drapeau -w.

Programme A

a*gt*...

( .est le caractère nul \x00)

Programme B

...*gb*t

( .est le caractère nul \x00)

Programme C

a*g^Mb*t

A et B produisent chacun trois avertissements (par exemple:) 1:6 WARN: '' (0) is not a valid character, mais ils peuvent être ignorés en toute sécurité car ils vont à stderr. Les éléments ^et Msont valides, mais ne faites rien ici.

Je suis à peu près sûr que c'est le mieux qui puisse être fait avec les non imprimables autorisés. Je ne suis pas sûr que cette preuve soit complète, mais voici:

A exige a, g, tet d'une certaine façon d'activer ces éléments (un minimum de deux symboles sont nécessaires pour cela, et *est l'option la plus simple ici). De même,
B nécessite b, g, t, et deux *s, et
C exige a, b, g, t, et deux *s.

Si C emprunte ses symboles directement à A et B, il y aura deux lettres et deux *s qui ne seront pas réclamés. (Dans mon implémentation, A tet B g). Ces quatre éléments peuvent être superposés de sorte qu'ils soient mutilés en C (produisant ^et Mdans ce cas). Nous avons maintenant ces deux éléments mutilés, plus les six éléments requis d'en haut (C nécessite 6, les autres seulement 5, mais nous avons besoin de max () ici), pour un total de 8 éléments.


Puce (sans avertissement), 10 octets

Tous nécessitent les drapeaux -wo.

Programme A

a*HH^t*Gg 

(il y a un espace de fin)

Programme B

KKb*t*^g G

Programme C

*a*b*^t Gg

C'est sans doute le meilleur que nous puissions faire en ASCII imprimable, comme suit: Les trois programmes, combinés, ont besoin d'un total de 2 as, 2 bs, 3 gs et 3 ts. Comme aucun de ces personnages ne peut passer à un autre, nous avons besoin de 2+2+3+3 = 10positions distinctes.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.