:?
:
#/)
\ #
!"*@
"
এটি অনলাইন চেষ্টা করুন!
এটি ফলাফলগুলি C, B, A
লাইনফিড দ্বারা পৃথক করা ক্রমে ফলাফলকে আউটপুট করে ।
ব্যাখ্যা
যথারীতি, একটি সংক্ষিপ্ত ভিজিটর প্রাইমার:
- ল্যাবরেথে দুটি নির্বিচার-নির্ভুলতা পূর্ণসংখ্যার প্রধান , প্রধান এবং অক্স (আইলিয়ারি) থাকে, যা প্রাথমিকভাবে একটি (অন্তর্নিহিত) অসীম পরিমাণ জিরো দিয়ে পূর্ণ হয়। আমরা এই উত্তরের জন্য কেবল প্রধান ব্যবহার করব ।
- উত্স কোডটি একটি গোলকধাঁধার অনুরূপ, যেখানে নির্দেশিকা পয়েন্টার (আইপি) করিডোরগুলি অনুসরণ করে যখন এটি করতে পারে (এমনকি কোনও কোণেও)। কোডটি পাঠের ক্রমে প্রথম বৈধ অক্ষর থেকে শুরু হয়, এই ক্ষেত্রে শীর্ষ বাম কোণে। আইপি যখন কোনও ফর্মের সংযোগে আসে (অর্থাত্ এটি থেকে আসা কয়েকটি সংলগ্ন ঘর), এটি মূল স্ট্যাকের শীর্ষের ভিত্তিতে একটি দিক বাছাই করবে। প্রাথমিক নিয়মগুলি হ'ল: নেতিবাচক হলে বাম দিকে ঘুরুন, শূন্যের দিকে এগিয়ে যেতে থাকুন, ইতিবাচক হলে ডানদিকে ঘুরুন। এবং যখন এর মধ্যে কোনওটি সম্ভব না হওয়ায় একটি প্রাচীর রয়েছে, তখন আইপি বিপরীত দিকটি গ্রহণ করবে। মৃত প্রান্তগুলিতে আঘাত করার সময় আইপিও ঘুরিয়ে দেয়।
দুটি নো-অপ্স ( "
) যা লেআউটটিকে কিছুটা অপ্রয়োজনীয় মনে করে, তবুও আমি এই সমাধানটি নিয়ে বেশ খুশি, কারণ এর নিয়ন্ত্রণ প্রবাহটি আসলে বেশ সূক্ষ্ম।
আইপি :
ডানদিকে যাচ্ছে উপরের বাম কোণে শুরু হয় । এটি তাত্ক্ষণিকভাবে একটি মৃত প্রান্তকে আঘাত করবে ?
এবং ঘুরে দাঁড়াবে, যাতে প্রোগ্রামটি কোডের এই লিনিয়ার টুকরা দিয়ে শুরু করে:
: Duplicate top of main stack. This will duplicate one of the implicit zeros
at the bottom. While this may seem like a no-op it actually increases
the stack depth to 1, because the duplicated zero is *explicit*.
? Read n and push it onto main.
: Duplicate.
: Duplicate.
তার মানে এখন আমরা n
মূল স্ট্যাকের তিনটি অনুলিপি পেয়েছি , তবে এর গভীরতা 4
। এটি সুবিধাজনক কারণ এর অর্থ আমরা ইনপুটটির অনুলিপিগুলির সাথে কাজ করার সময় বর্তমান গুণকটি পুনরুদ্ধার করতে গভীরতার স্ট্যাক করতে পারি।
আইপি এখন একটি (ঘড়ির কাঁটা) 3x3 লুপে প্রবেশ করে। নোট করুন #
, যা স্ট্যাকের গভীরতার দিকে ধাক্কা দেয়, সর্বদা একটি ধনাত্মক মানকে এমনভাবে ঠেলে দেবে যে আমরা জানি যে আইপি সর্বদা এই সময়ে পূর্ব দিকে ঘুরবে।
লুপ বডিটি হ'ল:
# Push the stack depth, i.e. the current multiplier k.
/ Compute n / k (rounding down).
) Increment.
# Push the stack depth again (this is still k).
* Multiply. So we've now computed (n/k+1)*k, which is the number
we're looking for. Note that this number is always positive so
we're guaranteed that the IP turns west to continue the loop.
" No-op.
! Print result. If we've still got copies of n left, the top of the
stack is positive, so the IP turns north and does another round.
Otherwise, see below...
\ Print a linefeed.
Then we enter the next loop iteration.
লুপটি !
তিনবার ট্র্যাভার করার পরে , সমস্ত অনুলিপি n
ব্যবহার করা হয় এবং নীচের শূন্যটি প্রকাশিত হয়। "
নীচে নীচের অংশের কারণে (যা অন্যথায় বেশ অকেজো বলে মনে হচ্ছে) এই অবস্থানটি একটি জংশন। স্ট্যাকের উপরে একটি শূন্যের অর্থ, আইপিটি সরাসরি (পশ্চিম) এগিয়ে যাওয়ার চেষ্টা করে, তবে একটি প্রাচীর থাকার কারণে এটি আসলে 180 ডিগ্রি ঘুরিয়ে দেয় এবং পূর্বদিকে চলে যায় যেন এটি কোনও শেষ প্রান্তে এসে পড়েছে।
ফলস্বরূপ, নিম্নলিখিত বিটটি এখন কার্যকর করা হয়েছে:
" No-op.
* Multiply two zeros on top of the stack, i.e. also a no-op.
The top of the stack is now still zero, so the IP keeps moving east.
@ Terminate the program.
C B A
) যদি উত্তরটিতে এটি স্পষ্টভাবে নির্দিষ্ট করা থাকে?