স্ট্যাক স্টেট ডায়াগ্রাম সমাধান করুন


15

একটি স্ট্যাকের রাজ্য চিত্রটি দেখায় যে কীভাবে একটি স্ট্যাকের মানগুলি অন্যটিতে রূপান্তরিত হয়। উদাহরণস্বরূপ, এটি স্ট্যাক স্টেট ডায়াগ্রাম:

3 0 2 1 0

এর অর্থ হল এখানে প্রাথমিকভাবে 3 টি মান ( 3অংশ) সহ একটি স্ট্যাক রয়েছে । এই মানগুলি 0 থেকে 2 পর্যন্ত সূচী হয়, শীর্ষে 0 দিয়ে:2 1 0 । পরের অংশটি 0 2 1 0স্ট্যাকের চূড়ান্ত অবস্থা বর্ণনা করে: স্ট্যাকের উপরে মূলত যে মানটি ছিল তা পিছনেও অনুলিপি করা হয়েছে।

এই রূপান্তরগুলি এমন স্ট্যাকের উপর ঘটে যা বেশ কয়েকটি ডেটা ধরণের সমর্থন করে:

  • "মান" টাইপ, যা স্ট্যাকের মূলত এটি। এটি একটি স্ট্রিং, পূর্ণসংখ্যা ইত্যাদি হতে পারে তবে এর মানটি জানা দরকার।
  • "তালিকা" টাইপ, যা কোনও ডাটা টাইপের মান সমেত একটি তালিকা।

এই রূপান্তরটির মডেল করতে, নিম্নলিখিত ক্রিয়াকলাপগুলির অনুমতি দেওয়া হয়েছে:

  • S: স্ট্যাকের উপরে দুটি মান অদলবদল করুন: 2 1 02 0 1
  • D: স্ট্যাকের শীর্ষে মানটি নকল করুন: 1 01 0 0
  • R: স্ট্যাকের উপরের মানটি সরান। 2 1 02 1
  • L: শীর্ষ মানটিকে এক-উপাদান তালিকায় পরিণত করে যে মানটি: 2 1 0→ →2 1 (0)
  • C: স্ট্যাকের শীর্ষ দুটি তালিকা সংযুক্ত করুন: 2 (1) (0)2 (1 0)
  • U: একটি তালিকা থেকে সমস্ত মান স্ট্যাকের উপরে রাখুন: 2 (1 0)2 1 0

এগুলি আন্ডারলোড কমান্ডগুলির সমতুল্য ~ : ! a * ^, যদি অন্য কোনও কমান্ড ব্যবহার না করা হয়।

S, D, R, এবং Lস্ট্যাকের উপর কোন মান ব্যবহার করতে পারেন, কিন্তু Cএবং Uফাংশন স্ট্যাকের উপর তালিকা থাকতে হবে। একটি জমা দেওয়া যার উত্পন্ন ক্রমগুলি অবৈধ ক্রিয়াকলাপগুলি (যেমন Dএকটি খালি স্ট্যাক বা একটি তালিকাবিহীন লিখিতভাবে) প্রাইম করার চেষ্টা করে Uতা ভুল এবং অবশ্যই শাস্তি পেতে হবে স্থির করেছি।

স্ট্যাকের স্টেট ডায়াগ্রামটি সমাধান করার জন্য, কমান্ডগুলির একটি ক্রম সন্ধান করুন যা প্রাথমিক স্ট্যাকের অবস্থাটিকে সঠিকভাবে রূপান্তর করবে one উদাহরণস্বরূপ, এর একটি সমাধান 3: 0 2 1 0হ'ল LSLCSLCULSLCLSLDCSC USLCU:

   2 1 0
L  2 1 (0)
S  2 (0) 1
L  2 (0) (1)
C  2 (0 1)
S  (0 1) 2
L  (0 1) (2)
C  (0 1 2)
U  0 1 2
L  0 1 (2)
S  0 (2) 1
L  0 (2) (1)
C  0 (2 1)
L  0 ((2 1))
S  ((2 1)) 0
L  ((2 1)) (0)
D  ((2 1)) (0) (0)
C  ((2 1)) (0 0)
S  (0 0) ((2 1))
C  (0 0 (2 1))
U  0 0 (2 1)
S  0 (2 1) 0
L  0 (2 1) (0)
C  0 (2 1 0)
U  0 2 1 0

আপনার কাজ হ'ল এমন একটি প্রোগ্রাম লিখুন যা স্ট্যাকের স্টেট ডায়াগ্রাম গ্রহণ করে এবং এর সমাধান দেয়।

পরীক্ষার কেস

2 1 0       ->

3 2 0       -> SR

9           -> RRRRRRRRR

2 0 1 0     -> LSLCDCUR

2 0 1 1     -> SD

6 2         -> RRSRSRSR

5 0 1 2 3 4 -> LSLCSLCSLCSLCU

4 2 0 1 3 2 -> LSLCSLSCSLCULSLSCSLSCLSLDCSCUSLCU

এটি , সুতরাং সংক্ষিপ্ততম বৈধ উত্তর (বাইটে) জেতে।


আপনি তালিকাগুলি সহ একটি তালিকা পেতে পারেন? সম্পাদনা: কিছুই নয়, উদাহরণস্বরূপ আপনি এটি করতে পারেন।
orlp

কি Cস্ট্যাকের উপরে এবং দ্বিতীয় অবস্থানে দরকার তালিকা? বা দ্বিতীয় অবস্থানে উপাদান শীর্ষে একটি তালিকায় যুক্ত করা যেতে পারে?
edc65

