पृष्ठभूमि
बारह-सिक्का समस्या एक क्लासिक बैलेंस पहेली है जो आमतौर पर नौकरी के साक्षात्कार में उपयोग की जाती है। यह पहेली पहली बार 1945 में सामने आई थी और मेरे पिता द्वारा मेरे पिता को दी गई थी जब उन्होंने मेरी माँ से शादी करने के लिए कहा था! पहेली में बारह सिक्के हैं, जिनमें से एक या तो दूसरों की तुलना में भारी या हल्का है (आपको पता नहीं है कि कौन सा है)। समस्या अद्वितीय सिक्के को निर्धारित करने के लिए तीन बार एक संतुलन तराजू का उपयोग करना है। कुछ बदलावों में, यह पहचानना भी आवश्यक है कि सिक्का भारी है या हल्का।
यहां कार्य में सबसे खराब स्थिति में संभवतया कम से कम वजन का उपयोग करते हुए, एन सिक्कों से जुड़ी सामान्य समस्या को हल करना शामिल है । यह पहचानना आवश्यक नहीं है कि सिक्का भारी है या हल्का है, केवल एक ही है। इसके अलावा, आपके पास दिए गए सेट के बाहर किसी भी अतिरिक्त सिक्के तक पहुंच नहीं है (जो, उत्सुकता से, एक फर्क पड़ता है)।
यह पता चलता है कि k वज़न (3 ^ k-1) / 2 सिक्कों के लिए पर्याप्त है (इसलिए इस भिन्नता में 4 वज़न वास्तव में 13 सिक्कों को संभाल सकते हैं)। इसके अलावा (और आश्चर्यजनक रूप से), यह संभव है (लेकिन यहां आवश्यक नहीं है) अग्रिम में तौल के पूर्ण सेट का चयन करने के बजाय, भविष्य के वजन पिछले परिणामों पर निर्भर करते हैं। दो संभावित समाधानों के विवरण के लिए, यह पेपर और यह Quora उत्तर देखें ।
कार्य
एक फ़ंक्शन या प्रोग्राम लिखें, एक पूर्णांक n को इनपुट के रूप में STDIN, कमांड-लाइन तर्क या फ़ंक्शन तर्क के साथ लें, जो कि सबसे खराब स्थिति में संभवतम कम से कम वज़न का उपयोग करके n सिक्कों के लिए समस्या को हल करता है । कार्यक्रम चाहिए:
1,2,3-4,5,6
पैमाने के प्रत्येक तरफ सिक्कों की सूचियों को इंगित करने के लिए प्रारूप में STDOUT के लिए वजन का प्रिंट करें । तौले जाने वाले किसी भी सिक्के का उल्लेख नहीं किया जाना चाहिए। सिक्कों को स्पष्ट रूप से 1 से n तक गिना जाता है और संख्यात्मक क्रम में मुद्रित नहीं किए जाने की आवश्यकता होती है (इसलिए2,1-3,4
जैसा है1,2-3,4
)।- प्रत्येक वजन के बाद कार्यक्रम को एसटीडीआईएन के माध्यम से एक इनपुट पर इंतजार करना चाहिए, जो होना चाहिए
<
,=
या>
, यह दर्शाता है कि पैमाने के बाईं ओर हल्का है, समान है, या दाईं ओर से भारी है। - अंतिम तौल परिणाम के बाद, प्रोग्राम को अद्वितीय सिक्के की संख्या को प्रिंट या वापस करना चाहिए।
- प्रोग्राम को उपयोगकर्ता से असंगत परिणाम इनपुट को संभालने की आवश्यकता नहीं है।
- कार्यक्रम को 3 से कम n हैंडल करने की आवश्यकता नहीं है ।
उदाहरण आउटपुट
>> 3
1-2
>> =
1-3
>> <
3
# using Quora algorithm
>> 13
1,2,3,4-5,6,7,8
>> <
1,2,5-3,4,6
>> >
3-4
>> <
3
# using paper algorithm
>> 13
1,2,3,4-5,6,7,8
>> <
2,6,7,9-3,8,10,11
>> >
6,8,10,12-4,5,7,11
>> =
3
स्कोरिंग
सबसे छोटा कोड जीतता है। मानक नियम लागू होते हैं।