XOR mengenkripsi program Anda dengan sumber program lain

24

Tulis dua program sehingga ketika byte kode sumbernya adalah XOR-d bersama-sama menghasilkan program ketiga yang valid, semua dalam bahasa yang sama. Panjang masing-masing dari tiga program dalam byte harus identik.

Program pertama harus di-output A. Program kedua harus di-output B. Program ketiga harus di-output C.

Baris baru adalah opsional, tetapi jika satu menampilkan baris baru, yang lain juga harus.

Jika Anda menggunakan flag baris perintah apa pun, Anda harus menggunakan flag yang sama untuk setiap program, yaitu ketiga program harus dijalankan dengan cara yang sama. Jika Anda menggunakan bahasa seperti PHP yang secara tradisional dimulai dengan kombinasi karakter yang sama, mis. <?Tetapi ada opsi baris perintah yang menjatuhkan karakter yang mungkin Anda gunakan, yaitu PHP hanya harus dijalankan dari baris perintah.

Tidak ada input yang diizinkan. Setiap program harus mandiri.

Jika program Anda seluruhnya ditulis dalam ASCII, tabel berikut mungkin membantu:

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

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

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

EDIT

Menggunakan karakter non-cetak diperbolehkan karena saya tidak secara tegas melarangnya. Namun, jika Anda ingin memposting versi yang hanya menggunakan karakter yang dapat dicetak, itu akan lebih bagus! (Nilai mana saja yang paling pendek.) "Faktor pintar" menggunakan kode kontrol agak berkurang sekarang ...

AKHIR EDIT

