XOR зашифрує ваші програми джерелом інших програм


24

Напишіть дві програми таким чином, що коли байти їх вихідного коду є XOR-d разом, це створює третю дійсну програму, все тією ж мовою. Довжина кожної з трьох програм у байтах повинна бути однаковою.

Перша програма повинна вивести A. Друга програма повинна вивести B. Третя програма повинна вивести C.

Новий рядок є необов’язковим, але якщо один виводить новий рядок, обидва інші також повинні.

Якщо ви використовуєте будь-які прапори командного рядка, ви повинні мати однакові для кожної програми, тобто всі три програми повинні виконуватися однаково. Якщо ви використовуєте мову на зразок PHP, яка традиційно починається з тієї ж комбінації символів, наприклад, <?але є параметр командного рядка, який викидає ті символи, які ви можете використовувати замість цього, тобто PHP потрібно запускати лише з командного рядка.

Вхід заборонено. Кожна програма повинна бути автономною.

Якщо ваша програма повністю написана в ASCII, можуть допомогти наступні таблиці:

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

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

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

EDIT

Використовувати символи, що не друкуються , дозволено, оскільки я це прямо не заборонив. Однак якщо ви хочете опублікувати версію, яка також використовує лише символи для друку, це було б чудово! (Оцінка того, хто є найкоротшим.) "Розумний фактор" використання контрольних кодів зараз дещо зношений ...

END EDIT

