स्टैकिंग किताबें जब आप आमतौर पर सबसे बड़े वाले को सबसे नीचे रखना चाहते हैं और सबसे छोटे वाले को। हालाँकि, मेरी अव्यक्त OCD मुझे बहुत बेचैनी का अनुभव कराती है अगर मुझे दो किताबें मिलें जहाँ एक छोटी हो (ऊँचाई में) लेकिन दूसरे की तुलना में व्यापक। कोई फर्क नहीं पड़ता कि मैं उन्हें किस क्रम में रखता हूं, शीर्ष पुस्तक एक तरफ नीचे की किताब से आगे बढ़ेगी।
उदाहरण के रूप में, कहते हैं कि एक पुस्तक में आयाम हैं (10,15)
और दूसरे में आयाम हैं (11,14)
। कोई फर्क नहीं पड़ता कि किस तरह से मैंने उन्हें लगाया, मुझे एक ओवरहांग मिला। लेकिन अगर मेरे पास आयामों वाली किताबें हैं (4,3)
और (5,6)
, मैं पहले वाले को नीचे रखकर एक ओवरहैजिंग से बच सकता हूं।
इस चुनौती के प्रयोजनों के लिए हम केवल पुस्तक के संबंध में overhangs पर विचार करेगी तुरंत नीचे । उदाहरण के लिए अगर मैं एक ढेर है (5,5)
, (3,3)
, (4,4)
(किसी भी समझदार व्यक्ति ऐसा होता है कि नहीं), एक की अधिकता के रूप में शीर्ष किताब में गिना जाता है, हालांकि यह नीचे किताब से बाहर भी नहीं करता है। इसी तरह, ढेर (3,3)
, (3,3)
, (4,4)
भी केवल एक की अधिकता, शीर्ष पुस्तक नीचे एक से परे का विस्तार के बावजूद है।
चुनौती
पुस्तक आयामों के लिए पूर्णांक जोड़े की सूची को देखते हुए, उन जोड़ियों / पुस्तकों को क्रमबद्ध करें, जैसे कि ओवरहैंग की संख्या न्यूनतम हो। आपको पुस्तकों को घुमाना नहीं चाहिए - मैं चाहता हूं कि सभी रीढ़ एक ही दिशा का सामना कर रहे हों। यदि एक ही संख्या के ओवरहैंग के साथ कई समाधान हैं, तो आप ऐसा कोई भी आदेश चुन सकते हैं। आपके सॉर्टिंग एल्गोरिथ्म को स्थिर होने की आवश्यकता नहीं है। आपका कार्यान्वयन यह मान सकता है कि पुस्तक के आयाम 2 16 से कम हैं ।
समय की जटिलता: इसे थोड़ा और दिलचस्प बनाने के लिए, आपके एल्गोरिथ्म की असममित सबसे खराब स्थिति को ढेर के आकार में बहुपद होना चाहिए। तो आप बस हर संभव क्रमचय का परीक्षण नहीं कर सकते। कृपया अपने एल्गोरिथ्म की इष्टतमता और जटिलता का एक छोटा सा प्रमाण शामिल करें और वैकल्पिक रूप से एक भूखंड जो बड़े यादृच्छिक आदानों के लिए स्केलिंग दिखाता है। बेशक, आप इनपुट के अधिकतम आकार का उपयोग इस तर्क के रूप में नहीं कर सकते कि आपका कोड O (1) में चलता है।
आप किसी प्रोग्राम या फ़ंक्शन को लिख सकते हैं, किसी भी सुविधाजनक (पूर्वप्रक्रमित) सूची प्रारूप में एसटीडीआईएन, एआरजीवी या फ़ंक्शन तर्क के माध्यम से इनपुट ले सकते हैं और परिणाम को प्रिंट या वापस कर सकते हैं।
यह कोड गोल्फ है, इसलिए सबसे छोटा उत्तर (बाइट्स में) जीतता है।
मुझे विश्वास है कि एक बहुपद-समाधान मौजूद है, लेकिन अगर आप मुझे गलत साबित कर सकते हैं, तो आप गोल्फ प्रूफ प्रस्तुत करने के बजाय इस तरह के प्रमाण प्रस्तुत कर सकते हैं। इस मामले में, आप पी ≠ एनपी मान सकते हैं । मैं पहले सही ऐसे प्रमाण को स्वीकार करूंगा और इसके लिए एक इनाम दूंगा।
उदाहरण
In: [[1, 1], [10, 10], [4, 5], [7, 5], [7, 7], [10, 10], [9, 8], [7, 5], [7, 5], [3, 1]]
Out: [[10, 10], [10, 10], [9, 8], [7, 7], [7, 5], [7, 5], [7, 5], [4, 5], [3, 1], [1, 1]]
In: [[4, 5], [5, 4], [5, 4], [5, 4], [5, 4], [4, 5], [4, 5], [4, 5], [5, 4], [4, 5]]
Out: [[4, 5], [4, 5], [4, 5], [4, 5], [4, 5], [5, 4], [5, 4], [5, 4], [5, 4], [5, 4]]
or [[5, 4], [5, 4], [5, 4], [5, 4], [5, 4], [4, 5], [4, 5], [4, 5], [4, 5], [4, 5]]
In: [[2, 3], [1, 1], [5, 5], [7, 1]]
Out: [[5, 5], [2, 3], [7, 1], [1, 1]]
or [[5, 5], [2, 3], [1, 1], [7, 1]]
or [[7, 1], [5, 5], [2, 3], [1, 1]]
or [[7, 1], [1, 1], [5, 5], [2, 3]]
मैंने इन्हें हाथ से बनाया है, इसलिए मुझे बताएं कि क्या आप कोई गलती करते हैं।