परिचय
यह चुनौती मेरी 2 डी पैटर्न मिलान भाषा ग्रिम से प्रेरित है । मूल रूप से, आपको एक "व्याकरण" दिया जाता है जो वर्णों के दो-आयामी ग्रिड का वर्णन करता है, और आपका काम व्याकरण के अनुसार एक ग्रिड उत्पन्न करना है। इसके अलावा, ग्रिड एक निश्चित कमजोर अर्थ में जितना संभव हो उतना छोटा होना चाहिए।
इनपुट
आपका इनपुट एक स्ट्रिंग है जिसमें लोअरकेस ASCII अक्षर और प्रतीक |
और हैं -
। सादगी के लिए, इनपुट में बार-बार लोअरकेस वर्ण नहीं होते हैं। स्ट्रिंग वर्णों के आयताकार ग्रिड के एक वर्ग के लिए एक विनिर्देश है, और इसे एक स्टैक का उपयोग करके बाएं से दाएं तक पार्स किया गया है।
- किसी लोअरकेस वर्ण को देखते हुए , किसी भी वर्ण के ग्रिड
c
को स्टैक पर धकेलें ।m×n
c
m, n ≥ 1
- पाइप को देखते हुए
|
, दो ग्रिडA
औरB
स्टैक से (B
शीर्ष पर) पॉप था, और के दाईं ओरAB
समतल करके प्राप्त ग्रिड को धक्का दें । इसके लिए इसकी आवश्यकता है और समान ऊंचाई है।B
A
A
B
- एक हाइफन को देखते हुए
-
, दो ग्रिडA
औरB
स्टैक से (B
शीर्ष पर) पॉप था, और नीचे के लिएA/B
कंक्रीटिंग द्वारा प्राप्त ग्रिड को धक्का दें । इसके लिए इसकी आवश्यकता है और समान चौड़ाई है।B
A
A
B
यह गारंटी है कि के लिए है कुछ के विकल्पों m
और n
बनाया पार्स प्रक्रिया के दौरान (जो प्रत्येक अक्षर के लिए अलग हो सकता है), इनपुट विनिर्देश सही ढंग से कुछ आयत है, जो अंत में ढेर पर छोड़ दिया जाता है वर्णन करता है।
उत्पादन
आपका आउटपुट इनपुट द्वारा निर्दिष्ट वर्णों का एक आयताकार ग्रिड है। ग्रिड इस मायने में न्यूनतम होना चाहिए कि किसी भी पंक्ति या स्तंभ को हटाने से यह अमान्य हो जाए। आप एक नई पंक्ति-अलग स्ट्रिंग (एक अनुगामी न्यूलाइन के साथ या बिना), वर्णों की 2 डी सरणी या स्ट्रिंग की एक सरणी वापस कर सकते हैं, जो भी सबसे सुविधाजनक प्रारूप है।
ध्यान दें कि आपको इनपुट को संसाधित करने की आवश्यकता नहीं है जैसा कि ऊपर वर्णित है; एकमात्र महत्वपूर्ण बात यह है कि आपका आउटपुट सही है।
उदाहरण
विनिर्देश पर विचार करें
par-s||e-
सबसे पहले, हम एक पुश करने के लिए चुनते हैं 1×2
की आयत p
, और 1×1
की आयतों a
और r
(इस का कारण यह बाद में स्पष्ट हो जाएगा)। फिर, हम पॉप a
और r
आयताकारों को पॉप करते हैं , और उनके ऊर्ध्वाधर संयोजन को धक्का देते हैं
a
r
अगला, हम एक 1×2
आयत को धक्का देते हैं s
, इसे और ऊपर की आयत को पॉप करते हैं, और उनके क्षैतिज संघटन को धक्का देते हैं
as
rs
फिर हम उस आयत और आयत को पॉप करते हैं p
, और उनके संघटन को धक्का देते हैं
pas
prs
अंत में, हम एक 3×1
आयत को धक्का देते हैं e
, इसे और ऊपर की आयत को पॉप करते हैं, और ऊर्ध्वाधर संघनन को धक्का देते हैं
pas
prs
eee
यह प्रोग्राम का आउटपुट है, या कम से कम संभावनाओं में से एक है। ध्यान दें कि भले ही
ppas
ppas
pprs
eeee
विनिर्देश द्वारा भी उत्पन्न होता है, यह एक मान्य आउटपुट नहीं है, क्योंकि कई पंक्तियों और स्तंभों को हटाया जा सकता है।
अधिक सूक्ष्म उदाहरण के रूप में, विचार करें
co|m|p|il|e|r|-
यह विनिर्देश आयत उत्पन्न करता है
comp
iler
जो एक मान्य आउटपुट है। हालाँकि, यह भी उत्पन्न करता है
commp
iiler
जो मान्य है, क्योंकि कोई भी पंक्ति या स्तंभ बिना अमान्य किए नहीं हटाया जा सकता है।
नियम
आप एक पूर्ण कार्यक्रम या एक समारोह दे सकते हैं। सबसे कम बाइट गिनती जीतता है, और मानक खामियों को रोक दिया जाता है।
अतिरिक्त परीक्षण मामले
आप अपने कार्यक्रम का परीक्षण करने के लिए इनका उपयोग कर सकते हैं।
Input:
a
Output:
a
Input:
co|mp|l|-ex|i|f|-y|
Example output:
cccoy
mplly
exify
Input:
ja-r|g-o|ni-|ze|d-|
Example output:
jronze
arondd
ggoidd
Input:
un|co|p-yr|i|gh-t-ab|-|le-||-
Example output:
unnnnnnn
coyriggl
ppyrihhe
ppyritte
ppyriabe
n
और m
गैर-निर्धारक रूप से चुने जाते हैं। यह गारंटी है कि उनके लिए उपयुक्त मूल्य मौजूद हैं, लेकिन उन्हें ढूंढना आपके कार्यक्रम का काम है।
un|co|p-|yr|i|gh--t-ab|-|le-||-
वैध होना असंभव है। अंतिम -
में 2 की एक समता है, जबकि स्टैक पर केवल 1 तत्व है।