কিউবিক্স, 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 . . . . .
. . . . . . . .
. .
. .
দ্বিতীয় ধাপ: চরিত্রের তুলনা
স্ট্যাকটি হ'ল ..., C[a-1], C[a], counter
, counter
যখন দুটি অক্ষর ( C[a]
এবং C[a-1]
) সমান পরীক্ষা করার জন্য বাড়ানোর পাল্টা । আইপি প্রথমে এই লুপটি 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)
এবং তারপরে এটি লুপ হয় ops
তৃতীয় ধাপ: মুদ্রণের ফলাফল
যেহেতু আমরা লুপ তাড়াতাড়ি চলে আসা, স্ট্যাক সৌন্দর্য এটি পছন্দ: 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
আলেয়া আইকটা এস্ট।