Cউভয় পদে তালিকা প্রয়োজন। এটি একটি মান এবং একটি তাল মিলিয়ে বোঝানোর কোনও মানে হয় না।
21:55

উত্তর:


9

পাইথন 3, 84 বাইট

lambda n,*s:"DLL"+"L".join(i*"SLSC"+"LSLSCDURLCULCULSC"for i in s[::-1])+n*"SR"+"UR"

ব্যবহার:

# Example: 4 2 0 1 3 2 -> LSLCSLSCSLCULSLSCSLSCLSLDCSCUSLCU
>>> f = lambda ...
>>> f(4, 2, 0, 1, 3, 2)
'DLLSLSCSLSCLSLSCDURLCULCULSCLSLSCSLSCSLSCLSLSCDURLCULCULSCLSLSCLSLSCDURLCULCULSCLLSLSCDURLCULCULSCLSLSCSLSCLSLSCDURLCULCULSCSRSRSRSRUR'

ব্যাখ্যা: শুরু করার জন্য আমরা শূন্যের সদৃশ এবং এটিকে একটি তালিকায় গুটিয়ে রাখি:

DL -> 3 2 1 0 (0)

এটি আমাদের বেস। এখন আমি একটি সাধারণ অ্যালগরিদম ব্যাখ্যা করবে পালাক্রমে ... 1 0 (x)মধ্যে ... 1 0 (i x)অবাধ পূর্ণসংখ্যা জন্য i। আমি উদাহরণ হিসাবে ব্যবহার করব i = 2, এবং আমাদের কিছু স্বেচ্ছাসেবীর তালিকা রয়েছে (x)। আমরা আমাদের বর্তমান তালিকাটিকে (x)অন্য তালিকায় মুড়িয়ে দিয়ে শুরু করি :

L -> 3 2 1 0 ((x))

এখন আমরা নিম্নলিখিত ক্রম iবার পুনরাবৃত্তি :

SLSC -> 3 2 1 (0 (x))
SLSC -> 3 2 (1 0 (x))

এখন আমরা 2 টি তালিকায় sertোকাতে প্রস্তুত (x)। এটি নিম্নলিখিত হিসাবে যায়:

LSLSC -> 3 (2 (1 0 (x)))
DU -> 3 (2 (1 0 (x))) 2 (1 0 (x))
RLCU -> 3 2 (1 0 (x)) 2
LCU -> 3 2 1 0 (x) 2
LSC -> 3 2 1 0 (2 x)

মনে রাখবেন যে আমরা বাম দিকে নতুন পূর্ণসংখ্যার দিকে চাপ দিই। সুতরাং প্রথমদিকে (0)আমরা ডানদিকে থেকে শুরু করেছিলাম।

আমরা প্রতিটি পূর্ণসংখ্যার তালিকায় sertedোকানোর পরে আমরা n সময় ( SR) অদলবদল করে এবং মুছে ফেলে বাকী স্ট্যাকটি সরিয়ে ফেলি । অবশেষে আমরা আমাদের তালিকাটি আনপ্যাক করে প্রথমে 0আমাদের তালিকাটি ( UR) শুরু করার জন্য .োকালাম ।


আপনি কি sপরিবর্তে টাইপ করতে চেয়েছিলেন l?
জাকারি

@ জাচারি উফ, হ্যাঁ চারপাশের জিনিসগুলিকে lবদলে দেওয়ার সময় এটি কাজ করেছিল কারণ আমার আরপিএলে সংজ্ঞায়িত হয়েছিল।
orlp

দেখানো উদাহরণটি ... ( DLLSLSCSLSCSLSCSLSCLSLSCDURLCULCULSCLSLSCSLSCSLSCLSLSCDURLCULCULSCLSLSCSLSCLSLSCDURLCULCULSCLSLSCLSLSCDURLCULCULSCLLSLSCDURLCULCULSCSRSRSRSRUR ) ব্যবহার করে বলে মনে হচ্ছে না । Sযখন স্ট্যাকের কেবল 1 টি মান থাকে তখন এটি কোনও নির্দেশ কার্যকর করার চেষ্টা করে ।
ফলসিংয়ের ফলস্বরূপ

@ চ্যালেঞ্জার 5 এবং আমি উদাহরণটি আপডেট করতে ভুলে গিয়েছিলাম ... এখনই ঠিক করা উচিত।
orlp

হ্যাঁ, এখন ভাল দেখাচ্ছে!
ফলসকে এলোং করে

0

সিজেম, 54 বাইট

অরলপের পাইথন সমাধান থেকে সিজেমে কেবল একটি অনুবাদ। এখানে নতুন কিছু নেই।

"DLL"q~("SR"*\W%{"SLSC"*"LSLSCDURLCULCULSC"+}%'L*\"UR"

ব্যাখ্যা:

"DLL"                  e# Push string
q~                     e# Read input and evaluate
(                      e# Pop the first value
"SR"                   e# Push string
*                      e# Repeat string n times
\                      e# Swap (bring s to front)
W%                     e# Reverse
{                      e# For each:
  "SLSC"               e#   Push string
  *                    e#   Repeat i times
  "LSLSCDURLCULCULSC"+ e#   Append string to end
}%                     e# End
'L*                    e# Join with 'L'
\                      e# Swap (bring "SR"*n to front)
"UR"                   e# Push string
                       e# [Stack is implicitly output.]
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.