আমি গর্বের সাথে পরিচয় করিয়ে দিচ্ছি ...
<}74}}:23}29}59}}}}}}}:111_}}}}:::::::23_}:111
? @
:" }}_47}_95 3""""""""(
_ : } _ } {=}
2 23_}29_ _ ; : \
0 ; 3 +_( 3_" 60{ .{.{.
"-_95:}}"" 2 0 ) 2 " _ _ {
"" _ : 2 _ ."(; } 3 .{
;_92}_47} : _ 0 = : * ;
: "" 2 {.{{ . -""(
}}:59_}}:::: "";_ . { _ "
} " {.{.{. 32.
}}}_95:}}}}_20-
... আমার নতুন দ্বি-মাত্রিক এলসোং ল্যাবরেথ! উপরের কোডটি অবিশ্বাস্যরকমভাবে গল্ফ হয় না (এখানে ১1১ টি স্পেস এবং 25 এনওপি রয়েছে, সুতরাং আরও ভাল লেআউটটি এটি অনেকটা সংক্ষিপ্ত করতে পারে), তবে কমপক্ষে আমি দেখাতে সক্ষম হয়েছি যে ভাষাটি তুচ্ছ-তুচ্ছ কাজের জন্য ব্যবহারযোগ্য। :)
কিভাবে এটা কাজ করে
প্রথমত, ভাষার একটি দ্রুত সংক্ষিপ্ত বিবরণ:
- ল্যাবরেথ দুটি স্ট্যাকের উপর পরিচালিত হয়, প্রধান এবং সহায়ক , যা স্বেচ্ছায় স্বাক্ষরিত পূর্ণসংখ্যার ধারণ করতে পারে। উভয় স্ট্যাকের নীচে রয়েছে অসীম পরিমাণ শূন্য।
- কমান্ডগুলি 2D গ্রিডের স্বতন্ত্র অক্ষর এবং এগুলি একটি গোলকধাঁধা তৈরি করে (এটি অজানা অক্ষর, বিশেষত স্পেসগুলি দেয়াল হয়)।
"হ'ল একটি এনওপি যা কোনও প্রাচীর নয় এবং কোডের কয়েকটি নির্দিষ্ট রাস্তায় প্যাডিংয়ের জন্য সহায়ক হতে পারে। অন্যান্য অনেক 2 ডি ভাষার বিপরীতে, প্রান্তগুলি প্রায় মোড়ানো হয় না ।
- নির্দেশ পয়েন্টার (আইপি) প্রথম নন-ওয়াল অক্ষর (পঠন ক্রমে) ডান দিকে সরানো শুরু হয়।
@প্রোগ্রামটি সমাপ্ত করে।
- যদি সম্ভব হয়, আইপি করিডোরগুলি অনুসরণ করে (বাঁকের চারপাশেও)। আইপি-তে সরানোর জন্য যদি একাধিক কোষ থাকে তবে মূল স্ট্যাকের শীর্ষটি নেতিবাচক হলে এটি সাধারণত বাম দিকে ঘুরতে থাকে, শূন্য হলে সোজা এগিয়ে যান, বা এটি ইতিবাচক হলে ডানদিকে ফিরে যান। আইপি যখন দেয়ালে আঘাত করে তখন দিকটি বিপরীত হয়। (আরও কয়েকটি সূক্ষ্মতা রয়েছে, তবে তাদের এই কোডটির পক্ষে কোন গুরুত্ব দেওয়া উচিত নয়)) নিয়ন্ত্রণ প্রবাহ বাস্তবায়নের একমাত্র উপায় এটি।
- গাণিতিক এবং স্ট্যাক ম্যানিপুলেশন কমান্ডগুলি ছাড়াও উত্স কোডটি রান কালে চারটি কমান্ডের সাহায্যে সংশোধন করা যায়
>v<^যা উত্স কোডের একটি সারি বা কলামটি ঘূর্ণায়মানভাবে একটি ঘর দ্বারা স্থানান্তরিত হবে। কোন সারি বা কলামটি প্রভাবিত হয়েছে তা স্ট্যাকের শীর্ষের উপর নির্ভর করে। যদি আইপির নিজস্ব সারি বা কলামটি স্থানান্তরিত হয় তবে এটি শিফ্টের সাথে সরে যাবে। এটি উত্স কোডের এক প্রান্ত থেকে অন্য প্রান্তে ঝাঁপিয়ে পড়া সম্ভব করে।
এখন এই নির্দিষ্ট চ্যালেঞ্জের জন্য, অ্যালগরিদমের সাধারণ ধারণাটি এখানে:
/ \_o oo oসহায়তার স্ট্যাকের উপরে গাড়িগুলির প্রান্তটি বোতামগুলি (অর্থাত্ ) পর্যন্ত ধাক্কা দিন ।
- ইনপুটটি পড়ুন এবং ধাক্কা দেওয়ার জন্য
__বা /\পরবর্তীটি নির্ধারণ করুন ।
- সহায়ক বাকী
__ __ _/ \স্ট্যাকের উপরের গাড়িগুলি (যেমন এবং দুটি শীর্ষস্থানীয় স্থান) পুশ করুন ।
- সর্বাধিক মান ইনপুট ক্ল্যাম্প করুন
20, আসুন এই এন কল করুন ।
- এখন নিম্নলিখিত 3 বার করুন:
- এন স্পেস প্রিন্ট করুন ।
- 6 সঞ্চিত অক্ষর মুদ্রণ করুন।
- 60 - 3 * এন স্পেস মুদ্রণ করুন ।
- 6 সঞ্চিত অক্ষর মুদ্রণ করুন।
- একটি নতুন লাইন প্রিন্ট করুন।
পরিশেষে, আসুন কোডের কিছু অংশ দেখুন। আইপি গ্রিড শিফটিং কমান্ডের উপরের বাম কোণে শুরু হয়। মূল স্ট্যাকের শীর্ষটি 0(যা আপেক্ষিক সূচক হিসাবে ব্যবহৃত হয়), তাই প্রথম সারিতে বামে স্থানান্তরিত হয়, যা আইপিটিকে গ্রিডের ডান প্রান্তে নিয়ে যায়। এখন প্রথম সারিটি ডান থেকে বামে সহজেই সম্পাদন করা হয় যা সহায়ক অক্ষরের প্রথম সেটটিকে ধাক্কা দেয়:
}74}}:23}29}59}}}}}}}:111_}}}}:::::::23_}:111<
আপনি প্রচুর পরিমাণে রৈখিক কোড দিয়ে শুরু করতে চাইলে এই সারিটি স্থানান্তর গল্ফিংয়ের জন্য কার্যকর।
এরপরে আমরা ইনপুটটি পড়ি এবং সঠিক বোনেটগুলি চাপি:
?
:"
_
2
0 ;
"-_95:}}""
"" _
;_92}_47}
তিনটি এনওপি সহ বাম দিকের বিটটি শীর্ষ শাখায় নেতিবাচক ফলাফল এবং নীচের শাখায় অ-নেতিবাচক ফলাফল প্রেরণ করে। ডানদিকে তারা আবার একসাথে যোগদান করেছে।
এখন আরও একটি বৃহত রৈখিক বিভাগ অনুসরণ করা হয়েছে (যা সম্ভবত অন্য সারি-শিফটিং ট্রিক দিয়ে প্রচুর গল্ফ করা যেতে পারে):
}}_47}_95
: }
23_}29_ _
3
2
:
:
:
}}:59_}}::::
}
}}}_95:}}}}
এটি সহায়ক বাকী স্ট্যাকের উপরের গাড়িগুলিকে ধাক্কা দেয়।
এর পরে, আমরা গণনা করব min(20, input), যা প্রথম শাখার অনুরূপ:
;
+_(
0 )
2 _
_ 0
"" 2
"";_
"
_20-
অবশেষে, আমাদের কাছে লুপ রয়েছে যা লাইনগুলি প্রিন্ট করতে তিনবার চলে। লুপের প্রতিটি পুনরাবৃত্তিতে শূন্যস্থানগুলি মুদ্রণের জন্য দুটি ছোট (3x3) লুপ থাকে, পাশাপাশি সহায়ক স্ট্যাক থেকে 6 টি অক্ষর মুদ্রণের জন্য দুটি বিভাগ রয়েছে:
@
3""""""""(
_ } {=}
: \
3_" 60{ .{.{.
2 " _ _ {
."(; } 3 .{
= : * ;
{.{{ . -""(
. { _ "
{.{.{. 32.
একটি নিফটি ট্রিক যার দিকে আমি দৃষ্টি আকর্ষণ করতে চাই তা হ'ল .{.{.ডান প্রান্তে। এটি একটি শেষ প্রান্ত, সুতরাং শেষেটি বাদে .কোডটি দু'বার কার্যকর করা হয়, একবার এগিয়ে এবং একবার পিছনে। এটি প্যালিনড্রমিক কোড সংক্ষিপ্ত করার একটি ঝরঝরে উপায় দেয় (ক্যাচটি হ'ল আপনাকে নিশ্চিত করতে হবে যে পুনরায় মৃতের শেষের সময় প্রস্থান করার সময় আইপি সঠিকভাবে মোড় নিচ্ছে)।
/ \বিপরীতে বোনেটগুলি আপ করার পরে_ _?