डबल रन-लंबाई एन्कोडिंग


9

हर कोई जानता है कि रन-लेंथ एन्कोडिंग क्या है। यह पहले से ही कई कोड-गोल्फ चुनौतियों का विषय रहा है। हम एक निश्चित बदलाव को देख रहे हैं।

उदाहरण

Normal: 11222222222222222222233333111111111112333322
Run-length: 112(19)3(5)1(11)2333322

कोष्ठक में संख्या पिछले प्रतीक के समय की संख्या को निर्दिष्ट करती है। उदाहरण में, केवल 5 या अधिक वर्णों के रन एन्कोड किए गए थे। ऐसा इसलिए है क्योंकि 4 या उससे कम के रन एन्कोडिंग चरित्र गणना में सुधार नहीं करते हैं।

चुनौती

एक फ़ंक्शन / प्रोग्राम लिखें जो रन-लंबाई एन्कोडिंग के इस भिन्नता को लागू करता है, लेकिन दो प्रतीकों के रन को भी एन्कोड कर सकता है। दो प्रतीकों के रन को कोष्ठक में भी संलग्न किया जाना चाहिए। एक समूह कोष्ठकों में भी संलग्न किया जाएगा। आपके प्रोग्राम को एक स्ट्रिंग को इनपुट के रूप में स्वीकार करना चाहिए, और संशोधित स्ट्रिंग को आउटपुट में बदलना चाहिए जो स्ट्रिंग को छोटा करता है।

उदाहरण

Normal: 111244411144411144411167676767222222277777222222277777123123123123
Double run-length: 1112((444111)(3))67676767((2(7)7(5))(2))123123123123

टिप्पणियाँ

  • 111एन्कोडेड नहीं था क्योंकि इसे एन्कोडिंग ( 1(3)) छोटा नहीं है।
  • स्ट्रिंग 4441113 बार होती है इसलिए यह एन्कोडेड है।
  • 676767((67)(4))पहले की तुलना में लंबा होने के कारण एन्कोड नहीं किया गया था ।
  • 222222277777222222277777के रूप में एन्कोड नहीं किया गया था ((222222277777)(2))। क्यों? क्योंकि 222222277777खुद को कम किया जा सकता है 2(7)7(5)
  • 123123123123 एन्कोडेड नहीं है क्योंकि आपके प्रोग्राम को तीन नहीं, बल्कि दो प्रतीकों के रनों को संभालना है।

ये है इतना कम कोड जीतता है। टाई-ब्रेकर जल्दी प्रस्तुत करना है।


अगर मैं कुछ भी याद किया, या आप कुछ भी अनिश्चित हैं तो कृपया मुझे टिप्पणियों में सूचित करें।


लेकिन 4 67एस हैं।
लीकी नून

क्या हमें संभालना होगा 441444144414-> ((4414)(3))?
लीकी नून

मैंने इसे ठीक कर लिया है।
ericw31415

@ केनीलाऊ नहीं, तुम नहीं करोगे। 4414तकनीकी रूप से 4 की एक श्रृंखला है। मेरा शब्दांकन सिर्फ बुरा है।
ericw31415

के 111111111रूप में एन्कोड किया जा सकता है (1)(9)?
कैलक्यूलेटरफल

जवाबों:


2

रेटिना, 162 बाइट्स

+{`((\d)\2*(?!\2)(\d)\3*|\d)(?<1>\1)+
<<$1><$#1>>
<<([^<>]{1,7})><2>>
$1$1
<<([^<>]{1,3})><3>>
$1$1$1
<<([^<>]{1,2})><4>>
$1$1$1$1
}`<<(.)><(\d+)>>
$1($2)
T`<>`()

इसे ऑनलाइन आज़माएं!


यदि आप इनपुट करते हैं 10101010100100100100100, तो आउटपुट है ((10)(5))0((100)(4)), फिर ((10)(4))((100)(5))भी एक वर्ण छोटा होगा।
मार्व

क्या आपको वास्तव में ऐसे सीमांत टेस्टेसिस का उपयोग करना है ....
लीक नून

हाँ, यह सब मज़ेदार है! : ^)
मार्व

यह हास्यास्पद है कि वर्तमान में केवल यही एक उत्तर है।
ericw31415
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.