বার্ন প্যানকেক সমস্যা


23

এই চ্যালেঞ্জটি প্যানকেকস ফ্লিপিং সম্পর্কিত ।

আপনি প্যানকেক বাছাইয়ের কথা শুনে থাকতে পারেন , যেখানে প্যানকেকের স্ট্যাকটি স্ট্যাকের মধ্যে স্প্যাটুলা andুকিয়ে এবং স্প্যাটুলার উপরে সমস্ত প্যানকেকগুলি উল্টিয়ে মাপ অনুসারে বাছাই করা হয়, যতক্ষণ না প্যানটেকগুলি প্লেটের সবচেয়ে বড় থেকে ছোট থেকে ছোট বাছাই করা হয়। পোড়া প্যানকেক সমস্যাটি কিছুটা আলাদা। সমস্ত প্যানকেকের এখন একটি পাশ রয়েছে যা পুড়ে গেছে এবং বাছাই সম্পন্ন হওয়ার পরে প্রতিটি প্যানকেকের পোড়া পাশ অবশ্যই প্লেটের মুখোমুখি হবে।

উদাহরণস্বরূপ, নিম্নলিখিত স্ট্যাকটি দেওয়া হয়েছে (বামদিকে প্যানককের আকার 0meaning যার অর্থ বার্ন-সাইড ডাউন এবং 1অর্থ ডানদিকে বার্ন সাইড):

1 0
3 1
2 1

আপনি পেতে পুরো স্ট্যাকটি ফ্লিপ করতে পারেন 20 30 11, পেতে শীর্ষ দুটি 31 21 11ফ্লিপ করতে এবং পেতে পুরো স্ট্যাকটি আবার ফ্লিপ করতে পারেন 10 20 30, পোড়া প্যানকেকগুলির একটি সাজানো স্ট্যাক। এই ক্রমের ক্রম 3, ফ্লিপ 3, ফ্লিপ 2, ফ্লিপ 3, হিসাবে উপস্থাপিত হতে পারে 3 2 3

চ্যালেঞ্জ

  • প্যানকেক আকারের একটি অ্যারে দেওয়া (প্রয়োজনীয়ভাবে অনন্য নয়) এবং তাদের দিকনির্দেশনা, কোনও বৈধ পোড়া প্যানকেক বাছাইয়ের ক্রম আউটপুট দেয়, এটি হ'ল ফ্লিপগুলির একটি অনুক্রম যা প্যানকেকের স্তুপকে ছোট থেকে বৃহত্তম পর্যন্ত পোড়া পক্ষের সাথে সাজানো হয়।
  • ইনপুট এবং আউটপুট বিভাজকগুলির সাথে কোনও বুদ্ধিমান ফর্ম্যাট হতে পারে তবে আপনি কোন ফর্ম্যাটগুলি ব্যবহার করবেন তা নির্দিষ্ট করুন এবং আপনার ইনপুট ফর্ম্যাটটির কোন শেষটি স্ট্যাকের (টিওএস) শীর্ষে রয়েছে তা উল্লেখ করুন।
  • শূন্য প্যানকেকগুলি উল্টানোর অনুমতি রয়েছে।
  • ইনপুট / আউটপুট মধ্যে বিভাজক মিশ্রিত অনুমোদিত।

পরীক্ষার মামলা

নিম্নলিখিত সমস্ত পরীক্ষার ক্ষেত্রে ইনপুট একটি তালিকা এবং আউটপুট একটি স্থান-বিভাজিত স্ট্রিং, এবং টিওএস বাম দিকে রয়েছে।

[[1, 0], [3, 1], [2, 1]]
"3 2 3"

[[5, 1], [3, 0], [4, 1], [2, 1], [1, 0]]
"5 3 4 1 3 2 1"

[[5, 1], [3, 0], [3, 0], [1, 1]]
"4 3 2 3"

সর্বদা হিসাবে, যদি কিছু অস্পষ্ট বা ভুল হয় তবে দয়া করে আমাকে মন্তব্যগুলিতে জানান। শুভকামনা এবং ভাল গল্ফিং!

উত্তর:


7

পাইথন 2, 83

ইনপুটটি স্ট্যাকের শীর্ষের শেষে (আকার, ওরিয়েন্টেশন) টিপলগুলির তালিকা হিসাবে প্রত্যাশিত। আউটপুট হ'ল মাপের একটি তালিকা যা বিভিন্ন ধরণের সাদা স্থান দ্বারা পৃথক করা হয়।

a=input()
while a:i=a.index(max(a));print len(a)-i,a[i][1],len(a),i;a=a[i+1:]+a[:i]

2
স্পষ্টতই আমি একজন বোকা।
লিকি নুন

