কিউবিক্স, 33 32 বাইট
u*.$s.!(.01I^<W%NW!;<,;;q+p@Opus
নেট ফর্ম:
u * .
$ s .
! ( .
0 1 I ^ < W % N W ! ; <
, ; ; q + p @ O p u s .
. . . . . . . . . . . .
. . .
. . .
. . .
এটি অনলাইন চেষ্টা করুন!
নোট
- ১ 170০ পর্যন্ত ইনপুট সহ এবং আরও বেশি ইনপুট সহ কাজ করে, ফলে অসীম লুপ তৈরি হয় কারণ তাদের ফ্যাক্টরিয়াল
Infinity
সংখ্যাটি দেয় (প্রযুক্তিগতভাবে বলতে গেলে এটি উইন্ডো অবজেক্টের একটি অ-রচনীয়, অ-গণনাযোগ্য এবং কনফিগারযোগ্য সম্পত্তি নয়)।
- যথাযথতা ইনপুট 19 এবং ততোধিকের জন্য হারিয়ে গেছে, কারণ 2 53 53 (= 9 007 199 254 740 992) এর বেশি সংখ্যক সঠিকভাবে জাভাস্ক্রিপ্টে সংরক্ষণ করা যায় না।
ব্যাখ্যা
এই প্রোগ্রাম দুটি লুপ নিয়ে গঠিত। প্রথমটি ইনপুটটির ফ্যাক্টরিয়াল গণনা করে, অন্যটি ফলাফলটিকে তার অঙ্কগুলিতে বিভক্ত করে এবং সেগুলি একসাথে যুক্ত করে। তারপরে যোগফলটি মুদ্রিত হয় এবং প্রোগ্রামটি শেষ হয়।
শুরু
প্রথমত, আমাদের স্ট্যাক প্রস্তুত করা দরকার। এই অংশের জন্য, আমরা প্রথম তিনটি নির্দেশাবলী ব্যবহার করি। পূর্ব দিকে নির্দেশ করে চতুর্থ লাইনে আইপি শুরু হয়। স্ট্যাক খালি।
. . .
. . .
. . .
0 1 I . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . .
. . .
. . .
আমরা যোগফলটিকে স্ট্যাকের একেবারে নীচে রেখে দেব, সুতরাং আমাদের স্ট্যাকের নীচে রেখে স্টোর 0
করে যোগফলটি দিয়ে শুরু করা দরকার । তারপরে আমাদের একটি ধাক্কা দেওয়া দরকার 1
, কারণ ইনপুটটি প্রথমে এর আগে সংখ্যাটি দিয়ে গুন করা হবে। এটি যদি শূন্য হয়, তবে ঘটনাবহুল সর্বদা শূন্যের ফলাফল দেয়। শেষ পর্যন্ত আমরা পূর্ণসংখ্যা হিসাবে ইনপুটটি পড়ি।
এখন, স্ট্যাকটি রয়েছে [0, 1, input]
এবং আইপিটি পূর্বদিকে নির্দেশ করে চতুর্থ লাইনে, চতুর্থ কলামে রয়েছে।
কারখানা লুপ
এই সহজ লুপ যে তা বৃদ্ধি পায় শীর্ষ স্ট্যাক (পূর্ববর্তী লুপ এবং ইনপুট ফল দুই উপাদান - এন, এবং তারপর ইনপুট decrements তা ভঙ্গ যখন ইনপুট ছুঁয়েছে 0.। $
নির্দেশ এড়িয়ে যেতে আইপি ঘটায় u
- লুপটি কিউবের নীচের অংশ The আইপি চতুর্থ লাইনে, চতুর্থ কলামে শুরু হয়।
u * .
$ s .
! ( .
. . . ^ < . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . .
. . .
. . .
^
চরিত্রের কারণে, আইপি তত্ক্ষণাত উত্তর দিকে যেতে শুরু করে। তারপরে u
আইপিটি ঘুরিয়ে দেয় এবং এটিকে ডান দিকে সরায়। নীচে, আরও একটি তীর রয়েছে: <
আইপিটিকে পিছনে চিহ্নিত করে ^
। স্ট্যাকটি শুরু হয় [previousresult, input-n]
যেখানে n
পুনরাবৃত্তির সংখ্যা। নিম্নলিখিত অক্ষরগুলি লুপে সম্পাদিত হয়:
*s(
* # Multiply the top two items
# Stack: [previousresult, input-n, newresult]
s # Swap the top two items
# Stack: [previousresult, newresult, input-n]
( # Decrement the top item
# Stack: [previousresult, newresult, input-n-1]
তারপরে স্ট্যাকের শীর্ষটি (হ্রাস করা ইনপুট) নির্দেশের বিরুদ্ধে পরীক্ষা 0
করা হয় !
, এবং যদি তা হয় 0
তবে u
অক্ষরটি এড়িয়ে যায়।
অঙ্কগুলি যোগ করুন
আইপি ঘনক্ষেতের চারপাশে মোড়ানো, চতুর্থ লাইনের একেবারে শেষ চরিত্রের শেষে শেষ দিকে পশ্চিম দিকে নির্দেশ করছে। নিম্নলিখিত লুপটিতে প্রায় সমস্ত অক্ষর রয়েছে:
. . .
. . .
. . .
. . . . . W % N W ! ; <
, ; ; q + p @ O p u s .
. . . . . . . . . . . .
. . .
. . .
. . .
লুপটি প্রথমে স্ট্যাক থেকে শীর্ষ আইটেমটি মুছে ফেলে (যা হয় হয় 10
বা হয় 0
) এবং তারপরে ফ্যাক্টরিয়ালটির ফলাফলের মধ্যে কী রয়েছে তা পরীক্ষা করে। যদি এটি হ্রাস পেয়ে থাকে 0
তবে স্ট্যাকের নীচে (যোগফল) মুদ্রণ করা হয় এবং প্রোগ্রামটি বন্ধ হয়ে যায়। অন্যথায়, নিম্নলিখিত নির্দেশাবলী কার্যকর করা হয় (স্ট্যাক হিসাবে শুরু হয় [oldsum, ..., factorial]
):
N%p+q;;,s;
N # Push 10
# Stack: [oldsum, ..., factorial, 10]
% # Push factorial % 10
# Stack: [oldsum, ..., factorial, 10, factorial % 10]
p # Take the sum to the top
# Stack: [..., factorial, 10, factorial % 10, oldsum]
+ # Add top items together
# Stack: [..., factorial, 10, factorial % 10, oldsum, newsum]
q # Send that to the bottom
# Stack: [newsum, ..., factorial, 10, factorial % 10, oldsum]
;; # Delete top two items
# Stack: [newsum, ..., factorial, 10]
, # Integer divide top two items
# Stack: [newsum, ..., factorial, 10, factorial/10]
s; # Delete the second item
# Stack: [newsum, ..., factorial, factorial/10]
factorial/10
0 এর সমান হওয়া পর্যন্ত লুপটি আবার শুরু হয় ।
n>21