विम में, आप एक संख्या को पूर्व की तरह एक कमांड दोहरा सकते हैं, जैसे 3dd
कि इसके बराबर है dd dd dd
। खैर, यह दोहराव पैटर्न विम आज्ञाओं तक सीमित नहीं है। स्ट्रिंग को इस तरह से भी दोहराया जा सकता है।
विशिष्टता:
एक स्ट्रिंग को देखते हुए, केवल अंकों, वर्णमाला वर्णों (ऊपरी-ऊपरी और निचले-मामले दोनों) और रिक्त स्थान से युक्त, एक वैकल्पिक अनुगामी न्यूलाइन के साथ, इनपुट के रूप में, एक प्रोग्राम लिखें जो निम्न कार्य करता है:
प्रत्येक "शब्द" में अंक और अक्षर होते हैं। यदि कोई अक्षर एक संख्या से पहले है (एक संख्या में एक से अधिक अंक हो सकते हैं, या संख्या शून्य है), उस पत्र को दिए गए समय के लिए दोहराएं। उदाहरण के लिए:
a2bc -> abbc 3xx1yz -> xxxxyz 10ab0c0d0e -> aaaaaaaaaab # No 'cde' because there's a zero 2A2a2A2a -> AAaaAAaa
शब्दों को रिक्त स्थान द्वारा अलग किया जाता है। प्रत्येक दो आसन्न शब्दों के बीच अधिकतम एक स्थान होता है।
आसान है, है ना? यहाँ अतिरिक्त सामान है:
यदि स्थान से पहले कोई संख्या है, तो दिए गए समय के लिए अगला शब्द दोहराएं। संख्या हमेशा पिछले शब्द के अंत में, या स्ट्रिंग की शुरुआत में संलग्न होगी। उदाहरण:
a2bc3 2d -> abbc dd dd dd 3 3a -> aaa aaa aaa 33a -> aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa 0 abcd0 efgh3 2x -> xx xx xx a3 0xc b -> a c c c b
यदि एक खाली शब्द दोहराया जाना चाहिए, तो एक पंक्ति में कई रिक्त स्थान का उत्पादन न करें। उन्हें स्क्वाश करें:
a3 0x2 b -> a b b # NOT 'a b b'
दूसरे शब्दों में, आपके प्रोग्राम को कभी भी दो स्थानों को एक साथ आउटपुट नहीं करना चाहिए।
इनपुट कभी खाली नहीं होता है, लेकिन आउटपुट के गैर-रिक्त होने के लिए यह आवश्यक नहीं है:
0 3x -> (empty)
इनपुट और आउटपुट को किसी भी पसंदीदा तरीके से लिया जा सकता है। तर्कों से इनपुट लेने और रिटर्न वैल्यू के जरिए आउटपुट देने के साथ ही एक फंक्शन स्वीकार्य है।
यदि यह एक कार्यक्रम है, तो इसे त्रुटि के साथ बाहर नहीं निकलना चाहिए (यानी रिटर्न मान शून्य है)।
संख्या हमेशा दशमलव होती है, और कभी भी शून्य से शुरू नहीं होती है, जब तक कि संख्या स्वयं शून्य नहीं होती है, उस स्थिति में केवल एक शून्य होता है। यानी आपको इनपुट के रूप में विचार करने
077a
या000a
दिए जाने की आवश्यकता नहीं है ।सभी नंबर 2 ^ 31 (2,147,483,648) के अंतर्गत हैं। अधिकतम उत्पादन लंबाई 2 ^ 32 (4,294,967,296) बाइट्स के अंतर्गत है।
कार्यक्रम वैकल्पिक रूप से एक अनुगामी स्थान और / या एक अनुगामी न्यूलाइन का उत्पादन कर सकता है। वे स्थान और न्यूलाइन आउटपुट की वैधता को प्रभावित नहीं करते हैं। यहां तक कि अगर सही आउटपुट खाली होना चाहिए, तो एक नईलाइन द्वारा पीछा किए गए स्थान का एक आउटपुट योग्य होगा।
संक्षेप में, एक वैध इनपुट इस नियमित अभिव्यक्ति से मेल खाता है:
([0-9]+ )?([0-9A-Za-z]*[A-Za-z])([0-9]* [0-9A-Za-z]*[A-Za-z])*( ?\n?)
और एक वैध उत्पादन के लिए:
([A-Za-z]+)( [A-Za-z]+)*( ?\n?)
नमूना परीक्षण के मामले:
abcdefg -> abcdefg
a3bcd -> abbbcd
a3bbbc -> abbbbbc
3a0b -> aaa
abc 3d -> abc ddd
abc3 d -> abc d d d
5 1x5 1y0 z -> x x x x x y y y y y
a999 0x b -> a b
999 0s -> (empty)
0 999s -> (empty)
0 999s4 t -> t t t t
a3 0xc b -> a c c c b
ABC3 abc -> ABC abc abc abc
यह एक कोड-गोल्फ है , इसलिए प्रत्येक भाषा में बाइट्स में सबसे छोटा कार्यक्रम जीत जाता है!
a3 0xc b
-> a c c c b
जोड़ा जाना चाहिए, क्योंकि मेरे पास मूल रूप से कोड था जो ऊपर दिए गए सभी परीक्षण मामलों के लिए काम करता था, लेकिन उसके लिए सही तरीके से काम नहीं किया।