XOR-ing dua kode dari blok yang sama akan menghasilkan kode kurang dari 0x20 yang karenanya bukan kode ASCII yang dapat dicetak, misalnya 0x41 ( A) XOR 0x5A ( Z) = 0x1B. XOR-ing dua kode dari blok yang berbeda akan menghasilkan kode dari blok ketiga, misalnya 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  @`

Cari dua karakter dari kolom yang berbeda dan pilih karakter dari persimpangan mereka yang ada di kolom lain, misalnya Bdan e: "BbXOR %Eeadalah 'Gg. Badalah kolom kedua dan emerupakan kolom ketiga sehingga memilih karakter dari kolom pertama di 'Gg: '.

Sumber contoh:

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

Perhatikan bahwa di setiap kolom hanya ada satu digit, satu huruf besar dan satu huruf kecil. Untuk setiap kolom Anda dapat menggunakan karakter apa pun yang Anda suka di program pertama, kemudian pilihan Anda 64 karakter di program kedua tetapi hanya satu karakter yang mungkin di program ketiga. 0x7F tidak berlaku di mana pun.

Jika Anda menggunakan Unicode, terserah Anda untuk memvalidasi XOR-ing dan Anda harus mengatakan bagaimana itu dikodekan, misalnya UTF-8, UTF-16, dll. Setiap file harus menggunakan pengkodean yang sama.

Nilai: Panjang satu program. Bytes paling sedikit menang!

CJ Dennis
sumber

Jawaban:

13

GolfScript, 6 byte

SEBUAH

A'AA'|

B

cdc"B"

C

"C"ce^

|dan ^setwise atau dan xor dengan string input kosong, yang tidak akan melakukan apa pun selain menghapus duplikat dalam string.

Versi asli (dengan karakter yang tidak dapat dicetak)

SEBUAH

Xz'A'v

B

z9\x05"B"

C

"C"ceT

GolfScript mengabaikan hal-hal yang tidak terdefinisi, dan ketiga program itu adil 'A' "B" "C".

jimmy23013
sumber
12

Javascript, 23 byte

Program A:

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

Program B:

alert(FL$RSsYnYW1f='B')

Program C:

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

Anda dapat menguji konversi dengan fungsi berikut:

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
sumber
Bagus !!! Anda dapat menyertakan stacksnippet yang menunjukkan ini.
Ismael Miguel
3

PHP, 15 +1 byte

Yang ini mudah BENAR-BENAR lebih sulit dari yang diharapkan, tetapi menyenangkan!
Sayangnya, ini adalah penulisan ulang ke-3 karena jawaban yang tidak valid.

Kali ini, ini dimaksudkan untuk berjalan di konsol (menggunakan parameter -r).

Program A:

echo A;E925Z9A;

Program B:

echo B; zzzzzz;

Hasil XORing:

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

Hex dump:

   |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 akan melempar peringatan tentang memiliki \0dan \3karakter sebelum gema, tetapi itu diabaikan.
Itu hanya peringatan!
Masih berjalan dan menampilkan jawaban yang benar!


Coba jalankan ini, di konsol Anda:

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

Jika tidak bisa, coba salah satu dari ini:

Jika Anda masih tidak bisa, jalankan sendiri kode:

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

Kode lama, tidak valid:

Program A:

<?=A;zzzzz;

Program B:

<?=B;FEG9A;

Hasil XORing:

\0\0\0\0<?=C;\0 //base64: AAAAAwA8Pz1DOwA=
Ismael Miguel
sumber
Saya sebenarnya tidak bisa mengetikkan \x00konsol saya tetapi menggantinya dengan \x03karya dan \x00dalam PHP itu sendiri di server saya masih berjalan jadi saya menganggap jawaban Anda valid sekarang! Saya juga harus menggunakan flag untuk menekan semua kesalahan: php -d error_reporting=0 -r "^C^C^C^C^C^CeCHO C;^C"Output C. Mengarahkan ulang stderr (di 2>bawah Windows) tidak menekan semua kesalahan dari output.
CJ Dennis
Program Anda di konsol Windows: "♥ eCHO C;"!
CJ Dennis
Peringatan @CJDennis selalu diabaikan. Jika itu adalah kesalahan fatal, itu akan menjadi yang terburuk. Tapi saya merasa aneh bahwa itu menghasilkan itu, ketika XORing. Tapi mungkin itu karena \3ada, yang menunjukkan sebagai klub hati. Tapi apakah Anda ingin saya menambahkan -dbendera ke hitungan?
Ismael Miguel
Karena Anda tidak mengalahkan kode GolfScript, jangan khawatir tentang hal itu. Jika Anda menemukan versi 6 byte maka saya harus mempertimbangkan kembali! Tetapi saya harus bekerja sangat keras tanpa mengkonfigurasi ulang file php.ini saya untuk membuatnya bekerja dengan bersih! Saya menyukai cara Windows mengubah \x03hati! Windows ♥ PHP!
CJ Dennis
1
Ya, @berhasil menekan semua kesalahan!
CJ Dennis
3

Pip, 4 byte

Karena user23013 menggunakan ASCII non-cetak di GolfScript, saya pikir saya bisa melakukan hal yang sama di Pip . Memang membutuhkan pengalihan stderr, tapi tidak apa-apa , kan?

SEBUAH

??'A

di mana keduanya ?mewakili karakter ASCII 0.

B

'C'B

C

'C??

di mana keduanya ?mewakili karakter ASCII 0 dan 3, masing-masing.

Tempatkan setiap program dalam file ( A.pipmisalnya). Di Linux, lakukan:

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

Di Windows:

pip.py A.pip 2>nul

Jika output kesalahan adalah verboten, inilah solusi 5-byte dalam ASCII yang dapat dicetak:

pAa'A
 f"B"
P'Cec
DLosc
sumber
Ya, kedua mengarahkan stderr (jelek seperti itu!) Dan menggunakan karakter non-cetak diperbolehkan. Saya menghargai Anda memposting versi yang sepenuhnya dapat dicetak juga!
CJ Dennis
2

Microscript , masing-masing 8 byte

SEBUAH: 'APhgap)

B: 'BPh@" A

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

SuperJedi224
sumber
Saya tidak menyadari begitu banyak bahasa yang sangat memaafkan dengan kode kontrol di sumbernya. Lihatlah jawaban lain, beberapa di antaranya memang menggunakan kode non-cetak. Merasa bebas untuk melakukan hal yang sama!
CJ Dennis
Saya pikir dikatakan tidak menggunakan ASCII non-cetak, tapi saya mungkin salah. EDIT: Dan sekarang saya melihat bahwa Anda telah mengubahnya. Baiklah, saya akan melihat apa yang bisa saya lakukan.
SuperJedi224
1
Bukankah seharusnya begitu <0><3><0><0>...?
CJ Dennis
Kamu benar. Terima kasih telah menunjukkannya.
SuperJedi224
2

Python, 19 15 14 byte

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

Saya datang dengan solusi ini ketika saya memperhatikan bahwa python (2.7.6 pada Ubuntu 14.04) setelah melihat karakter NUL akan mengabaikan sisa baris itu.

Dipersingkat 1 byte setelah saya menyadari bahwa ruang setelah cetak tidak diperlukan. Dan dipersingkat oleh 4 byte lebih setelah saya menyadari bahwa karakter NUL juga menyebabkan baris baru diabaikan sehingga saya dapat menggunakannya untuk memecah baris di tengah kata kunci.

kasperd
sumber
0

Chip , 8 byte

Semua membutuhkan bendera -w.

Program A

a*gt*...

( .adalah karakter nol \x00)

Program B

...*gb*t

( .adalah karakter nol \x00)

Program C

a*g^Mb*t

Baik A dan B masing-masing menghasilkan tiga peringatan (misalnya:) 1:6 WARN: '' (0) is not a valid character, tetapi mereka dapat diabaikan dengan aman karena mereka pergi ke stderr. Elemen ^dan Mvalid, tetapi tidak melakukan apa pun di sini.

Saya cukup yakin bahwa ini adalah yang terbaik yang dapat dilakukan dengan non-cetak diperbolehkan. Saya tidak yakin bukti ini lengkap, tetapi begini:

Sebuah membutuhkan a, g, t, dan beberapa cara untuk mengaktifkan unsur-unsur tersebut (minimal dua simbol yang diperlukan untuk ini, dan *merupakan pilihan yang paling sederhana di sini). Demikian pula,
B membutuhkan b, g, t, dan dua *s, dan
C membutuhkan a, b, g, t, dan dua *s.

Jika C meminjam simbolnya langsung dari A dan B, akan ada dua huruf dan dua *yang tetap tidak diklaim. (Dalam implementasi saya, A tdan B g). Keempat elemen tersebut dapat tumpang tindih sehingga mereka hancur dalam C (berproduksi ^dan Mdalam hal ini). Kami sekarang memiliki dua elemen yang hancur itu, ditambah enam elemen yang diperlukan dari atas (C membutuhkan 6, yang lainnya hanya 5, tetapi kami membutuhkan maks () di sini), untuk total 8 elemen.


Chip (bebas peringatan), 10 byte

Semua membutuhkan bendera -wo.

Program A

a*HH^t*Gg 

(ada ruang tambahan)

Program B

KKb*t*^g G

Program C

*a*b*^t Gg

Ini terbukti yang terbaik yang bisa kita lakukan dalam ASCII yang dapat dicetak, sebagai berikut: Tiga program, gabungan, membutuhkan total 2 as, 2 bs, 3 gs, dan 3 ts. Karena tidak satu pun dari karakter ini dapat bertransisi ke karakter lain, kami memerlukan 2+2+3+3 = 10posisi terpisah.

Phlarx
sumber