यह प्रश्न इस बात पर आधारित है कि मैं दूसरे प्रश्न का उत्तर देने के लिए क्या आया था ।
कभी-कभी यहाँ प्रश्न कुछ ASCII कला खींचने के लिए कहते हैं। कला के लिए डेटा संग्रहीत करने का एक सरल तरीका RLE (रन-लेंथ एन्कोडिंग) है । इसलिए:
qqqwwwwweeerrrrrtttyyyy
हो जाता है:
3q5w3e5r3t4y
अब एक बड़ी ASCII कला बनाने के लिए आपको शायद इस तरह से डेटा मिल रहा है (नई पंक्ति वर्णों की अनदेखी):
19,20 3(4)11@1$20 11@19,15"4:20 4)19,4:20 11@
^^^
Note that this is "20 whitespaces"
(Character count: 45)
ASCII कला के लिए उपयोग किए जाने वाले वर्ण कभी भी कम या अपरकेस अक्षर या संख्या नहीं होने वाले हैं, केवल संकेत, चिह्न और प्रतीक लेकिन हमेशा मुद्रण योग्य ASCII वर्ण सेट में।
आप उस स्ट्रिंग में कुछ स्थान बचाना चाहते हैं, इसलिए आप संख्याओं को अपरकेस वर्ण सेट से प्रतिस्थापित करते हैं ('ए' 1 के बराबर है, 'बी' 2 के बराबर है जब तक 'जेड' 26 के बराबर है), क्योंकि आप कभी भी नहीं जा रहे हैं एक चरित्र के 26 से अधिक दोहराव प्राप्त करें। तो आप प्राप्त करें:
S,T C(D)K@A$T K@S,O"D:T D)S,D:T K@
(Character count: 34)
और अंत में आप नोटिस करते हैं कि (अक्षर + प्रतीक) के कुछ समूह दोहरा रहे हैं, इसलिए आप उन समूहों को प्रतिस्थापित करते हैं जो स्ट्रिंग में लोअरकेस कैरेक्टर सेट, क्रम या उपस्थिति में स्ट्रिंग में 3 बार या अधिक दिखाई देते हैं, लेकिन बफर में स्टोर करना किए गए प्रतिस्थापन (प्रत्येक प्रतिस्थापन के लिए प्रारूप "समूह + प्रतिस्थापन चार" में), और बाकी स्ट्रिंग को छोड़ दें जैसा कि है। तो निम्नलिखित समूह:
S, (3 times)
T (4 times)
K@ (3 times)
क्रमशः 'a', 'b' और 'c' द्वारा प्रतिस्थापित किया जाता है, क्योंकि दोहराए जाने वाले 26 से अधिक समूह कभी नहीं होंगे। तो अंत में आपको मिलता है:
S,aT bK@c
abC(D)cA$bcaO"D:bD)aD:bc
(Character count: 9+24=33)
[अंतिम चरण केवल 1 बाइट बचाता है क्योंकि जिन समूहों को प्रतिस्थापित किए जाने के बाद वास्तव में पात्रों को बचाया जाता है वे 4 गुना या उससे अधिक दिखाई दे रहे हैं।]
चुनौती
एक ASCII कला (प्रस्तावित प्रतिबंधों के साथ) खींचने के लिए RLE डेटा युक्त एक स्ट्रिंग को देखते हुए, इसे वर्णित करने के लिए सबसे छोटा प्रोग्राम / फ़ंक्शन / विधि लिखें, जिसे आप कर सकते हैं। एल्गोरिथ्म को दो स्ट्रिंग्स को प्रिंट / वापस करना होगा: पहला जिसमें कम्प्रेशन के लिए इस्तेमाल किया गया डिक्शनरी है, और दूसरा जिसके परिणामस्वरूप कंप्रेस्ड स्ट्रिंग है। आप दिए गए क्रम में टुपल, एक सरणी, सूची या जो भी हो, स्ट्रिंग्स को वापस कर सकते हैं।
ध्यान दें कि यदि स्ट्रिंग को चरण 2 में संपीड़ित नहीं किया जा सकता है, तो एल्गोरिथ्म को पहले रिटर्न मान के रूप में एक खाली स्ट्रिंग वापस करना होगा और चरण 1 का परिणाम दूसरे वापसी मूल्य के रूप में होना चाहिए।
आपको आउटपुट मानों में चरण 1 के परिणाम को शामिल करने की आवश्यकता नहीं है, मैं सिर्फ स्पष्टीकरण उद्देश्यों के लिए उन्हें उदाहरणों में शामिल करता हूं।
यह कोड-गोल्फ है , इसलिए प्रत्येक भाषा की जीत के लिए सबसे कम उत्तर हो सकता है!
एक और परीक्षण मामला
Input: 15,15/10$15,15/10"10$10"10$10"10$10"15,15/
Output of step 1: O,O/J$O,O/J"J$J"J$J"J$J"O,O/
Final algorithm output: O,aO/bJ$cJ"d
abcabdcdcdcdab
---
Input: 15,15/10$15,15/10"
Output of step 1: O,O/J$O,O/J"
Final algorithm output: <empty string>
O,O/J$O,O/J"
S,aT bK@c
संभवत: S,T K@
प्रतिस्थापन पात्रों के नामकरण के बिना ही संग्रहीत किया जाएगा , जो कि उससे मामूली रूप से घटाया जा सकता है।