सोमवार मिनी गोल्फ: शॉर्ट कोड-गोल्फ चुनौतियों की एक श्रृंखला , हर सोमवार (उम्मीद!) पोस्ट की गई।
(क्षमा करें यह थोड़ी देर है।)
मुझे यकीन है कि आप में से अधिकांश लोगों ने लेवेंसहाइट दूरी के बारे में सुना होगा , दो तारों के बीच की दूरी की गणना करने के लिए एक एल्गोरिथ्म। खैर, यह चुनौती मेरे स्वयं के आविष्कार * के समान एल्गोरिथ्म को लागू करने के बारे में है, जिसे एनाग्राम दूरी कहा जाता है । मुख्य अंतर यह है कि पात्रों का क्रम मायने नहीं रखता है; इसके बजाय, केवल वे अक्षर जो एक स्ट्रिंग या दूसरे से अद्वितीय हैं, को मापा जाता है।
चुनौती
चुनौती का लक्ष्य एक प्रोग्राम या फ़ंक्शन लिखना है जो दो तारों में लेता है और उन दोनों के बीच विपर्यय दूरी लौटाता है। ऐसा करने का मुख्य तरीका निम्नलिखित तर्क का उपयोग करना है:
- दोनों स्ट्रिंग्स को लोअरकेस में बदलें और (वैकल्पिक रूप से) प्रत्येक के वर्णों को वर्णानुक्रम में सॉर्ट करें।
- जबकि स्ट्रिंग्स में कम से कम एक समान वर्ण होता है, प्रत्येक स्ट्रिंग से इस वर्ण का पहला उदाहरण निकालें।
- शेष तार की लंबाई जोड़ें और परिणाम को वापस करें / आउटपुट करें।
उदाहरण
यदि इनपुट हैं:
Hello, world!
Code golf!
फिर, निचले स्तर और क्रमबद्ध, ये बन जाते हैं: (जेएस के डिफ़ॉल्ट प्रकार से, प्रमुख रिक्त स्थान पर ध्यान दें)
!,dehllloorw
!cdefgloo
उन सभी वर्णों को हटा देना जो दोनों तारों में हैं, हम समाप्त होते हैं:
,hllrw
cfg
इस प्रकार, मूल दो तारों के बीच विपर्यय दूरी = 6 + 3 = 9।
विवरण
- तार किसी भी समझदार प्रारूप में लिए जा सकते हैं।
- स्ट्रिंग्स में केवल मुद्रण योग्य ASCII शामिल होगा।
- स्ट्रिंग्स में स्वयं नियमित स्थानों के अलावा कोई व्हाट्सएप नहीं होगा। (कोई टैब, नया अंक आदि नहीं)
- आपको इस सटीक एल्गोरिदम का उपयोग करने की आवश्यकता नहीं है, जब तक कि परिणाम समान हैं।
परीक्षण के मामलों
इनपुट 1:
Hello, world!
Code golf!
आउटपुट 1:
9
इनपुट 2:
12345 This is some text.
.txet emos si sihT 54321
आउटपुट 2:
0
इनपुट 3:
All unique characters here!
Bdfgjkmopvwxyz?
आउटपुट 3:
42
इनपुट 4:
This is not exactly like Levenshtein distance,
but you'll notice it is quite similar.
आउटपुट 4:
30
इनपुट 5:
all lowercase.
ALL UPPERCASE!
आउटपुट 5:
8
स्कोरिंग
यह कोड-गोल्फ है , इसलिए बाइट्स जीत में सबसे कम वैध कोड है। टाईब्रेकर प्रस्तुत करने के लिए जाता है जो पहले अपने अंतिम बाइट की गिनती तक पहुंच गया। विजेता को अगले सोमवार, 12 अक्टूबर को चुना जाएगा। शुभकामनाएँ!
संपादित करें: एक आश्चर्यजनक 12 बाइट्स के लिए पायथ (फिर से) का उपयोग करके विजेता, @isaacg को बधाई !
* यदि इस एल्गोरिथ्म का कहीं और उपयोग किया गया है और / या कोई अन्य नाम दिया गया है, तो कृपया मुझे बताएं! मैं इसे 20 मिनट की खोज के साथ खोजने में सक्षम नहीं था।