क्यूबिक्स, 24 19 बाइट्स
)uO)ABq-!wpUp)W.@;;
ध्यान दें
- वास्तव में गिना जाता है कि इनपुट के अंत में एक ही वर्ण के कितने अक्षर हैं, इसलिए यह वास्तव में बड़े पूर्णांकों के लिए काम करता है और वास्तव में लंबे समय तक तार (जब तक कि अंत में समान वर्णों की मात्रा जावास्क्रिप्ट की अधिकतम परिशुद्धता से छोटी होती है) आधार -10 में लगभग 15 अंक)।
- इनपुट क्षेत्र में इनपुट जाता है, आउटपुट आउटपुट फ़ील्ड पर मुद्रित होता है
इसे यहाँ आज़माएँ
व्याख्या
सबसे पहले, आइए घन का विस्तार करें
) u
O )
A B q - ! w p U
p ) W . @ ; ; .
. .
. .
निष्पादन के चरणों को तीन चरणों में विभाजित किया जा सकता है:
- पार्स इनपुट
- पात्रों की तुलना करें
- प्रिंट परिणाम
चरण 1: इनपुट
निष्पादित होने वाले पहले दो वर्ण हैं A
और B
।A
सभी इनपुट को पढ़ता है और इसे स्टैक के चरित्र कोड के रूप में धकेलता है। ध्यान दें कि यह रिवर्स में किया जाता है, पहला चरित्र ढेर के ऊपर समाप्त होता है, अंतिम चरित्र लगभग नीचे। बहुत नीचे, -1
( EOF
) रखा गया है, जो स्ट्रिंग के अंत में लगातार पात्रों की मात्रा के लिए एक काउंटर के रूप में उपयोग किया जाएगा। चूँकि हमें पिछले दो पात्रों को शामिल करने के लिए स्टैक के शीर्ष की आवश्यकता है, हम लूप में प्रवेश करने से पहले स्टैक को उल्टा करते हैं। ध्यान दें कि स्टैक का शीर्ष भाग अब जैसा दिखता है:..., C[n-1], C[n], -1
:।
क्यूब पर आईपी का स्थान वह जगह है जहां E
है, यह सही इंगित करता है। सभी निर्देश जो अभी तक निष्पादित नहीं किए गए हैं, उन्हें नो-ऑप्स (पूर्ण स्टॉप) द्वारा बदल दिया गया था।
. .
. .
A B E . . . . .
. . . . . . . .
. .
. .
चरण 2: चरित्र की तुलना
स्टैक है ..., C[a-1], C[a], counter
, जहांcounter
दो वर्णों की जांच ( C[a]
और C[a-1]
) के बराबर होने पर वेतन वृद्धि का काउंटर है । IP सबसे पहले इस लूप को S
चरित्र में प्रवेश करता है , दाएं घूमते हुए। E
चरित्र स्थान है जहाँ आईपी खत्म हो जाएगा (सही इशारा करते हुए) जब है C[a]
और C[a-1]
एक ही मूल्य है, जो मतलब है कि घटाकर की जरूरत नहीं है C[a]
से C[a-1]
उपज नहीं है 0
, जिस स्थिति अनुदेश निम्नलिखित में !
छोड़ दिया जाएगा (जो एक है w
)।
. .
. .
. S q - ! w E .
p ) W . . ; ; .
. .
. .
यहां वे निर्देश दिए गए हैं जो एक पूर्ण लूप के दौरान निष्पादित किए जाते हैं:
q-!;;p) # Explanation
q # Push counter to the bottom of the stack
# Stack (counter, ..., C[a-1], C[a])
- # Subtract C[a] from C[a-1], which is 0 if both are equal
# Stack (counter, ..., C[a-1], C[a], C[a-1]-C[a])
! # Leave the loop if C[a-1]-C[a] does not equal 0
;; # Remove result of subtraction and C[a] from stack
# Stack (counter, ..., C[a-1])
p # Move the bottom of the stack to the top
# Stack (..., C[a-1], counter)
) # Increment the counter
# Stack (..., C[a-1], counter + 1)
और फिर यह चारों ओर घूमता है।
चरण 3: प्रिंट परिणाम
चूंकि हमने लूप को जल्दी छोड़ दिया था, स्टैक इस तरह दिखता है counter, ..., C[a-1]-C[a]
:। काउंटर को प्रिंट करना आसान है, लेकिन हमें एक बार काउंटर को बढ़ाना होगा क्योंकि हमने इसे लूप के अंतिम पुनरावृत्ति में नहीं किया था, और एक बार और क्योंकि हमने -1
इसके बजाय गिनती शुरू की 0
। क्यूब पर रास्ता इस तरह दिखता है, शुरू होता है S
, सही इंगित करता है। आईपी द्वारा निष्पादित दो नो-ऑप्स को तीर द्वारा प्रतिस्थापित किया जाता है जो आईपी की दिशा में इंगित करते हैं।
) u
O )
. B . . . S p U
. ) . . @ . . .
> >
. .
निर्देशों को निम्नलिखित क्रम में निष्पादित किया जाता है। ध्यान दें कि B)
अंत में निर्देश स्टैक को बदलते हैं, लेकिन प्रोग्राम को प्रभावित नहीं करते हैं, क्योंकि हम इसे समाप्त करने वाले हैं, और हम स्टैक का उपयोग नहीं करते हैं।
p))OB)@ # Explanation
p # Pull the counter to the top
# Stack: (..., counter)
)) # Add two
# Stack: (..., counter + 2)
O # Output as number
B) # Reverse the stack and increment the top
@ # End the program
एलिया इक्टाका स्था।