แฮคเกอร์เข้ารหัสโปรแกรมของคุณด้วยแหล่งที่มาของโปรแกรมอื่น ๆ


24

เขียนสองโปรแกรมเช่นเมื่อไบต์ของซอร์สโค้ดของพวกเขาคือ XOR-d ร่วมกันมันจะสร้างโปรแกรมที่สามที่ถูกต้องทั้งหมดในภาษาเดียวกัน ความยาวของแต่ละโปรแกรมในสามไบต์ต้องเหมือนกัน

Aโปรแกรมแรกควรเอาท์พุท Bโปรแกรมที่สองควรเอาท์พุท Cโปรแกรมที่สามควรเอาท์พุท

การขึ้นบรรทัดใหม่เป็นทางเลือก แต่ถ้ามีการสร้างการขึ้นบรรทัดใหม่ทั้งคู่จะต้องทำเช่นกัน

หากคุณใช้การตั้งค่าสถานะบรรทัดคำสั่งใด ๆ คุณต้องเหมือนกันสำหรับแต่ละโปรแกรมนั่นคือทั้งสามโปรแกรมจะต้องดำเนินการในลักษณะเดียวกัน หากคุณใช้ภาษาเช่น PHP ที่เริ่มต้นด้วยการรวมกันของตัวอักษรเช่นเดิม<?แต่มีตัวเลือกบรรทัดคำสั่งที่ลดตัวอักษรเหล่านั้นที่คุณอาจใช้แทนเช่น PHP จะต้องเรียกใช้จากบรรทัดคำสั่งเท่านั้น

ไม่อนุญาตให้ป้อนข้อมูล แต่ละโปรแกรมต้องอยู่ในตัวเอง

หากโปรแกรมของคุณเขียนขึ้นใน ASCII ตารางต่อไปนี้อาจช่วยได้:

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

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

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

แก้ไข

อนุญาตให้ใช้ตัวอักษรที่ไม่ใช่การพิมพ์เนื่องจากฉันไม่ได้ห้ามอย่างชัดแจ้งในตอนแรก อย่างไรก็ตามหากคุณต้องการโพสต์เวอร์ชั่นที่ใช้ตัวอักษรที่พิมพ์ได้และจะดีมาก! (คะแนนใดก็ตามที่สั้นที่สุด) "ปัจจัยที่ชาญฉลาด" ของการใช้รหัสควบคุมได้หมดลงไปแล้ว ...

สิ้นสุดการแก้ไข

XOR-ing สองรหัสจากบล็อกเดียวกันจะสร้างรหัสน้อยกว่า 0x20 ซึ่งไม่ใช่รหัส ASCII ที่พิมพ์ได้ที่ถูกต้องเช่น 0x41 ( A) XOR 0x5A ( Z) = 0x1B XOR-ing สองรหัสจากบล็อกที่ต่างกันจะสร้างรหัสจากบล็อกที่สามเช่น 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: "Bbแฮคเกอร์คือ%Ee เป็นคอลัมน์ที่สองและเป็นคอลัมน์ที่สามเพื่อเลือกตัวอักษรจากคอลัมน์แรกใน:'GgBe'Gg'

ตัวอย่างแหล่งที่มา:

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

โปรดทราบว่าในแต่ละคอลัมน์จะมีได้หนึ่งหลักเท่านั้นตัวอักษรตัวพิมพ์ใหญ่หนึ่งตัวและตัวพิมพ์เล็กหนึ่งตัว สำหรับแต่ละคอลัมน์คุณสามารถใช้อักขระใด ๆ ที่คุณชอบในโปรแกรมแรกจากนั้นเลือก 64 อักขระในโปรแกรมที่สอง แต่มีอักขระที่เป็นไปได้เพียงหนึ่งตัวในโปรแกรมที่สาม 0x7F ไม่ถูกต้องทุกที่

ถ้าคุณใช้ Unicode มันขึ้นอยู่กับคุณที่จะตรวจสอบ XOR-ing และคุณต้องบอกว่ามันถูกเข้ารหัสอย่างไรเช่น UTF-8, UTF-16 ฯลฯ แต่ละไฟล์จะต้องใช้การเข้ารหัสแบบเดียวกัน

คะแนน: ความยาวของหนึ่งโปรแกรม ไบต์ที่น้อยที่สุดจะชนะ!

คำตอบ:


13

GolfScript ขนาด 6 ไบต์

A

A'AA'|

B

cdc"B"

C

"C"ce^

|และ^setwise หรือและ xor ด้วยสตริงอินพุตว่างซึ่งจะไม่ทำอะไรเลยนอกจากลบรายการที่ซ้ำกันในสตริง

รุ่นดั้งเดิม (ที่มีอักขระที่พิมพ์ไม่ได้)

A

Xz'A'v

B

z9\x05"B"

C

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

ทำได้ดีนี่!!! คุณสามารถรวมสแต็คข้อมูลย่อยที่แสดงสิ่งนี้
Ismael Miguel

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

การถ่ายโอนข้อมูล Hex:

   |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 Warnings ถูกเพิกเฉยเสมอ หากเป็นข้อผิดพลาดร้ายแรงมันจะแย่ที่สุด แต่ฉันพบว่ามันแปลกที่มันออกมาเมื่อ XORing แต่นั่นอาจเป็นเพราะที่\3นั่นแสดงให้เห็นว่าเป็นสโมสรของหัวใจ แต่คุณต้องการให้ฉันเพิ่ม-dธงลงในการนับหรือไม่
Ismael Miguel

