एक साधारण N- अंकीय संयोजन लॉक में N घूर्णन डिस्क होती है। प्रत्येक डिस्क में 0-9 अंक अंकित होते हैं, और इसे खोलने के लिए आपको उन्हें सही पासवर्ड की ओर मोड़ना होगा। जाहिर है, यदि आप पासवर्ड नहीं जानते हैं, तो आपको इसे अनलॉक करने से पहले अधिकतम 10 N बार कोशिश करनी होगी । यह दिलचस्प नहीं है।
तो चलो संयोजन लॉक के एक संस्करण पर विचार करें, इसे दूरी-खुलासा ताला नाम दें।
दूरी-खुलासा ताला खोलने के हर असफल प्रयास में, यह अनलॉक करने के लिए न्यूनतम आंदोलनों का जवाब देगा।
एक आंदोलन उदाहरण के लिए इसे से 1 आंदोलन की जरूरत है, एक स्थान से एक रोटेशन के रूप में परिभाषित किया गया है 890
करने के लिए 899
, और से 9 आंदोलनों 137
के लिए 952
।
चुनौती
अपने पासवर्ड अज्ञात के साथ एक दूरी-खुलासा ताला को देखते हुए, प्रोग्राम को बहुत लंबे समय तक रखने से कम से कम प्रयासों (आंदोलनों नहीं) के साथ लॉक को खोलने का प्रयास करें ।
नियम और स्कोरिंग
- आपको एक पूर्ण कार्यक्रम लिखना चाहिए जो स्टड से इनपुट करता है और स्टडआउट को आउटपुट करता है। कार्यक्रम को निम्नानुसार इनपुट / आउटपुट करना चाहिए:
Start
Input an integer N (number of digits) from stdin
Do
Output a line containing decimal string of length N (your attempt) to stdout
Input an integer K (response of the lock) from stdin
While K not equal 0
End
आपके प्रोग्राम को N = 200 तक संभालना चाहिए, और किसी भी इनपुट पर 5 सेकंड से कम चलना चाहिए।
उत्पादन में अग्रणी शून्य को छोड़ा नहीं जाना चाहिए।
हर लंबाई के लिए 5 टेस्टडेटा हैं, इसलिए टेस्टडेटा की कुल संख्या 1000 है। टेस्टडेटा यादृच्छिक रूप से उत्पन्न होता है।
अंतिम स्कोर होगा (सभी टेस्टडेटा में अनुमानों की कुल संख्या) * ln (बाइट्स में कोड की लंबाई + 50)। सबसे कम स्कोर जीतता है। (ln प्राकृतिक लॉग है)
मैं आपके लिए कार्यक्रम बनाऊंगा। यदि आप जानना चाहते हैं कि मैं आपका कार्यक्रम कैसे बनाऊंगा, या आप इसे खुद से स्कोर करना चाहते हैं, तो इस पोस्ट पर पिछले संस्करणों पर एक नज़र डालें ।
यह चुनौती 2017/12/07 14:00 UTC पर समाप्त होगी। मैं तब अपना समाधान पोस्ट करूंगा।
चल रहा उदाहरण
रेखाएँ >
इनपुट से शुरू होती हैं , और अन्य प्रोग्राम आउटपुट का प्रतिनिधित्व करती हैं।
आपके दिमाग में एक पासवर्ड हो सकता है और इसे परीक्षण करने के लिए अपने कार्यक्रम के साथ बातचीत कर सकते हैं।
> 3 # 3-digit lock. The hidden password is 746
000 # 1st guess (by program)
> 11 # response to the 1st guess
555 # 2nd guess
> 4 # ...
755
> 2
735
> 2
744
> 2
746 # finally the correct answer! The program attempts 6 times.
> 0 # this is not necessary
नमूना कार्यक्रम
संपादित करें: शायद ऊपर इनपुट / आउटपुट प्रारूप स्पष्ट नहीं था। यहां पाइथन में एक नमूना कार्यक्रम है।
पायथन, 369 बाइट्स, कुल प्रयासों की संख्या = 1005973, स्कोर = 6073935
import sys
N = int(input()) # get the lock size
ans = ''
for i in range(N): # for each digit
lst = []
for j in range(10): # try all numbers
print('0' * i + str(j) + '0' * (N - i - 1)) # make a guess
result = int(input()) # receive the response
lst.append(result)
ans += str(lst.index(min(lst)))
print(ans) # output the final answer
चुनौती को आसान बनाने के लिए जोनाह को धन्यवाद ।
162751*ln(388+50)=989887
।