কিউবিক্স, 238 234 217 151 110 100 বাইট
ETHProductions ধন্যবাদ 14 বাইট সংরক্ষণ করা
u'^.:s+.;;;\-?W?rsos\(rrOIO:ur>'=o;^u.;;.>$.vUo^'rsu1;;@!\q?s*su;;IOu*+qU../;(*\(s.;<..r:''uq....qu\
সম্প্রসারিত:
u ' ^ . :
s + . ; ;
; \ - ? W
? r s o s
\ ( r r O
I O : u r > ' = o ; ^ u . ; ; . > $ . v
U o ^ ' r s u 1 ; ; @ ! \ q ? s * s u ;
; I O u * + q U . . / ; ( * \ ( s . ; <
. . r : ' ' u q . . . . q u \ . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
এটি অনলাইন চেষ্টা করুন!
এখানে চেষ্টা করুন
ব্যাখ্যা
কোডটিতে দুটি লুপ সহ 8 টি ধাপ রয়েছে। আমি একাংশে কোডের উপর দিয়ে যাব।
পদক্ষেপ 1 (A ^ B)
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
I O : u . . . . . . . . . . . . . . . .
U o ^ ' . . . . . . . . . . . . . . . .
; I O u . . . . . . / ; ( * \ . . . . .
? ? r : . . . . . . ? . . . \ ? ? ? ? ?
. . . . ? . . . . . ? . . . . . . . . .
? ? ? ? ?
. . . . .
. . . . .
. . . . .
. . . . .
এটি সেই অংশগুলির সাথে ঘনক্ষেত্র যা সরানো প্রথম পদক্ষেপের সাথে অপ্রাসঙ্গিক। প্রশ্ন চিহ্নটি দেখায় যে এর পথটি আরও সুস্পষ্ট করতে আইপি পরিদর্শন করবে না-অপ্সগুলি।
IO:'^o;IO:r*(; # Explanation
I # Push the first input (A)
O # output that
: # duplicate it
'^ # Push the character "^"
o # output that
; # pop it from the stack
I # Push the second input (B)
O # output that
: # duplicate
r # rotate top 3 elements
* # Push the product of the top two elements
( # decrease it by one
; # pop it from the stack (making the last
# two operations useless, but doing it
# this way saves 10B)
এখন, স্ট্যাকটি দেখতে এমন দেখাচ্ছে: A, B, A, B
পদক্ষেপ 2 (প্রিন্ট লুপ জন্য প্রস্তুত)
মুদ্রণ লুপ 3 আর্গুমেন্টগুলি (স্ট্যাক শীর্ষ 3 উপাদান) লাগে: P
, Q
এবং R
। P
পুনরাবৃত্তির পরিমাণ Q
হ'ল বিভাজক (চরিত্র কোড) এবং R
এটির পুনরাবৃত্তি করার সংখ্যা। সৌভাগ্য যে, লুপ এছাড়াও প্রয়োজন যত্ন করে ফলে স্ট্রিং দিয়ে শেষ হওয়া উচিত লাগে R
না Q
।
আমরা A*
ঠিক B
বার পুনরাবৃত্তি করতে চাই , তাই বিভাজক হয় *
। মনে রাখবেন যে স্ট্যাকটি শুরু হয় A, B, A, B
। আবারও, আমি সমস্ত অপ্রাসঙ্গিক নির্দেশাবলী সরিয়েছি। আইপি সূচনা S
উত্তর দিকে শুরু ।
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . r . . . . . . . . . . . . . . .
. . . . r . . . . . . . . . . . . . . .
. . . . * . . . . . . . . . . . . . . .
. . . . ' . . . . . . . . . . . . . . .
. . . . S . . . . . . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
'*rr # Explanation
'* # Push * (Stack: A, B, A, B, *)
rr # Rotate top three elements twice
স্ট্যাক এখন A, B, B, *, A
।
পদক্ষেপ 3/6/8 (মুদ্রণ লুপ)
ধারণা
E . . . . .
? r s o s u
\ ( r r O <
. . . . . S
আইপি লুপটির মধ্য দিয়ে প্রবেশ করে S
উত্তরটি নির্দেশ করে এবং E
উত্তরটি আবার নির্দেশ করে লুপটি প্রস্থান করে । এই ব্যাখ্যার জন্য, স্ট্যাকটি সেট করা আছে [..., A, B, C]
। নিম্নলিখিত নির্দেশাবলী কার্যকর করা হয়। নোট করুন আইপি প্রশ্ন চিহ্নের আগে লুপটি ছাড়তে পারে না, তাই প্রথম চারটি নির্দেশাবলী সর্বদা কার্যকর করা হবে।
Orr(?rsos # Explanation
O # Output `C`
rr # Rotate top three elements twice (Stack: [..., B, C, A])
( # Decrease A by one (Stack: [..., B, C, A-1])
? # If top of stack (A) > 0:
r # Rotate top of stack (Stack: [..., A-1, B, C])
s # Swap top elements (Stack: [..., A-1, C, B])
o # Output top of stack (B) as character code
s # Swap top elements (Stack: [..., A-1, B, C]
#
# ... and repeat ...
বাস্তবায়ন
অপ্রাসঙ্গিক অংশগুলি অপসারণের সাথে আবার কিউবটি এখানে। S
পূর্ব দিকে নির্দেশ করে আইপি শুরু হয় ।
. . . . .
. . . . .
. . . . .
? r s o s
\ ( r r O
. . . . . S ' = o ; ^ u . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
আপনি দেখতে পাচ্ছেন, আইপি লুপে প্রবেশের আগে চারটি নির্দেশাবলী জুড়ে আসে। যেহেতু অক্ষর কোডটি আবার মুছে ফেলা হয়েছে, আমরা এই অংশে প্রবেশের সাথে ঠিক একই স্ট্যাকের সাহায্যে লুপে পৌঁছেছি।
'=o; # Explanation
'= # Push =
o # Output
; # Pop from stack
লুপের ভিতরে, উপরের ব্যাখ্যাটি ধরে রাখে।
পদক্ষেপ 4 (আইপিগুলি পৃথক করে)
যেহেতু আমরা উপরের লুপটি একাধিকবার ব্যবহার করি এবং সেগুলি আইপি একই স্থানে শেষ করে দেয় তাই আমাদের একাধিক রানের মধ্যে পার্থক্য করতে হবে। প্রথমত, আমরা বিভাজকের মধ্যে পার্থক্য করতে পারি (প্রথম রানের একটি আছে *
, যেখানে দুটি এবং তিনটিতে রান রয়েছে)+
হিসাবে রয়েছে)। পুনরাবৃত্তি হওয়া সংখ্যার মান যাচাই করে আমরা 2 এবং 3 রানের মধ্যে পার্থক্য করতে পারি। যদি এটি এক হয় তবে প্রোগ্রামটি শেষ করা উচিত।
প্রথম তুলনা
কিউবে এটি দেখতে কেমন লাগে তা এখানে। আইপি শুরু হয় এস এবং উত্তর পয়েন্ট। স্ট্যাকের মধ্যে রয়েছে [..., * or +, A or 1, 0]
। নম্বর 1 দেখায় যেখানে আইপিটি শেষ হবে যদি এটি প্রথম লুপ (উত্তরের দিকে নির্দেশ করা হয়) এবং দ্বিতীয় নম্বরটি দেখায় যেখানে আইপিটি শেষ হবে যেখানে এটি দ্বিতীয় (বা তৃতীয়) লুপ (পূর্বদিকে নির্দেশ করা) হবে।
u ' . . .
s + . 1 .
; \ - ? 2
S . . . .
. . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
;s'+-? # Explanation
; # Delete top element (0)
s # Swap the top two elements (Stack: 1/A, */+)
'+ # Push the character code of +
- # Subtract the top two elements and push
# that to the stack (Stack: 1/A, */+, +, (*/+)-+)
? # Changes the direction based on the top
# item on the stack. If it's 0 (if (*/+) == +)
# the IP continues going right, otherwise, it
# turns and continues going north.
আইপি যদি এখন চালু থাকে 1
তবে স্ট্যাকটি হয় [A, *, +, -1]
। অন্যথায়, স্ট্যাকটি হ'ল[A or 1, +, +, 0]
। আপনি দেখতে পাচ্ছেন যে, দ্বিতীয় মামলার স্ট্যাকের মধ্যে এখনও একটি অজানা রয়েছে, সুতরাং আমাদের আরও একটি তুলনা করতে হবে।
দ্বিতীয় তুলনা
আইপি পদক্ষেপ 5, ভালো স্ট্যাক সৌন্দর্য মাধ্যমে সর্বস্বান্ত করেছে কারণ: [A^(B-1) or nothing, A or 1, +, +, 0]
। প্রথম উপাদানটি nothing
হলে, দ্বিতীয় উপাদানটি হয় 1
এবং বিপরীতটিও ধারণ করে too কিউবটি দেখতে দেখতে আইপি এস দিয়ে শুরু হয় এবং পূর্ব দিকে নির্দেশ করছে। এটি যদি দ্বিতীয় লুপ হয় তবে আইপি শেষ হবে E
পশ্চিম দিকে নির্দেশ করে। অন্যথায়, প্রোগ্রামটি হিট করে @
এবং সমাপ্ত হয়।
. . . . .
. . . . ;
. . . S W
. . . . .
. . . . .
. . . . . . . . . . . . . ; . . . . . .
. . . . . . . . . E @ ! \ q . . . . . .
. . . . . . . . . . . . ( * . . . . . .
. . . . . . . . . . . . q u . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
নির্ধারিত নির্দেশাবলী যা নিয়ন্ত্রণ প্রবাহে কিছু না করে নীচে তালিকাভুক্ত করা হয়েছে।
;;q*q(!@
;; # Delete top two elements (Stack [A^(B-1)/null, A/1, +])
q # Send top element to the bottom (Stack [+, A^(B-1)/0, A/1])
* # Push product of top two elements
# (Stack [+, A^(B-1)/0, A/1, A^B/0])
q # Send top element to the bottom
# (Stack [A^B/0, +, A^(B-1)/0, A/1])
( # Decrease the top element by 1
# (Stack [A^B/0, +, A^(B-1)/0, (A-1)/0])
! # If (top element == 0):
@ # Stop program
স্ট্যাক এখন [A^B, +, A^(B-1), A-1]
, কর্মসূচির অবসান না হলে শর্ত।
পদক্ষেপ 5 ("A +" এর জন্য প্রস্তুত করা (পুনরাবৃত্তি A ^ (বি -1)))
দুঃখের বিষয়, কিউবিক্সের পাওয়ার অপারেটর নেই, তাই আমাদের আরও একটি লুপ দরকার। তবে, আমাদের প্রথমে স্ট্যাকটি পরিষ্কার করা দরকার, যা এখন রয়েছে contains[B, A, *, +, -1]
।
পরিষ্কার আপ
এখানে আবার কিউব। যথারীতি, আইপি শুরু হয় এস (উত্তর দিকে নির্দেশ করে), এবং ইয়ে শেষ হয়, পশ্চিম দিকে নির্দেশ করে।
. . . ? .
. . . ; .
. . . S .
. . . . .
. . . . .
. . . . . . . . . . . . . . . . > $ . v
. . . . . . . . . . . . . . . . . . . ;
. . . . . . . . . . . . . . . . . . E <
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
;; # Explanation
;; # Remove top 2 elements (Stack: [B, A, *])
A Calc (বি -1) গণনা করা হচ্ছে
আর একটি লুপ যা মুদ্রণের লুপের মতো প্রায় একই রকম কাজ করে তবে এটি কিছুটা কমপ্যাক্ট। আইপি শুরু হয় S
, পশ্চিম দিকে নির্দেশ করে, স্ট্যাক সহ [B, A, *]
। আইপি E
উত্তর দিকে নির্দেশ করে প্রস্থান করে ।
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . . . . . . . . . . . E . . . . .
. . . . . . . . . . . . . . ? s * s u .
. . . . . . . . . . . . . . \ ( s . ; S
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
লুপের বডিটি নিম্নলিখিত।
;s(?s*s # Explanation
; # Pop top element.
s # Shift top elements.
( # Decrease top element by one
? # If not 0:
s # Shift top elements again
* # Multiply
s # Shift back
#
# ... and repeat ...
ফলস্বরূপ স্ট্যাক হয় [A, A^(B-1), 0]
।
স্ট্যাক পরিষ্কার করা (আবার)
এখন আমাদের আবার মুদ্রণ লুপে উঠতে হবে, স্ট্যাকের শীর্ষটি সহ [..., A^(B-1), +, A]
। এটি করার জন্য, আমরা নিম্নলিখিতটি কার্যকর করি। এখানে আবার কিউব,
. . ^ ? :
. . . . .
. . . . .
. . . . .
E . . . .
. . . . . s . . . . . . . . ; . . $ . .
. . . . . + q U . . . . . . S . . s . .
. . . . . ' u q . . . . . . . . . ? . .
. . . . . . . ? . . . . . . . . . ? . .
. . . . . . . ? . . . . . . . . . ? . .
. . ? . .
. . ? . .
. . ? . .
. . ? . .
. . ? . .
;:$sqq'+s # Explanation
; # Delete top element (Stack: [A, A^(B-1)])
: # Copy top element
$s # No-op
qq # Send top two elements to the bottom
# (Stack: [A^(B-1), A^(B-1), A])
'+ # Push +
# (Stack: [A^(B-1), A^(B-1), A, +])
s # Swap top two elements
# (Stack: [A^(B-1), A^(B-1), +, A])
পদক্ষেপ 7 (শেষ লুপের জন্য প্রস্তুত)
স্ট্যাক এখন [A^B, +, A^(B-1), A-1]
, আইপি শুরু হয় S
, পশ্চিম দিকে যাচ্ছে এবং E
ডানদিকে যাচ্ছে ends
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . . E . . . . . . . . . . . . . .
. . . . . . u 1 ; ; S . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . . .
. . . . .
. . . . .
. . . . .
. . . . .
. . . . .
নির্দেশাবলী কার্যকর:
;;1 # Explanation
;; # Delete top two elements
1 # Push 1
স্ট্যাকটি এখন দেখতে দেখতে [A^B, +, 1]
, এবং আইপি প্রিন্ট লুপটি প্রবেশ করতে চলেছে, তাই আমরা শেষ করেছি।