এনক্রিপ্ট:
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 ভাষায় কার্যকরভাবে মন্তব্য করা হয়েছে comments
এনক্রিপ্ট:
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
কোডিং সরঞ্জাম
এটি উপরের বাকী পোস্টের সাথে সম্পর্কিত নয়, তবে আমি ভেবেছিলাম যে এটি পোস্ট করার কারণে আমি এটি পোস্ট করব: পি
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>