การเข้ารหัสลับ:
ffii{{~~__:0a('0'*!.0a('0'*22(!'(~$~_:}-}$-a*}+{{if~~:i:0({}?;__:{}84{}*__({}?\__:{} _{}70{}g_{})_{}?\4__{}8*-_{}+{}80{}g_%4_{}8*{}+\\sl||||||||||||||||||||||||||||9||||||||||||||9||||||||||||||||||||||||||||||||||||||||||||||||||||9
> > >!;7f7-_{}!%_{}!<872-d_{}!&_{}!<[755(7(%~~_{}!<[55(7(_{}!*!*23a(_{}!'_{}!"55(7((~~_{}~~~o__'4'0.{{{o,
ถอดรหัส:
iill~~""bb=3d+*3*-$13d+*3*-55+$*+"'"b=!0!'0d-!.~~li""=l=3+~!B>bb=~!;7~!-bb+~!B_bb=~!#b~!:3~!jb~!,b~!B_7bb~!;-0b~!.~!;3~!jb(7b~!;-~!.__vo < < <
##############################################################################A######################A##############################A$>:i:0b~!$(b~!$?;:50gb~!$)b~!$?^:88+:+(""b~!$?^88+:+b~!$-$-56d+b~!$*b~!$%88+:++""b~!"""rbb*7*31~~~r/
โปรแกรมสองโปรแกรมนั้นถูกชดเชยด้วย 3 และพวกเขารับอินพุตของแบบฟอร์ม:
<2-digit offset> <text>
ชดเชยต้องเป็นตัวเลข 2 หลักเพื่อชดเชย 5 05
ความต้องการที่จะเข้ามาเป็น
นี่คือการส่งนาน แต่เกือบทั้งหมดตัวอักษรที่ไม่ใช่ฟิลเลอร์จะถูกใช้โดยทั้งสองโปรแกรม มีพื้นที่ว่างมากมายที่สามารถเล่นกอล์ฟได้อย่างแน่นอน แต่ฉันคิดว่าโปรแกรมนี้น่าสนใจมากขึ้นด้วยวิธีนี้
ภาพนี้เน้นตัวอักษรที่ใช้โดยโปรแกรมทั้งสอง
คำอธิบาย
โครงสร้างหลักที่ทำให้สิ่งนี้เป็นไปได้คือ_{} -> b~!
ซึ่งยอมให้มีการข้ามตัวอักษรในโปรแกรมถอดรหัส อย่างไร?
Encrypt:
_ : Mirror, but is a no-op if the program flow is horizontal
{ : Shift stack left
} : Shift stack right
Decrypt:
b : Push 11 to stack
~ : Pop top of stack
! : Skip the next instruction
สรุปแล้วโปรแกรมเข้ารหัสไม่ทำอะไรเลย แต่โปรแกรมถอดรหัสจะข้ามคำสั่งถัดไป จากนั้นสามารถขยายไปถึง_{}! -> b~!$
ซึ่งอนุญาตให้ข้ามตัวอักษรในโปรแกรมเข้ารหัสแทนโดยพลการ
นอกเหนือจากนี้ส่วนที่เหลือของโปรแกรมส่วนใหญ่คือการกดตัวเลขดำเนินการกับตัวเลขเหล่านั้นแล้วหาวิธีที่จะป๊อปอัพพวกเขา ตัวอย่างเช่นหนึ่งโครงสร้างที่มีประโยชน์คือ~~ -> ""
ซึ่งจะปรากฏสองค่าสำหรับโปรแกรมเข้ารหัส แต่ไม่มีอะไรในโปรแกรมถอดรหัส
> <>, 149 ไบต์
นี่คือเวอร์ชันที่น่าสนใจน้อยกว่าซึ่งใช้ความจริงที่ว่าคำแนะนำที่ไม่ผ่านเป็นความคิดเห็นที่มีประสิทธิภาพในภาษา 2D
การเข้ารหัสลับ:
i68*:@-a*i@@-+i~v
4:v?)g31:;?(0:i:/8
(?v48*-+03g%48*+\*
_~\of0. .1+1fo/
j*+:zq<6B99A6=qz6g
53Ji?C58/8;?r0?C5:
C?EiJ4r?<EFJ3;EtEg
:tAC5EK8l5tKK86t*i
ถอดรหัส:
^+-~/5"V~^55" ^sk
)/k4}\(&/04|%/^/$-
|4k)-~" %(\y)-~ Q~
TsQd[%#ttt#& &[d$
_~ /of1+7..6+2fo+\
*(?^48*-$-04g%48*/
84:^?)g41:;?(0:i:\
/i68*:@-a*i@@-+i~^
โปรแกรมสองโปรแกรมนั้นถูกชดเชยด้วย 84 และใช้วิธีป้อนข้อมูลแบบเดียวกับด้านบน คำสั่งแรกตัดสินใจเลือกครึ่งหนึ่งของโปรแกรมที่จะดำเนินการโดยi
(อินพุต) บำรุงรักษาโปรแกรมไหลในโปรแกรมเข้ารหัสและ^
เปลี่ยนเส้นทางโปรแกรมขึ้น (วนรอบและกลับจากด้านล่าง) ในโปรแกรมถอดรหัส
คำอธิบาย
สำหรับครึ่งหนึ่งที่เกี่ยวข้องของโปรแกรมเข้ารหัส (โปรแกรมถอดรหัสคล้ายกัน):
i read first input digit as char
68*:@-a* subtract 48 (ASCII "0") and multiply by 10, keeping another 48 on the stack
i read second input digit as char
@@-+ subtract 48 and add to 10*(first digit), giving the offset
i~ read in space and discard it
--- LOOP ---
: copy the offset
i: read input char
:0)?; check if less than 0 (i.e. EOF) and terminate if so
:13g)?v check if greater than ~ in cell (1,3) and drop down if so
48*(?v check if less than 32 and drop down if so
48*-+03g%48*+ calculate Caesar shift of the char, fetching 95 from (0,3)
of1+1. repeat loop
of0. repeat loop
เครื่องมือการเข้ารหัส
สิ่งนี้ไม่เกี่ยวข้องกับส่วนที่เหลือของโพสต์ด้านบน แต่ฉันคิดว่าฉันจะโพสต์สิ่งนี้เพราะฉันต้องใช้: P
for(var i=0;i<95;++i){var option=document.createElement("option");option.text=i;document.getElementById("offset").add(option)};function update(m){if(m==1)var code=document.getElementById("in").value;else var code=document.getElementById("out").value;var offset=parseInt(document.getElementById("offset").value);var output="";for(var i=0;i<code.length;i++){var n=code[i].charCodeAt(0);if(n<32||n>127)output+=code[i];else{var c=(n-32+offset*m)%95;output+=String.fromCharCode(c<0?c+95+32:c+32)}}if(m==1)document.getElementById("out").value=output;else document.getElementById("in").value=output};
<html><body><textarea id="in" onkeyup="update(1)" rows=5 style="width:100%"></textarea><textarea id="out" rows=5 style="width:100%" onkeyup="update(-1)"></textarea><select id="offset" onchange="update(1)"></select></body></html>