เนื่องจากคุณไม่ได้ตีรหัส GolfScript ไม่ต้องกังวลกับมัน หากคุณพบรุ่น 6 ไบต์แล้วฉันจะต้องพิจารณาอีกครั้ง! แต่ฉันต้องทำงานหนักมากโดยไม่ต้องกำหนดไฟล์ php.ini ใหม่เพื่อให้มันทำงานได้อย่างหมดจด! ฉันชอบวิธีที่ Windows กลาย\x03เป็นหัวใจ! Windows ♥ PHP!
CJ Dennis

1
ใช่การ@จัดการเพื่อระงับข้อผิดพลาดทั้งหมด!
CJ Dennis

3

Pip, 4 ไบต์

ตั้งแต่ user23013 ใช้ที่ไม่ใช่พิมพ์ ASCII ใน GolfScript ฉันคิดว่าฉันจะทำเหมือนกันในPip มันต้องการการเปลี่ยนเส้นทางstderrแต่ก็ไม่เป็นไรใช่มั้ย

A

??'A

โดยที่ทั้งสอง?s แทนอักขระ ASCII 0

B

'C'B

C

'C??

โดยที่?s สองตัวนั้นแทนอักขระ ASCII 0 และ 3 ตามลำดับ

วางแต่ละโปรแกรมไว้ในไฟล์ ( A.pipตัวอย่าง) บน Linux ให้ทำ:

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

บน Windows:

pip.py A.pip 2>nul

หากเอาต์พุตข้อผิดพลาดเป็น verboten ต่อไปนี้เป็นโซลูชันขนาด 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 ที่ไม่พิมพ์ แต่ฉันอาจผิด แก้ไข: และตอนนี้ฉันเห็นว่าคุณได้เปลี่ยนมัน เอาล่ะฉันจะเห็นสิ่งที่ฉันสามารถทำได้
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"|

ฉันคิดวิธีแก้ปัญหานี้เมื่อฉันสังเกตเห็นว่าหลาม (2.7.6 บน Ubuntu 14.04) หลังจากเห็นตัวละคร NUL จะไม่สนใจส่วนที่เหลือของบรรทัดนั้น

สั้นลง 1 ไบต์เมื่อฉันรู้ว่าไม่จำเป็นต้องใช้พื้นที่ว่างหลังจากการพิมพ์ และสั้นลงอีก 4 ไบต์เมื่อฉันรู้ว่าตัวอักษร NUL ยังทำให้บรรทัดใหม่ถูกละเว้นเพื่อให้ฉันสามารถใช้เพื่อแยกบรรทัดที่อยู่ตรงกลางของคำหลัก


0

ชิป 8 ไบต์

-wทุกคนจำเป็นต้องธง

โปรแกรม A

a*gt*...

( .เป็นตัวละคร null \x00)

โปรแกรม B

...*gb*t

( .เป็นตัวละคร null \x00)

โปรแกรม C

a*g^Mb*t

ทั้ง A และ B สร้างคำเตือนสามคำ (เช่น:) 1:6 WARN: '' (0) is not a valid characterแต่สามารถเพิกเฉยได้อย่างปลอดภัยตั้งแต่ไปที่ stderr องค์ประกอบ^และMถูกต้อง แต่ไม่ทำอะไรที่นี่

ฉันค่อนข้างแน่ใจว่านี่เป็นสิ่งที่ดีที่สุดที่สามารถทำได้หากไม่อนุญาตให้พิมพ์ได้ ฉันไม่แน่ใจว่าหลักฐานนี้เสร็จสมบูรณ์ แต่ที่นี่จะไป:

ต้องa, g, tและวิธีการเพื่อเปิดใช้งานองค์ประกอบเหล่านั้นบางคน (อย่างน้อยสองสัญลักษณ์ที่มีความจำเป็นสำหรับการนี้และ*เป็นตัวเลือกที่ง่ายที่สุดที่นี่) ในทำนองเดียวกัน
B ต้องb, g, tและสอง*s และ
C ต้องa, b, g, tและสอง*s

หาก C ยืมสัญลักษณ์ของมันโดยตรงจาก A และ B จะมีตัวอักษรสองตัวและสองตัว*ที่ไม่มีการอ้างสิทธิ์ (ในการดำเนินการของฉัน A tและ B ของg) องค์ประกอบทั้งสี่นั้นสามารถทับซ้อนกันเพื่อให้ได้รับการ mangled ใน C (การผลิต^และMในกรณีนี้) ตอนนี้เรามีองค์ประกอบสองอันที่ถูกรวมเข้าด้วยกันหกองค์ประกอบที่ต้องการจากด้านบน (C ต้องการ 6 ส่วนอื่น ๆ เพียง 5 แต่เราต้องการ max () ที่นี่) รวมเป็น 8 องค์ประกอบ


ชิป (ปลอดเตือน) 10 ไบต์

-woทุกคนจำเป็นต้องธง

โปรแกรม A

a*HH^t*Gg 

(มีพื้นที่ต่อท้าย)

โปรแกรม B

KKb*t*^g G

โปรแกรม C

*a*b*^t Gg

นี่เป็นสิ่งที่ดีที่สุดที่เราสามารถทำได้ภายใน ASCII ที่พิมพ์ได้ดังนี้โปรแกรมทั้งสามโปรแกรมรวมกันต้องมีทั้งหมด 2 aวินาที 2 bวินาที 3 gวินาทีและ 3 tวินาที เนื่องจากตัวละครเหล่านี้ไม่สามารถเปลี่ยนไปเป็นตัวอื่นได้เราจึงต้อง2+2+3+3 = 10แยกตำแหน่ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.