কি 0অনুমতি আউটপুট তালিকায়?
লিকি নুন

19
@ লিক্যনুন ফ্লিপিং 0 প্যানকেকগুলি সুনির্দিষ্টভাবে সম্ভব। আসলে, আমি এখনই এটি করছি।
ফেয়ারসাম

@ ডানিরো স্ট্যাকের শীর্ষটি ডানদিকে রয়েছে।
লিকি নুন

@ ল্যাকইনুন ওহ সরি, আমার খারাপ
ডানিরো

3

সিজেএম (37 বাইট)

q~{__$W>#)_p/(W%\M*2,f.^+(1=p_,)pW%}h

স্টিডিনে সিজেএম ফর্ম্যাটে ইনপুট একটি অ্যারে; আউটপুট একটি স্ট্যান্ডআউটে ফ্লিপ দৈর্ঘ্যের একটি নতুনলাইন দ্বারা পৃথক তালিকা। স্ট্যাকের শীর্ষটি সূচকে রয়েছে 0; 0পোড়া পাশের দিকে ইঙ্গিত করে এবং 1নিচে পোড়া ইঙ্গিত দেয়।

অনলাইন ডেমো

ব্যবচ্ছেদ

আউটপুট সর্বদা 3nলম্বা হয়, যেখানে nপ্যানকেকের সংখ্যা। প্রথমে আমরা শীর্ষে থাকা বৃহত্তম অবশিষ্ট প্যানকেকগুলি ফ্লিপ করি; তারপরে যদি এটি পুড়ে যায় তবে আমরা সেই একটি প্যানকেকটি ফ্লিপ করব; এবং তারপরে আমরা এটিকে নীচে সরিয়ে ফেলি এবং পুনরাবৃত্তি করি যেমন প্যানকেকের স্ট্যাকটি একটি ছোট ছিল।

q~         e# Parse input into array
{          e# Loop...
  __$W>#)  e#   Find 1-based index of largest element in array
  _p       e#   Dup and print
  /(       e#   Split into chunks that long, and pull off the first
  W%       e#   Reverse the first chunk. Note that we don't flip the burnt/unburnt bit
  \M*      e#   Merge the remaining chunks into a single array
  2,f.^    e#   Flip *their* burnt/unburnt bits
  +        e#   Concatenate, prepending the first chunk
  (1=p     e#   Pull off the first (largest) element and print its burnt/unburnt bit
  _,)p     e#   Print the number of remaining elements plus 1 (to account for the largest)
  W%       e#   Reverse. Note that the first chunk has now been flipped twice, which is
           e#   why we have left its burnt/unburnt bit alone
}h         e# ... until we get down to an empty array

3

রুবি, 101 95 93 বাইট

খুব গল্ফ নয়, আমি কেবল বোগো-সাজানোর বৈকল্পিক তৈরি করতে চেয়েছিলাম। এটি একটি বেনাম ফাংশন যা প্যানকেকগুলি বাছাই না করা অবধি স্ট্রাউডে অ্যারে এবং এলোমেলো ফ্লিপগুলি মুদ্রণ করে।

->a{(p r=-~rand(a.size)
a[0,r]=a[0,r].reverse.map{|x,b|[x,1-b]})while a!=a.sort||a.rassoc(1)}

আপনি উদাহরণস্বরূপ এটি নির্ধারণ fএবং বলতে পারেনf.call [[1, 0], [3, 1], [2, 1]]

rassoc
@ শার্লক 9 থেকে -2 বাইটের উজ্জ্বল ব্যবহার সহ @ জর্দানের -5 বাইট


1
আপনি প্রতিস্থাপন কয়েক বাইট সংরক্ষণ করতে পারবেন a.all?{...}সঙ্গে !a.rassoc(1)
জর্ডান

@ জর্ডান বাহ, এটি সত্যিই উজ্জ্বল! আমি মনে করি না যে আমি এর আগে ( r) ব্যবহার করার কথা ভেবেছিলাম assoc, তবে এটি সম্পর্কে চিন্তাভাবনা করা, এটি সম্ভবত এই সাইটে প্রচুর সমস্যায় কার্যকর - আমি মনে করি এটি রুবি গল্ফিং টিপস পোস্টে থাকা উচিত। যাহাই হউক না কেন, ধন্যবাদ :) আমিও যদিও deMorgans আইন প্রয়োগ ও প্রতিস্থাপন অন্য বাইট হত্যা করতে সক্ষম হয়েছিলো untilসঙ্গে while
ডানিরো


যেহেতু bকেবল কখনও 0বা 1, 1-bএছাড়াও কাজ করবে এবং দুটি বাইট সংরক্ষণ করবে।
শার্লক 9
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.