XOR з будь-яких двох кодів з одного блоку буде створювати код менше 0x20, який не є дійсним кодом ASCII для друку, наприклад 0x41 ( A) XOR 0x5A ( Z) = 0x1B. XOR, якщо будь-які два коди з різних блоків створюють код з третього блоку, наприклад 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  @`

Знайдіть двох символів з різних стовпців і виберіть символу з їх перетину, який знаходиться в іншому стовпчику, наприклад, Bі e: "BbXOR %Eeє 'Gg. Bце другий стовпець , і eце третій стовпець так вибрати символ з першого стовпчика в 'Gg: '.

Приклад джерела:

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

Зауважте, що в кожному стовпці може бути лише одна цифра, одна велика літера та одна мала літера. Для кожного стовпця ви можете використовувати будь-який символ, який вам подобається в першій програмі, тоді ви можете вибрати 64 символи у другій програмі, але лише один можливий символ у третій програмі. 0x7F не діє ніде.

Якщо ви використовуєте Unicode, вам належить перевірити XOR-ін, і ви повинні сказати, як він закодований, наприклад, UTF-8, UTF-16 тощо. Кожен файл повинен використовувати одне і те ж кодування.

Оцінка: Тривалість однієї програми. Виграє небагато байтів!

Відповіді:


13

GolfScript, 6 байт

А

A'AA'|

Б

cdc"B"

С

"C"ce^

|і ^встановлюються set or або xor з порожнім введенням рядка, який би нічого не робив, крім видалення дублікатів у рядку.

Оригінальна версія (із символами, що не друкуються)

А

Xz'A'v

Б

z9\x05"B"

С

"C"ceT

GolfScript ігнорує невизначені речі, а три програми - просто 'A' "B" "C".


12

Javascript, 23 байти

Програма A:

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

Програма B:

alert(FL$RSsYnYW1f='B')

Програма C:

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

Ви можете перевірити перетворення за допомогою наступної функції:

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

Хороший!!! Ви можете включити нарізку, що показує це.
Ісмаїл Мігель

3

PHP, 15 + 1 байт

Цей був легко Справді важче, ніж очікувалося, але весело!
На жаль, це 3-е перезапис через невірні відповіді.

Цього разу мається на увазі запуск у консолі (за допомогою параметра -r).

Програма A:

echo A;E925Z9A;

Програма B:

echo B; zzzzzz;

Результат XORing:

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

Шістнадцятковий дамп:

   |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 буде кидати попередження про наявність \0та \3символів перед відлунням, але це ігнорується.
Це просто попередження!
Він все ще працює і видає правильну відповідь!


Спробуйте виконати це у своїй консолі:

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

Якщо ви не можете, спробуйте одне з таких:

Якщо ви все ще не можете, запустіть код самостійно:

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

Старий код недійсний:

Програма A:

<?=A;zzzzz;

Програма B:

<?=B;FEG9A;

Результат XORing:

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

Я фактично не можу ввести \x00свою консоль, але замінивши їх \x03роботами, а \x00сам PHP на моєму сервері все ще працює, тому я припускаю, що ваша відповідь вірна зараз! Я також повинен був використовувати прапор, щоб придушити всі помилки: php -d error_reporting=0 -r "^C^C^C^C^C^CeCHO C;^C"Виходи C. Перенаправлення stderr ( 2>під Windows) не придушило всіх помилок на виході.
CJ Dennis

Ваша програма на консолі Windows: "♥ eCHO C;"!
CJ Dennis

@CJDennis Попередження завжди не враховуються. Якби це була фатальна помилка, це було б найгірше. Але мені здається дивним, що це виводиться під час XORing. Але, можливо, це через те \3, що там показано як клуб серця. Але ви хочете, щоб я додав -dпрапор до рахунку?
Ісмаїл Мігель

Оскільки ви не перемагаєте код GolfScript, не хвилюйтеся про це. Якщо ви знайдете 6-байтну версію, тоді мені доведеться переглянути! Але мені довелося попрацювати дуже важко, не перенастроюючи файл php.ini, щоб він працював чисто! Мені сподобалось те, як Windows перетворилася \x03на серце! Windows ♥ PHP!
CJ Dennis

1
Так, @вдалося придушити всі помилки!
CJ Dennis

3

Піп, 4 байти

Оскільки user23013 використовує недрукувальний ASCII в GolfScript, я зрозумів, що можу зробити те ж саме в Pip . Це вимагає перенаправлення stderr, але це нормально , правда?

А

??'A

де два ?s представляють символ ASCII 0.

Б

'C'B

С

'C??

де два ?s представляють символи ASCII 0 і 3 відповідно.

Розмістіть кожну програму у файлі ( A.pipнаприклад). У Linux зробіть:

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

У Windows:

pip.py A.pip 2>nul

Якщо вихід помилок є дослідним, ось 5-байтове рішення для друку ASCII:

pAa'A
 f"B"
P'Cec

Так, дозволено як перенаправлення stderr (як неприємно!), Так і використання символів, що не друкуються. Я вдячний, що ви також розмістили повністю версію для друку!
CJ Dennis

2

Мікроскрипт , 8 байт кожен

A: 'APhgap)

B: 'BPh@" A

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


Я не усвідомлював, що так багато мов дуже прощають з контрольними кодами в джерелі. Погляньте на інші відповіді, в деяких з яких використовуються недрукарські коди. Сміливо робіть те саме!
CJ Dennis

Я думав, що це говорить про те, щоб не використовувати недрукувальний ASCII, але я можу помилятися. EDIT: А тепер я бачу, що ви це змінили. Добре, я побачу, що я можу зробити.
SuperJedi224

1
Чи не повинно бути це <0><3><0><0>...?
CJ Dennis

Ти правий. Дякую, що вказали на це.
SuperJedi224

2

Пітон, 19 15 14 байт

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

Я придумав це рішення, коли помітив, що python (2.7.6 на Ubuntu 14.04) після побачення символу NUL проігнорує решту цього рядка.

Скоротившись на 1 байт, як тільки я зрозумів, що пробіл після друку не потрібен. І скоротивши ще на 4 байти, як тільки я зрозумів, що символ NUL також спричиняє ігнорування нового рядка, тому я можу використовувати його для переривання рядків посеред ключового слова.


0

Чіп , 8 байт

Усі вимагають прапор -w.

Програма А

a*gt*...

( .є нульовим символом \x00)

Програма В

...*gb*t

( .є нульовим символом \x00)

Програма С

a*g^Mb*t

І A, і B створюють по три попередження (наприклад:) 1:6 WARN: '' (0) is not a valid character, але їх можна сміливо ігнорувати, оскільки вони переходять до більш жорсткого. Елементи ^і Mсправедливі, але нічого не роблять тут.

Я досить впевнений, що це найкраще, що можна зробити із дозволеними для друку документами. Я не впевнений, що цей доказ закінчений, але ось що:

Вимагає a, g, tі яким - то чином активувати ці елементи ( НЕ менше двох символів, необхідних для цього, і *це найпростіший варіант тут). Аналогічним чином ,
В вимагає b, g, t, і два *з, і
С вимагає a, b, g, t, і два *с.

Якщо C запозичить свої символи безпосередньо з A і B, дві літери та дві *s залишаться незатребуваними. (На мою реалізацію, A tі B g). Ці чотири елементи можна перекривати таким чином, щоб вони були змішані в C (виробляючи ^і Mв цьому випадку). Зараз у нас є ці два стислі елементи, плюс шість необхідних елементів зверху (C потрібно 6, іншим лише 5, але тут нам потрібно max ()), для загальної кількості 8 елементів.


Чіп (без попередження), 10 байт

Усі вимагають прапорів -wo.

Програма А

a*HH^t*Gg 

(є простір)

Програма В

KKb*t*^g G

Програма С

*a*b*^t Gg

Це, мабуть, найкраще, що ми можемо зробити в рамках ASCII для друку, а саме: Трьом програмам разом потрібно всього 2 aс, 2 bс, 3 gс і 3 tс. Оскільки жоден із цих символів не може перейти до іншого, нам потрібні 2+2+3+3 = 10окремі позиції.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.