Cubix, 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
संख्या (तकनीकी रूप से बोलना, इसकी गैर-लेखन योग्य, गैर-enumerable और गैर-कॉन्फ़िगर करने योग्य संपत्ति विंडो ऑब्जेक्ट) होती है।
- सटीकता 19 और ऊपर के इनपुट के लिए खो गई है, क्योंकि संख्या 2 53 से अधिक है (= 9 007 199 254 740 992) को जावास्क्रिप्ट में सही ढंग से संग्रहीत नहीं किया जा सकता है।
व्याख्या
इस कार्यक्रम में दो लूप शामिल हैं। पहला इनपुट के भाज्य की गणना करता है, दूसरा परिणाम को उसके अंकों में विभाजित करता है और उन्हें एक साथ जोड़ता है। फिर योग छपा है, और कार्यक्रम समाप्त हो गया है।
प्रारंभ
सबसे पहले, हमें स्टैक तैयार करने की आवश्यकता है। उस भाग के लिए, हम पहले तीन निर्देशों का उपयोग करते हैं। आईपी पूर्व की ओर इशारा करते हुए चौथी लाइन पर शुरू होता है। ढेर खाली है।
. . .
. . .
. . .
0 1 I . . . . . . . . .
. . . . . . . . . . . .
. . . . . . . . . . . .
. . .
. . .
. . .
हम योग को स्टैक के बहुत नीचे रखेंगे, इसलिए हमें स्टैक 0
के निचले भाग पर जमा करके योग होने की आवश्यकता है । तो फिर हम एक धक्का की जरूरत है1
, क्योंकि इनपुट शुरू में संख्या से गुणा किया जाएगा। यदि यह शून्य होता, तो फैक्टरियल हमेशा शून्य का उत्पादन करता। अंत में हम एक पूर्णांक के रूप में इनपुट पढ़ते हैं।
अब, स्टैक है [0, 1, input]
और आईपी चौथी रेखा पर है, चौथा स्तंभ, पूर्व की ओर इशारा करता है।
फैक्टर लूप
यह एक सरल लूप है जो स्टैक के शीर्ष दो तत्वों को गुणा करता है (पिछले लूप और इनपुट के परिणाम - n, और फिर इनपुट को घटाता है। यह तब टूट जाता है जब इनपुट 0. तक पहुंच जाता है। $
अनुदेश आईपी को छोड़ने का कारण बनता है u
- टर्न। लूप घन का निम्नलिखित भाग है। IP चौथी लाइन, चौथे कॉलम पर शुरू होता है।
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