/o!
\i@/e)q&w[?'`-+k3-n
এটি অনলাইন চেষ্টা করুন!
ইনপুটটি ছোট আকারের হওয়া উচিত। 1
ডলারের শব্দের জন্য মুদ্রণ এবং 0
অন্যথায়।
ব্যাখ্যা
অ্যালিসের টেপ এবং কিছু উন্নত নিয়ন্ত্রণ প্রবাহ দেখানোর সময়। স্বতন্ত্রভাবে পূর্ণসংখ্যা এবং স্ট্রিংগুলির সাথে কাজ করার ক্ষেত্রে মোটামুটি ভাল থাকার পরেও অ্যালিসের ক এর কোনও বিল্ট-ইন নেই) একটি স্ট্রিংয়ের দৈর্ঘ্য নির্ধারণ করে, খ) অক্ষর এবং তাদের কোড পয়েন্টগুলির মধ্যে রূপান্তর। এর কারণ হ'ল এলিসের সমস্ত কমান্ডই মানচিত্রের পূর্ণসংখ্যা বা স্ট্রিংয়ের সাথে স্ট্রিং করে। তবে এগুলির উভয়েরই পূর্ণসংখ্যার সাথে ম্যাপিং স্ট্রিংগুলির প্রয়োজন হবে বা তদ্বিপরীত, সুতরাং এ্যালিসের কোনও একটি মোডে এটি খাপ খায় না।
যাইহোক, এটি স্ট্যাক ছাড়াও, এলিসের একটি টেপও রয়েছে এবং কার্ডিনাল এবং অর্ডিনাল মোড টেপের ডেটা বিভিন্ন উপায়ে ব্যাখ্যা করে
- কার্ডিনাল মোডে এটি ব্রেনফাকের মতো অন্য ভাষা থেকে পরিচিত একটি নিয়মিত টেপ। আপনি প্রতিটি ঘরে একটি করে পূর্ণসংখ্যা সঞ্চয় করতে পারেন এবং আপনি একটি টেপ মাথাটি চারপাশে স্থানান্তর করতে পারেন। টেপটি অসীম দীর্ঘ এবং প্রতিটি কক্ষে প্রাথমিকভাবে একটি -1 ধারণ করে। কক্ষগুলিও সূচিবদ্ধ হয় এবং টেপ শিরোনাম 0 থেকে শুরু হয় ।
- অর্ডিনাল মোডের নিজস্ব টেপ মাথা থাকে (এছাড়াও সূচক 0 থেকে শুরু হয় ) এবং এটি টেপটিকে স্ট্রিংগুলির তালিকা হিসাবে ব্যাখ্যা করে। স্ট্রিংগুলি অক্ষরবিহীন কক্ষ দ্বারা (যেমন কোনও মান যা বৈধ ইউনিকোড কোড পয়েন্ট নয়) দ্বারা সমাপ্ত হয়, বিশেষত -1 । সুতরাং অর্ডিনাল মোডের জন্য, টেপটি প্রথমে খালি স্ট্রিং দিয়ে পূর্ণ হয়।
এই টেপটি উপরের উভয় ক্রিয়াকলাপের জন্য ব্যবহার করা যেতে পারে: একটি স্ট্রিং দৈর্ঘ্য পেতে, আমরা টেপটিকে অর্ডিনাল মোডে লিখি, কার্ডিনাল মোডে টার্মিনেটিং -1 অনুসন্ধান করি এবং টেপ মাথার অবস্থান পুনরুদ্ধার করি। অক্ষরগুলিকে তাদের কোড পয়েন্টগুলিতে রূপান্তর করতে, আমরা কেবল এটিকে কার্ডিনাল মোডে টেপ থেকে পড়ি।
এই সমাধানটিতে ব্যবহৃত অন্য দুটি গুরুত্বপূর্ণ বৈশিষ্ট্য হ'ল রিটার্ন স্ট্যাক এবং একটি পুনরাবৃত্তকারী। অ্যালিসের একটি রিটার্ন স্ট্যাক থাকে যা জাম্প কমান্ডটি ব্যবহার করার সময় সাধারণত ভরাট হয় j
এবং যা দিয়ে আপনি পিছনে পিছনে যেতে কোনও ঠিকানা পপ করতে পারেন k
। তবে এটির সাথে বর্তমানের ঠিকানাটি কোথাও না লাফিয়ে রিটার্ন স্ট্যাকের দিকে ধাক্কা দেওয়া সম্ভব w
। যদি আমরা পুনরাবৃত্তি কমান্ডের w
সাথে একত্রিত হই , আমরা বর্তমান ঠিকানাটিকে রিটার্ন স্ট্যাকের সাথে n বারে ঠেলে দিতে পারি । এখন প্রতিবার পৌঁছানোর পরে , একটি অনুলিপি রিটার্ন স্ট্যাকের পপ আপ হয়ে যায় এবং আমরা এর থেকে অন্য পুনরাবৃত্তিটি সম্পাদন করি (এর পরে সেল শুরু করে, কারণ আইপি অন্য কমান্ড কার্যকর করার আগে চালিত করে)। যখন ফিরতি স্ট্যাক খালি হয়ে যায়,&
k
w
k
কিছুতেই কিছু করে না এবং আইপি সহজেই এর মধ্য দিয়ে যায়। সুতরাং &w...k
একটি পূর্ণসংখ্যা n পপ করে এবং তারপরে ...
n + 1 বার চালিত করে , যা আমাদেরকে একটি সাধারণ for
লুপটি প্রকাশ করার জন্য একটি খুব সংক্ষিপ্ত উপায় দেয় ।
কোড নিজেই ...
/ Reflect to SE. Switch to Ordinal.
i Read the input word as a string.
Bounce off bottom boundary, move NE.
! Store the input word on the tape.
Bounce off top boundary, move SE.
/ Reflect to E. Switch to Cardinal.
e Push -1.
) Seek right on the tape for a -1, which finds the -1 terminating
the input word.
q Push the tape head's position, which gives us the string length N.
&w Repeat this loop n+1 times (see above for an explanation)...
[ Move the tape head left by one cell.
? Retrieve the code point of the character in that cell.
'` Push 96.
- Subtract it from the code point to convert the letters to 1...26.
+ Add the result to a running total. This total is initialised to
zero, because in Cardinal mode, the stack is implicitly filled with
an infinite amount of zeros at the bottom.
k End of loop.
Note that the above loop ran once more than we have characters in the
string. This is actually really convenient, because it means that we've
added a "-1 character" to the running total. After subtracting 96 to
convert it to its "letter value" this gives 97. So dollar words will
actually result in 100 - 97 = 3, which we can check against for one
byte less than for equality with 100.
3- Subtract 3 to give 0 for dollar words.
n Logical NOT. Turns 0 (dollar words) into 1 and everything else into 0.
The IP wraps around to the beginning of the first line.
\ Reflect to NE. Switch to Ordinal.
o Implicitly convert the result to a string and print it.
Bounce off top boundary, move SE.
@ Terminate the program.