ইন প্যানকেক বাছাই কেবল অনুমোদিত অপারেশন ক্রম কিছু উপসর্গ উপাদান বিপরীত হয়। বা, প্যানকেকগুলির একটি স্ট্যাকের কথা ভাবেন: আমরা স্ট্যাকের কোথাও একটি স্প্যাটুলা sertোকা এবং স্প্যাটুলার উপরে সমস্ত প্যানকেকগুলি ফ্লিপ করি।
উদাহরণস্বরূপ, 6 5 4 1 2 3
প্রথম 6
উপাদানগুলিকে (পুরো ক্রমটি) উল্টিয়ে মধ্যবর্তী ফলাফল উত্পন্ন করে 3 2 1 4 5 6
এবং তারপরে প্রথম 3
উপাদানগুলিকে উল্টিয়ে , এ পৌঁছনোর মাধ্যমে ক্রমটি বাছাই করা যায় 1 2 3 4 5 6
।
যেহেতু কেবলমাত্র একটি অপারেশন রয়েছে, সম্পূর্ণ বাছাই প্রক্রিয়াটি পূর্ণসংখ্যার ক্রমিক দ্বারা বর্ণিত হতে পারে, যেখানে প্রতিটি পূর্ণসংখ্যা পিআর ফ্লিপ অন্তর্ভুক্ত করার জন্য উপাদান / প্যানকেকের সংখ্যা। উপরের উদাহরণের জন্য, বাছাইয়ের ক্রম হবে 6 3
।
আর একটি উদাহরণ: এর 4 2 3 1
সাথে বাছাই করা যায় 4 2 3 2
। মধ্যবর্তী ফলাফল এখানে:
4 2 3 1
flip 4: 1 3 2 4
flip 2: 3 1 2 4
flip 3: 2 1 3 4
flip 2: 1 2 3 4
কাজটি:
একটি প্রোগ্রাম লিখুন যা পূর্ণসংখ্যার একটি তালিকা নেয় এবং একটি বৈধ প্যানকেক বাছাইয়ের ক্রম প্রিন্ট করে।
বাছাইয়ের তালিকাটি স্টিডিনের থেকে পৃথক পৃথক তালিকা হতে পারে, বা কমান্ড লাইন আর্গুমেন্ট। তালিকাটি প্রিন্ট করুন তবে এটি সুবিধাজনক, যতক্ষণ না এটি কিছুটা পাঠযোগ্য।
এই কোডগল্ফ!
সম্পাদনা:
আমি মন্তব্যে যেমন বলেছি, আপনাকে আউটপুটটি অনুকূল করতে হবে না (সংক্ষিপ্ত ক্রমটি এনপি-হার্ড সন্ধান করা )। তবে , আমি কেবল বুঝতে পেরেছি যে আপনি পছন্দসই ফলাফল (একটি [নতুন?] প্রকারের বোগোসর্ট) না পাওয়া পর্যন্ত একটি সস্তা সমাধান এলোমেলো সংখ্যা ছুঁড়ে ফেলা হবে। এখনও অবধি কোনও উত্তর এটি করেনি, তাই আমি এখন ঘোষণা করছি যে আপনার অ্যালগরিদম কোনও (ছদ্ম-) এলোমেলোভাবে নির্ভর করা উচিত নয় ।
আপনি সবাই নিজেকে লাথি মারার সময়, এটিকে ঘষতে এখানে রুবি ২.০ (characters০ টি অক্ষর) এর একটি বোগোপানকেকোর্ট বৈকল্পিক রয়েছে:
a=$*.map &:to_i
a=a[0,p(v=rand(a.size)+1)].reverse+a[v..-1]while a!=a.sort
4 3 2 1
পরিবর্তে প্রদর্শিত হবে4 2 3 1