আপনি বিল গেটস আউটগল্ফ করতে পারেন?


13

প্যানকেক বাছাই হ'ল গাণিতিক সমস্যার জন্য প্যানকেকের একটি বিশৃঙ্খলা স্ট্যাক বাছাইয়ের গাণিতিক সমস্যার জন্য যখন একটি স্প্যাটুলা স্ট্যাকের যে কোনও বিন্দুতে সন্নিবেশ করা যায় এবং তার উপরে সমস্ত প্যানকেকগুলি ফ্লিপ করতে ব্যবহৃত হয়। একটি প্যানকেক নম্বর পি (এন) হ'ল এন প্যানকেকের জন্য প্রয়োজনীয় নূন্যতম সংখ্যা । 1

1979 সালে, এক তরুণ বিল গেটস এবং ক্রিস্টোস পাপাদিমিট্রিয়ো একটি কাগজ লিখেছিলেন যা পি (এন) = (5 এন + 5) / 3 এর উপরের সীমানা প্রমাণ করে । 2

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

চ্যালেঞ্জ:

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

আপনি ধরে নিতে পারেন যে এন <50 । সুতরাং আপনাকে অবশ্যই ফ্লিপের সংখ্যা সীমিত করতে হবে (কিছু এলোমেলোভাবে নির্বাচিত এন- ভ্যালু):

 n   P(n)
38   65
49   83
50   85

প্রতিটি উল্টানোর আগে আউটপুট স্প্যাটুলার অবস্থান হওয়া উচিত। আউটপুটটি শূন্য বা এক-সূচকযুক্ত হতে পারে এবং আপনি উপরের বা নীচে থেকে গণনা করা হলে আপনি চয়ন করতে পারেন।

অতিরিক্ত নিয়ম:

  • রানটাইম অবশ্যই নির্দোষ হতে হবে ic
  • কোনও নির্দিষ্ট সময়সীমা নেই, তবে আপনাকে অবশ্যই 50 টি উপাদান সহ একটি তালিকার জন্য আউটপুট সরবরাহ করতে সক্ষম হতে হবে

পরীক্ষার তালিকা:

আমি কঠোর তালিকাগুলি সরবরাহ করতে পারি না (যদি তা হয় তবে আমি একটি কাগজ লিখি, চ্যালেঞ্জ নয়), তাই আমি সংখ্যার কয়েকটি এলোমেলো তালিকা সরবরাহ করব যাতে আপনি নিজের ফাংশন / প্রোগ্রামগুলি পরীক্ষা করতে পারেন। আমি অন্যদের যুক্ত করতে পারি যদি এটি এই তালিকাগুলিতে পরিণত হয় যেখানে "সহজ"।

9, 63, 62, 75, 45, 78, 59, 75, 69, 3, 28, 94, 51, 10, 45, 93, 97, 80, 72, 36, 80, 88, 30, 93, 84, 80, 17, 31, 6, 80, 76, 91, 9, 76, 38, 33, 22, 15, 45, 46, 15, 98, 2, 56, 90, 27, 27, 26, 69, 25
...
74, 89, 57, 52, 70, 96, 16, 5, 77, 84, 54, 13, 90, 64, 31, 80, 3, 25, 13, 19, 13, 34, 1, 79, 35, 43, 4, 19, 82, 29, 48, 95, 97, 28, 45, 62, 64, 82, 70, 34, 38, 15, 51, 83, 21, 66, 4, 42, 74, 84
...
62, 73, 7, 90, 83, 18, 12, 35, 72, 71, 99, 67, 87, 62, 65, 70, 14, 72, 55, 92, 87, 3, 7, 4, 4, 95, 49, 25, 4, 18, 49, 39, 26, 1, 45, 64, 23, 66, 39, 17, 33, 24, 58, 72, 77, 46, 99, 71, 10, 21

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

3 আরও ভাল উপরের সীমাটি পাওয়া গেছে তবে আপনাকে সেগুলির যত্ন নেওয়ার দরকার নেই।


সম্পর্কিত , তবে সদৃশ নয়। উত্তরগুলি এখানে কাজ করবে না।
স্টিভি গ্রিফিন

আমি তখনই আমার সমাধানে বিএফএস ব্যবহার করেছি, ন্যূনতম সংখ্যা ফ্লিপ সহ সমাধানটি সন্ধানের জন্য এটি এখানে (সামান্য আপডেটের সাথে) কাজ করা উচিত।
মাইল

@ মাইলস এটি পোস্ট করতে নির্দ্বিধায়। আমি সমস্ত উত্তর উত্তর দিয়ে যেতে পারিনি, তবে সর্বাধিক সবেমাত্র নিষ্পাপ পদ্ধতির ব্যবহার করেছি used
স্টিভি গ্রিফিন

উত্তর:


4

পাইথন 2 (পাইপাই) , 238 235 222 বাইট

a=input();n=len(a);r=range(n);a=zip(a,r);a=map(sorted(a).index,a)+[n]
def s(u,m):
 if m<1:return[0]
 for k in r:
  v=u[k::-1]+u[k+1:]
  if sum(1<abs(v[i]-v[i+1])for i in r)<m:
   p=s(v,m-1)
   if p:return[k]+p
print s(a,5*n/3)

* (২ টি স্পেস = ট্যাব)

এটি অনলাইন চেষ্টা করুন!

তালিকার র‌্যাঙ্কিংয়ের জন্য একটি পদ্ধতি ধার করে 13 বাইট সংরক্ষণ করা হয়েছে ।

একটি সাধারণ হিউরিস্টিকযুক্ত ডিএফএস যা পরীক্ষা করে যে কোনও ফ্লিপ "প্যানকেকস" এর একটি জোড়া আলাদা করে কিনা তা বাছাই করার সময় সংলগ্ন হবে। এটি আরোহী ক্রম অনুসারে বাছাই করে। আউটপুটটি বাম থেকে 0-সূচিযুক্ত যেখানে 0 প্রথম 2 এবং অন্যগুলি ফ্লিপ করে। ব্যবহৃত প্যাচসমূহ সংখ্যা (5/3)*n+1 < 5/3*(n+1)যেখানে (18/11)*n < (5/3)*n+1 < 5/3*(n+1)এবং (18/11)*nএকটি কঠিন ঊর্ধ্বসীমা পাওয়া যায় 2009

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.