> <> (ফিশ), 107 106 103 বাইট
<v}:{r&" "
1xv+
2<v+
v}<
<~v!?=&:&:
6.>ol2-?!;a
:{{:}l1-[rv
v2<
<1x|!}:}-1<v!?:{{:o-+
^3<v ~}}r]~<
.40<
এটি অনলাইন চেষ্টা করুন!
এটি সুপার এলোমেলো নয়, তবে এটি এলোমেলো। স্ট্যাকের উপর কেবল স্ট্রিং এবং পূর্ণসংখ্যা স্থাপন করুন (উদাহরণ: "হ্যালো ওয়ার্ল্ড!", 5)
Input: "Hello world!", 5
Output: H^\^]^eceeedldcdeclgfffhowhhfggojkkkkrdccedl]]\]\d
সম্পূর্ণ ব্যাখ্যা
আমি ব্যাখ্যাটি আপডেট না করা পর্যন্ত এটি কোডের একটি সামান্য পুরানো সংস্করণ। এটি বেশিরভাগই সমান, পড়ার জন্য সম্ভবত কিছুটা সহজ:
< v}:{r&" "
+1xv
+2<v
}
:&:<~ v!?=&
?!;a6.>ol2-
:{{:}l1-[rv
v2<
<1x|!}:}-1<v!?:{{:o+*
^3<v ~}}r]~<
.43<
আমরা স্ট্রিং প্যারামিটারটি ভান করব s
এবং পূর্ণসংখ্যা পরামিতিটিi
।
< v}:{r&" "
<
মাছ অবিলম্বে সরাতে বাম, যা কাছাকাছি গোপন বলে " "
, যা একটি স্থান স্ট্যাকে characted যোগ করা হয়েছে। তারপরে মাছগুলি ভ্রমণ করে &
, যা নিবন্ধকে স্থান যুক্ত করে। r
স্ট্যাকটি বিপরীত করে এবং {:}
স্ট্যাকটি বাম দিকে স্থানান্তরিত i
করে ( স্ট্যাকের শেষে রেখে ), স্ট্যাকের শেষে মানটি অনুলিপি করে, তারপরে এটি ডানদিকে স্থানান্তরিত করে। v
মাছটিকে নীচের দিকে যেতে শুরু করতে বলে।
+1xv
+2<v
}
x
মাছটিকে একটি এলোমেলো পথে অগ্রসর হতে বলে, শেষ পর্যন্ত ফলটি ডানদিকে চলে যায় এবং নীচের দিকে অবিরত হয়, 1+
বা 2+
আগে বা আগে যেতে পারে। এগুলি স্ট্যাকের শেষে সংখ্যায় যথাক্রমে 1 বা 2 যোগ করে। যদি মাছটি উপরের দিকে ভ্রমণ করে তবে এটি v
আবার আঘাত করে এবং নীচে ভ্রমণ করে। }
স্ট্যাকটি ডানদিকে স্থানান্তরিত করুন, তারপরে i
স্ট্যাকের 1 নম্বরে এবং এই নতুন ভেরিয়েবলটি পজিশনে 0 (আমরা এটি কল করব m
)।
:&:<~ v!?=&
এই বিভাগটি একটি ফাংশন, আসুন একে হোয়াইটস্পেসট্রিমার বলি । শুরু হয় যেখানে <
। এটি কেবল ফাঁকা স্থানগুলি স্ট্রিপগুলি সরিয়ে দেয় যা স্ট্যাকের শেষে রয়েছে (সুতরাং স্ট্রিংয়ের শুরু) যতক্ষণ না এটি কোনও স্থান ছাড়ানো অক্ষরে না চলে।
সুতরাং সঙ্গে সঙ্গে মাছটি একটিতে সাঁতার কাটবে <
এবং অবশ্যই বাম দিকে ভ্রমণ করবে। এটি তখন প্রবেশ করে:&:&
এটি স্ট্যাকের শেষে মানটি অনুলিপি করে , রেজিস্টার থেকে স্থানটিকে স্ট্যাকের শেষের দিকে রাখে, অনুলিপি করে তারপরে পুনরায় নিবন্ধকের উপরে রাখে।
তারপরে মাছগুলি হিট =?!v ~
, বা আরও নির্দিষ্টভাবে, =
যা স্ট্যাকের বাইরে দুটি দুটি মান (আমরা সবে তৈরি দুটি) প্যাপ করে, তাদের তুলনা করে, সমান হলে স্ট্যাকের শেষে একটি 1 রাখে এবং একটি 0 স্ট্যাকের সমাপ্তি যদি তারা আলাদা হয়। ?
স্ট্যাক শেষে বন্ধ নতুন মান পপ, যদি 0 পরবর্তী নির্দেশ, যা এই ক্ষেত্রে হয় নির্বাহ করে না!
, এটা পরিবর্তে, executes v
, যা আদেশ মাছ নীচের দিকে সরাতে (ফাংশন থেকে প্রস্থান)।
যদি এটি 1 হয় তবে এটি একটি স্থান খুঁজে পেয়েছে, সুতরাং এটি !
ট্রামপোলিন যা কার্যকর করে এবং এর ফলে মাছটি পরবর্তী নির্দেশটি এড়িয়ে যায়, এটি একটি v
, তাই মাছটি অবিরত থাকে। মাছের সামনে, এটি দেখতে পায়~
যা স্ট্যাকের (শেষের দিকে নিশ্চিত হওয়া) শেষ মানটি পপ করতে বলে, তারপরে মাছটি চালিয়ে যায় এবং আবার ফাংশনটি চালায়।
?!;a6.>ol2-
মাছটিকে তাত্ক্ষণিকভাবে একটি দ্বারা সাঁতার কাটতে বলা হয় >
, তারপরে স্ট্যাকের শেষ অক্ষরটি আউটপুট করুন o
(যা এটি প্রথমবার চালানো হয়, এটির প্রথম চরিত্রটি s
)। এটি স্ট্যাকের দৈর্ঘ্য পায়, স্ট্যাকের শেষে l
একটি 2
রাখে, তারপরে -
2 থেকে বিয়োগ হয় l
। এটি হিট করে ?!;
যা, কী ?
করে তা মনে করে, !
স্ট্যাক খালি থাকলে মাছটি এড়িয়ে যায় এবং অবতরণ করে;
, যা প্রোগ্রামটি শেষ করে।
স্ট্যাকটিতে এখনও অক্ষর রয়েছে তা অনুসরণ করে, আমরা কার্যকর করি !
যার ফলে মাছগুলি ঝাঁপিয়ে পড়ে ;
এবং কার্যকর করে a6.
, কোনটি সঞ্চয় করে a
( একে 10
) এবং 6
স্ট্যাকের শেষে, যার জন্য x, y
স্থানাঙ্ক থাকে .
, যা তাদের শেষের বাইরে ফেলে দেয় them স্ট্যাক, তারপরে মাছটিকে টেলিপোর্ট করে10, 6
এবং সেই পোস্টের ডানদিকে নির্দেশনাটি কার্যকর করুন (মাছটি ডানদিকে সাঁতার কাটছে)।
আপনি যখন y
অবস্থানটি অনুধাবন করবেন তখন এটির চেয়ে কম জটিল এটি 6 এর নীচের লাইন। x
অবস্থান 10 তখন v
, এবং এর ডানদিকে
, যা কোনও অপশন নেই। এর ফলে মাছটি ডানদিকে সাঁতার চালিয়ে যেতে পারে এবং লাইনের শুরুতে বাস্তবায়ন শুরু করে ...
:{{:}l1-[rv
v2<
<1x|!}:}-1<v!?:{{:o+*
^3<v ~}}r]~<
.43<
সুতরাং এটি ফাংশন যা অক্ষরগুলির মধ্যে এলোমেলো পাঠ যুক্ত করে। এটি কিছুটা মুখের কথা, তবে এটি এ কারণে যে আমি এটিকে কিছুটা অতিরিক্ত এলোমেলো করার চেষ্টা করেছি। এটি কল করুন জেনারেন্ডমচার্সকে ।
:{{:}l1-[rv
আসলে ফাংশন জন্য সেটআপ, এবং কম-তাই প্রকৃত ফাংশন নিজেই অংশ। মাছ প্রথমে সাঁতার কাটে :{{
যে স্ট্যাকের শেষে মানটি অনুলিপি করে, তারপরে এটি দুটি বার বামে স্থানান্তরিত করে। যদি আপনি মনে করতে পারেন যে i
স্ট্যাকের 1 পজিশনে ছিল, তবে আপনি জানতেনi
এখন স্ট্যাকের শেষে on
মাছগুলি তারপরে :}
কোন অনুলিপিগুলির উপর দিয়ে সাঁতার i
কাটবে এবং স্ট্যাকের i
শুরুতে এবং শেষে উভয় রেখে ডানদিকে স্ট্যাকটি স্থানান্তরিত করে। l1-[
মাছগুলি স্ট্যাকের শেষে দৈর্ঘ্য স্থাপন করে, এটি থেকে 1 টি বিয়োগ করে, তারপরে [
একটি নতুন স্ট্যাক তৈরি করে, চলমান l-1
(স্ট্যাকের দৈর্ঘ্য বিয়োগ 1) মানকে নতুন স্ট্যাকের (তাই কেবলমাত্র i
পুরাতন স্ট্যাকটি রেখে )) তারপরে rv
মাছগুলি কেবল হিট দেয় যা স্ট্যাকটি আবার বিপরীত করে (আমার মনে হয় একটি নতুন স্ট্যাক তৈরির কারণে এটি কোনও কারণে বিপরীত হয়েছে), এবং মাছটিকে আরও একবার নীচে সাঁতার কাটতে আদেশ দেয়, সত্যিকার অর্থে ফাংশনটি শুরু করে<
।
সুতরাং বর্তমানে স্ট্যাকের শেষ হয়েছে m
এবং আমাদের অস্থায়ী i
, যা আমরা কল করব ti
। তত্ক্ষণাত্ মাছটি সাঁতার কাটে 1-}
, যা 1 থেকে 1 টি বিয়োগ ti
করে স্ট্যাকের শুরুতে সরিয়ে দেয়। তারপরে :}
যা কেবল অনুলিপি করে m
এবং স্ট্যাকের শুরুতে রাখে (লাগানো হয়)ti
স্ট্যাকের অবস্থান 1 এ )।
এই যখন আমরা এই ছোট জিনিসটি আঘাত করি:
v2<
<1x|!
^3<
এটি আসলে মৃত সরল। !
মাছ এড়িয়ে যেতে ঘটায় |
এবং চালানো x
। কী x
করে তা মনে করে, আমরা মনে করি এটি মাছটিকে কোনও 4 দিকের দিকে নিয়ে যায়। |
এটি কেবল একটি আয়না, এবং মাছটিকে আবার সাঁতার কাটেx
। সুতরাং মূলত, মাছগুলি স্ট্যাকের শেষের দিকে 1, 2 বা 3 রাখবে এবং বামদিকে অগ্রসর হবে, চারপাশে মোড়ানো।
মাছগুলি তখন সম্পাদন করে *+o
যার ফলে স্ট্যাকের শেষ দুটি মানগুলি পপআপ করা, একসাথে গুণিত করা এবং ফলাফলটি আবার পিছনে ঠেলে দেয়, তারপরে একই জিনিসটি যোগ করার পরে, তারপরে চূড়ান্ত মানটি স্ট্যাকের বাইরে পপ করে এবং আউটপুট হয় o
। আমাদের স্ট্যাকের আবার অপেক্ষাকৃত স্বাভাবিক ধারণকারী মাত্র [ m
, ti
,s
]।
:}}:
স্ট্যাকের শেষে মানটি তৈরি করে (মূলত s
পজিশন 0) ওটি অনুলিপি করা হয়, তারপরে স্ট্যাকটি দু'বার ডানদিকে সরানো হয় ( ti
আবার সামনের দিকে রেখে ), তারপরে ti
অনুলিপি করা হয়। ?!v
এতক্ষণে বুঝতে খুব সহজ হওয়া উচিত। মূলত যদি ti
0 হয় তবে আমরা ফাংশনটি দিয়ে প্রস্থান করব v
, অন্যথায় আমরা সম্পাদন করব !
এবং এড়িয়ে যাবv
(অন্য লুপটি করছে)।
যদি ti
0 হয় এবং আমরা কিছুটা এলোমেলো অক্ষর আউটপুট সম্পন্ন করি, তবে আমরা এক্সিকিউট করে v
দেখি:
v ~}}r]~<
.43<
এখানে খুব অভিনব কিছু না। আমরা ti
স্ট্যাক থেকে মাধ্যমে সরান ~
। তারপরে ]
এটি নতুন, এটি আমাদের সমস্ত মানকে স্ট্যাকের বাইরে ফেলে দেয় এবং এগুলি পুরানো স্ট্যাকের উপরে রাখে! বিপরীত সমস্যার কারণে আমরা বিপরীতr
, তারপর সাথে সঠিক দুইবার স্ট্যাক নামান }}~
, ডানদিকে স্ট্যাক shufting আমাদের দান [ m
, i
, s
], ~
অতিরিক্ত সদৃশ অপসারণ করা হয় s[0]
ফাংশন আগের থেকে আমরা এটা যদি প্রয়োজন চাই আমরা একটি লুপ করছিলাম (তবে আমরা নেই, আমরা প্রস্থান করছি)। v
মাছটিকে সাঁতার কাটতে এবং >34.
ডুবোতে (এক্সিকিউশন অর্ডার দেখানোর জন্য উল্টো) করতে বলে, যা মাছকে কেবল বামে এবং এর মধ্যে সাঁতার কাটতে বলে 3, 4
(কারণ এটি .
একটি লাফ!)। 3, 4
আসলে শুরুর ডানদিকেwhitespaceTrimmer
, যা নিখুঁত কারণ আমরা বামে ভ্রমণ করছি।
এই সমস্ত যুক্তি অনুসরণ করে আমরা মাছ অনুসরণ করতে পারি যতক্ষণ না স্ট্যাক চূড়ান্তভাবে খালি থাকে এবং প্রোগ্রামটি whitespaceTrimmer
কার্যকর হওয়ার ঠিক পরে প্রোগ্রামটি বের হয়।