रेटिना , 293 + 15 = 308 314 385 बाइट्स
;`\s
_
;`\\
/
;`.+
o$0iio
;+`(o(?=/.*(i)|L.*(ii)|V.*(io)|_)|i(?=/.*(io)|L.*(o)|_.*(ii)|V.*(i))).
$1$2$3$4$5$6$7$8
;`o
<empty>
;`ii$
#:0123456789
;+`^(?=i)(i*)\1{9}(?=#.*(0)|i#.*(1)|ii#.*(2)|iii#.*(3)|iiii#.*(4)|iiiii#.*(5)|iiiiii#.*(6)|iiiiiii#.*(7)|iiiiiiii#.*(8)|iiiiiiiii#.*(9))
$1#$2$3$4$5$6$7$8$9$10$11
:.*|\D
<empty>
प्रत्येक पंक्ति एक अलग फ़ाइल में जाती है, इसलिए मैंने बाइट संख्या में 13 जोड़ दिए हैं। वैकल्पिक रूप से, आप उस सभी को एकल फ़ाइल में रख सकते हैं और -s
ध्वज का उपयोग कर सकते हैं । <empty>
वास्तव में खाली फाइल या लाइनों के लिए खड़े।
दुर्भाग्य से, परिणाम को दशमलव से दशमलव में बदलने के लिए मुझे 187 बाइट्स की आवश्यकता है। मुझे लगता है कि मुझे वास्तव में इसे जल्द ही लागू करना चाहिए ।
व्याख्या
रेटिना एक रेगेक्स-आधारित भाषा है (जो मैंने रेगेक्स के साथ इस तरह से सामान करने में सक्षम होने के लिए लिखा था)। फ़ाइलों / लाइनों की प्रत्येक जोड़ी एक प्रतिस्थापन चरण को परिभाषित करती है, जिसमें पहली पंक्ति पैटर्न और दूसरी पंक्ति प्रतिस्थापन स्ट्रिंग होती है। पैटर्नों को पूर्व- `
निर्धारित कॉन्फ़िगरेशन स्ट्रिंग द्वारा पूर्ववर्ती किया जा सकता है , जिसमें सामान्य रेगेक्स संशोधक, साथ ही कुछ रेटिना-विशिष्ट विकल्प भी हो सकते हैं। उपरोक्त कार्यक्रम के लिए, प्रासंगिक विकल्प हैं ;
, जो उस चरण के आउटपुट को दबा देता है और +
, जो परिणाम बदलने तक एक लूप में प्रतिस्थापन को लागू करता है।
समाधान का विचार प्रत्येक पंक्ति को अलग से गिनना है, क्योंकि हम हमेशा पहले से ही सामना किए गए वर्णों से तय कर सकते हैं कि क्या हम बहुभुज के अंदर या बाहर हैं। इसका मतलब यह भी है कि मैं पूरी चीज को एक लाइन में शामिल कर सकता हूं, क्योंकि एक लाइन की शुरुआत और अंत हमेशा बहुभुज के बाहर होते हैं। हम यह भी नोट कर सकते हैं कि _
और लाइन स्वीप एल्गोरिथ्म के लिए अंतरिक्ष पूरी तरह से समान हैं, साथ ही साथ \
और /
। तो पहले कदम के रूप से मैं सभी नई-पंक्तियों और रिक्त स्थान को बदलने के _
लिए और सभी \
के द्वारा /
बाद में कुछ कोड को आसान बनाने के।
मैं वर्णों के साथ वर्तमान / अंदर के राज्य का ट्रैक रख रहा हूं i
और o
, i
क्षेत्र का मिलान करने के लिए भी । ऐसा करने के लिए मैं o
जुड़ने के लिए एक लाइन से जुड़कर शुरू करता हूं कि हम बहुभुज के बाहर हैं। मैं iio
इनपुट के बहुत अंत में भी जोड़ रहा हूं , जिसे मैं नए वर्ण उत्पन्न करने के लिए लुकअप के रूप में उपयोग करूंगा।
फिर, पहला बड़ा प्रतिस्थापन केवल एक i
या o
उसके बाद /V_L
के वर्णों के अगले सेट के साथ बदल देता है , जिससे पूरी चीज़ में बाढ़ आ जाती है। प्रतिस्थापन तालिका निम्नानुसार दिखती है, जहां स्तंभ उस पंक्ति के अंतिम वर्ण और अगले वर्ण की पंक्तियों (जहां S
स्थान के लिए और <>
रिक्त स्ट्रिंग के लिए है) के अनुरूप हैं । मैंने पहले से उपयोग किए गए समतुल्यों को दिखाने के लिए इनपुट के सभी वर्णों को शामिल किया है:
i o
/ io i
\ io i
L o ii
V i io
_ ii <>
S ii <>
ध्यान दें कि अंतिम वर्ण हमेशा इंगित करता है कि क्या चरित्र के बाद हम बहुभुज के अंदर या बाहर हैं, जबकि s की संख्या i
उस क्षेत्र से मेल खाती है जिसे बहुभुज में जोड़ने की आवश्यकता है। एक उदाहरण के रूप में यहां अंतिम उदाहरण इनपुट पर पहले चार पुनरावृत्तियों के परिणाम हैं (यह एक पुराने संस्करण द्वारा उत्पन्न किया गया था जो वास्तव में प्रत्येक पंक्ति को अलग से बाढ़ देता था, लेकिन सिद्धांत अभी भी समान है):
o /V\
o / \___
o L _/
o/\/ /V
oL__ _/
o V
o /V\
o / \___
o L _/
oi\/ /V
oii__ _/
o V
o /V\
o/ \___
oL _/
oiio/ /V
oiiii_ _/
o V
o/V\
oi \___
oii _/
oiioi /V
oiiiiii _/
oV
oiV\
oiii \___
oiiii _/
oiioiii /V
oiiiiiiii_/
oio
अंत में, मैं बस सभी o
s और लाइन से छुटकारा पा लेता हूं जो कि मेल खाता है सब कुछ हटाकर [^i]
, और शेष दशमलव-से-एकात्मक रूपांतरण है जो उबाऊ है।