एन्क्रिप्ट:
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 बाइट्स
यहां कम दिलचस्प संस्करण है, जो इस तथ्य का उपयोग करता है कि निर्देशों के माध्यम से पारित नहीं किया जाता है 2 डी भाषाओं में प्रभावी रूप से टिप्पणियां हैं।
एन्क्रिप्ट:
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>