ऐसा लगता है कि लोगों में इसको लेकर दीवानगी बढ़ रही है, जो ड्वोरक या नियो जैसे नए कीबोर्ड लेआउट सीख रहे हैं क्योंकि यह माना जाता है कि यह उन्हें अधिक उत्पादक बनाता है। मेरा तर्क है कि कीबोर्ड लेआउट को बदलना एक बुरा विचार है, क्योंकि इसे गति प्राप्त करने में आपको महीनों लग सकते हैं, और जब आप बाकी की तुलना में 5% अधिक तेज होते हैं, तो आपको एक कंप्यूटर पर टाइप करने की आवश्यकता होती है, जो कि isn है 'अपना नहीं।
इसके अलावा, ये सभी लोग भूल जाते हैं कि आधुनिक संचार में असली अड़चन कहाँ है - टेलीफोन कीपैड।
इस तरह आपका औसत टेलीफोन कीपैड दिखता है:
पत्र 'आर ’बटन 7 पर तीसरा अक्षर है; इसलिए यदि आप मोबाइल फोन पर 'r' अक्षर टाइप करते हैं, तो आप 7 बार बटन दबाएंगे, 's' के लिए आप इसे 4 बार दबाएंगे, और 'a' के लिए आप बटन एक बार दबाएंगे।
इसे ध्यान में रखते हुए, 'डी' के बाद 'ई' डालना शायद एक बुरा निर्णय था - अंग्रेजी वर्णमाला में 'ई' सबसे अधिक इस्तेमाल किया जाने वाला पत्र है, इसलिए, यदि आप "डीईएफ" के बजाय बटन 3 "ईडीएफ" को लेबल करते हैं, तो आप काफी कीस्ट्रोक्स को बचाएगा।
इसके अलावा, आप शायद खुद को अनुभव करते हैं कि एक ही बटन को साझा करने वाले 2 अक्षर टाइप करना एक उपद्रव है - यदि आप "टीयू" लिखना चाहते हैं, तो आप सिर्फ 8 तीन बार नहीं मार सकते, क्योंकि इससे 'वी' का परिणाम होगा। इसलिए आमतौर पर आप 'टी' लिखेंगे, फिर स्पेस मारा जाएगा, फिर बैकस्पेस मारा जाएगा, और फिर 'यू' लिखा जाएगा, जो 3 के बजाय 5 बटन प्रेस के बराबर है।
टी एल; डॉ
इन दो नियमों को देखते हुए:
- एक अक्षर n बार बटन दबाकर टाइप किया जाता है, जहां n बटन की लेबल पर अक्षर की स्थिति कहां है
- एक ही बटन का उपयोग करके टाइप किए गए दो अक्षरों को लिखने के लिए अतिरिक्त 2 बटन प्रेस की आवश्यकता होती है
टेलीफोन कीबोर्ड लेआउट क्या है जिसे एक विशिष्ट पाठ के लिए कम से कम बटन प्रेस की आवश्यकता होती है? आपको केवल बटन का उपयोग करना चाहिए 2-9, 1 और 0 विशेष प्रतीकों के लिए आरक्षित हैं।
इनपुट
जिस पाठ के लिए आपको इष्टतम लेआउट ढूंढना चाहिए वह स्टड के माध्यम से दिया गया है। आपको लोअरकेस वर्णमाला के अलावा कुछ भी संभालने की आवश्यकता नहीं है और यह मान सकते हैं कि इनपुट में केवल वही शामिल है। आप यह भी मान सकते हैं कि इनपुट टेक्स्ट यथोचित रूप से बड़ा है और प्रत्येक अक्षर कम से कम एक बार, यदि वह मदद करता है, तो वहाँ है।
उत्पादन
मैं आउटपुट पर बहुत सारी अड़चनें नहीं डालना चाहता, क्योंकि कभी-कभी कुछ भाषाओं को दूसरों पर लाभ मिलता है; हालाँकि, आपकी भाषा से पता चलता है कि सरणियाँ ठीक हैं, वैकल्पिक रूप से आप प्रत्येक लेबल को एक नई पंक्ति के साथ अलग कर सकते हैं।
कई संभावित इष्टतम लेआउट हो सकते हैं, आप उनमें से किसी एक को प्रिंट कर सकते हैं। यहाँ एक सरल उदाहरण दिया गया है:
>> echo "jackdawslovemybigsphinxofquartz" | foo.sh
ojpt
avhz
cen
skm
dyf
wbq
ixu
lgr
बोनस अंक
-35 यदि आपका एल्गोरिथ्म सभी संभावित लेआउट के लिए बाध्य नहीं कर रहा है (मैं यहां हास्केल के `क्रमपरिवर्तन 'को देख रहा हूं)
-3 यदि आपका कोड एक टेक्स्ट संदेश (140 वर्ण) के अंदर फिट बैठता है और आप अपना एक कोड अपने दोस्त को भेजते हैं, तो आप उसका एक चित्र पोस्ट करते हैं।
यह StackExchange पर मेरी पहली चुनौती है। मुझे यह सुनकर खुशी होगी कि आपको यह पसंद है, या इसके बारे में कोई अन्य प्रतिक्रिया है!
26! / (2! * 6!) = 280,063,514,671,253,913,600,000 > 2^77
अद्वितीय क्रमपरिवर्तन हैं, तो केवल एक बार कुंजी की सरल व्यवस्थाओं को गिनना।