पैनकेक सॉर्टिंग आकार के क्रम में पेनकेक्स के एक अव्यवस्थित स्टैक को छांटने की गणितीय समस्या के लिए बोलचाल की अवधि है, जब स्टैक में किसी भी बिंदु पर एक स्पैटुला डाला जा सकता है और इसके ऊपर सभी पेनकेक्स को फ्लिप किया जा सकता है। एक पैनकेक नंबर P (n) n पेनकेक्स के लिए आवश्यक न्यूनतम फ्लैप है। 1
1979 में, एक युवा बिल गेट्स और क्रिस्टोस पापादिमित्रिउ ने P (n) = (5n + 5) / 3 की ऊपरी सीमा साबित करते हुए एक पत्र लिखा । 2
मुझे लगता है कि यह मान लेना सुरक्षित है कि गेट्स (और / या पापादिमित्रिउ) ने एल्गोरिथ्म का उपयोग करके पैनकेक छांटने का एक कार्यक्रम लिखा था, जो उन्होंने विकसित किया था (संभवतः 1979 के बाद)। चूंकि गेट्स एक कुशल प्रोग्रामर थे, उन्होंने संभवतः इस कोड को गोल्फ के साथ-साथ वे करने की कोशिश की, लेकिन स्रोत कोड का आकार सार्वजनिक रूप से उपलब्ध नहीं है (AFAIK)।
चुनौती:
एक फ़ंक्शन / प्रोग्राम बनाएं जो पैनकेक सॉर्टिंग करता है, जहां अधिकतम संख्या में फ़्लिप गेट्स और पापादिमित्रिउ द्वारा पाए गए बाउंड से अधिक नहीं है। 3 यदि आप सूची को आरोही या अवरोही चाहते हैं, तब तक आप इसे चुन सकते हैं, जब तक यह सुसंगत है।
आप मान सकते हैं कि n <50 । इसलिए आपको फ़्लिप की संख्या को सीमित करना होगा (कुछ बेतरतीब ढंग से चयनित n- स्तर):
n P(n)
38 65
49 83
50 85
आउटपुट प्रत्येक फ्लिप से पहले स्पैटुला की स्थिति होना चाहिए। उत्पादन शून्य या एक-अनुक्रमित हो सकता है, और यदि आप ऊपर या नीचे से गिनते हैं, तो आप चुन सकते हैं।
अतिरिक्त नियम:
- रनटाइम निर्धारक होना चाहिए
- कोई निश्चित समय सीमा नहीं है, लेकिन आपको 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 बेहतर ऊपरी सीमाएं मिली हैं, लेकिन आपको उन लोगों की परवाह करने की आवश्यकता नहीं है।