बॉक्स को टॉगल करें!


9

संभावित रूप से बॉक्स में एक स्ट्रिंग को देखते हुए, बॉक्स को टॉगल करें। यह परीक्षण के मामलों और स्पष्टीकरण में स्पष्ट हो जाता है।

इनपुट आउटपुट

इनपुट प्रारूप

इनपुट या तो CR, LF, या CRLF, या स्ट्रिंग्स की सूची से अलग किया गया एक स्ट्रिंग होगा। तय करने के लिए इनपुट प्रारूप आपके ऊपर है।

आउटपुट स्वरूप

आउटपुट स्वरूप इनपुट के समान प्रारूप में होना चाहिए।

स्पष्टीकरण + उदाहरण

आइए एक उदाहरण के रूप में एक बॉक्सिंग स्ट्रिंग लें:

+-------------+
|Hello, World!|
+-------------+

बॉक्स को टॉगल करने के लिए, हम पहली और आखिरी पंक्ति और पहला और आखिरी कॉलम निकालते हैं। आप मान सकते हैं कि अंतिम पंक्ति (अंतिम पंक्ति के अंत में एक वैकल्पिक अनुगामी नई रेखा के साथ) के बाद कोई अनुगामी व्हाट्सएप नहीं होगा, और किसी भी पंक्ति पर कोई अनुगामी व्हाट्सएप नहीं है, पाठ्यक्रम की नई पंक्ति की गिनती नहीं है।

यह बन जाएगा:

Hello, World!

कोई दूसरा रास्ता

यदि स्ट्रिंग एक बॉक्स में नहीं है, तो उसमें एक बॉक्स जोड़ें। यह काफी सरल है; आगे जोड़ते +---...---+साथ अपनी पंक्ति में kडैश जहां kप्रत्येक पंक्ति के लिए सबसे लंबे समय तक लाइन की लंबाई है, और फिर, पिछली श्वेत रिक्ति को आगे जोड़ते सबसे लंबे समय तक लाइन की लंबाई से मेल खाते हैं और फिर और एक पाइप चरित्र संलग्न करने के लिए के साथ पैड यह ( "|")। अंत में, +---...---+पहली पंक्ति के समान सेटअप वाली रेखा को जोड़ें ।

उदाहरण के लिए:

Hello, World!

हो जाता है:

+-------------+
|Hello, World!|
+-------------+

आप मान सकते हैं कि इनपुट में किसी भी लाइन में व्हॉट्सएप नहीं है।

एक स्ट्रिंग का दूसरा उदाहरण जिसके चारों ओर एक बॉक्स होना चाहिए:

Hello,
    World!

हो जाता है

+----------+
|Hello,    |
|    World!|
+----------+

कुछ का एक उदाहरण जो अभी भी बॉक्सिंग किया जाना चाहिए:

+--------+
|        |
 --------+

हो जाता है:

+----------+
|+--------+|
||        ||
| --------+|
+----------+

नियम + विनिर्देशन

  • स्टैंडर्ड लोफॉल्स लागू होते हैं
  • इनपुट की किसी भी लाइन में कोई अग्रणी या अनुगामी व्हॉट्सएप नहीं होगा, चाहे वह बॉक्सिंग हो या न हो
  • बक्से केवल +उनके कोनों और |ऊर्ध्वाधर किनारों के -लिए और क्षैतिज पक्षों के रूप में होंगे।
  • एक बॉक्स को बॉक्स मानने के लिए इसके प्लसस होने चाहिए; यदि इसकी ऊंचाई या चौड़ाई 2 है (अर्थात, कोई सामग्री नहीं), तो इसे अभी भी अनबॉक्स नहीं किया जाना चाहिए, जिसके परिणामस्वरूप बॉक्स की ऊंचाई के आधार पर, नई सुर्खियों का एक गुच्छा होगा।
  • यदि इनपुट में बॉक्स है, लेकिन बॉक्स के बाहर टेक्स्ट है, तो पूरी चीज़ बॉक्सिंग होनी चाहिए।
  • आपके प्रोग्राम को स्ट्रिंग की पूरी परिधि की जाँच करनी चाहिए। यदि बाहर के साथ एक भी वर्ण सही नहीं है (या तो गायब है या जो होना चाहिए उससे अलग चरित्र है), तो इसे बॉक्सिंग किया जाना चाहिए, अनबॉक्स नहीं।
  • अनबॉक्स्ड स्ट्रिंग में ही हो सकता है + | -। यदि अनबॉक्स किए गए स्ट्रिंग में स्वयं इसके चारों ओर एक बॉक्स है, तो बॉक्स के साथ स्ट्रिंग लौटाएं; इसे केवल एक बार अनबॉक्स किया जाना चाहिए।

एज केस

1: छोटे बक्से

इनपुट:

++
++

आउटपुट एक खाली या एक नई रेखा है

इनपुट:

+----+
+----+

आउटपुट खाली है या एक नई रेखा है

इनपुट:

++
||
||
++

आउटपुट 2 न्यूलाइन्स या 3 न्यूलाइन्स हैं

2: आंशिक बॉक्स

इनपुट:

+-------+
| Hello |
+ ------+

आउटपुट:

+---------+
|+-------+|
|| Hello ||
|+ ------+|
+---------+

3: बॉक्स के बाहर पाठ

इनपुट:

 +-------+
a| Hello |
 +-------+

आउटपुट:

+----------+
| +-------+|
|a| Hello ||
| +-------+|
+----------+

1
"इनपुट की कोई भी लाइन किसी भी अग्रणी या अनुगामी व्हाट्सएप की समग्र और प्रत्येक पंक्ति में नहीं होगी, भले ही इसमें बॉक्सिंग की गई हो या नहीं।" आपके कई परीक्षण मामलों में प्रमुख व्हाट्सएप हैं। क्या आयताकार इनपुट पूछने के लिए बहुत अधिक होगा?
नील

@ नील का मतलब शायद उनका कोई सुसंगत अग्रणी व्हाट्सएप नहीं था , अर्थात प्रत्येक स्थान पर 3 स्थान से शुरू होने वाला मामला नहीं होगा, लेकिन 1, 2, 0, 3 स्थानों से शुरू होने वाली रेखाएँ संगत नहीं होती हैं।
निकोल निकोल

है यह एक बॉक्स है या नहीं?
user41805

@Cowsquack कल्पना से ऐसा लगता है कि यह नहीं है।
एग आउटफोलर जूल

@ नील माफ करें, मेरा मतलब है कि शुरुआत में कोई भी स्थान इसे एक बॉक्स के रूप में प्रस्तुत करेगा।
हाइपरनेत्रिनो

जवाबों:


6

जावास्क्रिप्ट (ES2017), 199 बाइट्स

s=>/^\+-*\+\n(\|.*\|\n)*\+-*\+$/.test(s,s=s.split`
`,s.map(z=>z[y]?y=z.length:0,y=0))?s.slice(1,-1).join`
`.replace(/.(.*)./g,"$1"):(x=`+${'-'.repeat(y)}+`)+`
|${s.map(z=>z.padEnd(y)).join`|
|`}|
`+x

भोला हल। हो सकता है या न हो, हम देखेंगे ...


"सबसे अच्छा हो सकता है या नहीं, हम देखेंगे ..." अभी भी एक गैर-गोल्फिंग भाषा को देखने के लिए अच्छा है जैसे कि जेएस ने इसे हल करने के लिए <200 बाइट्स में ... देखें कि मैंने वहां क्या किया? ;)
निकोल आउटफेलर जूल

Haha, कुछ के लिए एक वाणिज्यिक की तरह लगता है "अब 2 डॉलर के तहत!" जब इसकी कीमत 1.99: P
ETHproductions

इसे औद्योगिक डकैती योग्य कहा जाता है ।
एर्ग आउटफोलर

यह परीक्षण मामलों के लिए काम करता है, लेकिन मुझे नहीं लगता कि यह इस तरह से कुछ के लिए काम करता है '+--+\n|hi|\n|world|\n+----------+':। यह लाइनों को हटाता है, भले ही यह आयताकार न हो।
रिक हिचकॉक

3

SOGL V0.12 , 72 बाइट्स

2-┌* +1Ο;2-⁴┌@ŗΖ+|ŗ∙⁴++B
▓Aa1w⁄;lGB╬8a⁰I{_=}¹χ?ajk{jk}⁰←a1w⁄;l2+G2+B00╬5

यह कोशिश करो!

+7 बाइट्स ( ⁰I{_=}¹χ) क्योंकि एलिमेंट बराबरी
+1 बाइट ( ) को लागू नहीं करता है क्योंकि इनपुट के लिए स्क्वायर
+1 बाइट की गारंटी नहीं है ( A) मेरे लिए आलसी होने और टाइप किए गए इनपुट को लागू नहीं करने के लिए (इसलिए यह स्टैक पर इनपुट की अपेक्षा करता है।) उपयोग में आसानी, ऑनलाइन लिंक में शामिल है → ताकि इनपुट बॉक्स का उपयोग किया जा सके)


⁰I{_=}¹χ+8 बाइट्स +7 नहीं है।
आउटगॉल्फ जूल

@ EriktheOutgolfer अच्छी तरह से प्रतिस्थापन होना चाहिए =, लेकिन जैसा कि काम नहीं करता है, यह लंबाई बदलता है -1 + 8 = +7
dzaima

2

जेली , 46 बाइट्स

ẋ2jЀ
z©⁶”|çZṖ”-çµḢ⁾-+yWWçWẎZ
ḊṖZḊṖÇ
Ỵ®2ĿÇ⁼$?Y

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


जब यह आयताकार बनाता है तो यह इनपुट (zips) इनपुट को स्थानांतरित कर देता है
HyperNeutrino

@ हैपरनेट्रिनो मुझे यह याद नहीं है कि जब मैंने उत्तर दिया था ...
14

2

रेटिना , 197 195 बाइट्स

+m`^((.)*)(¶(?<-2>.)*(?(2)$|(.)))
$1$#4$* $3$#2$* 
%`^|$
|
^.(.*).
+$.1$*-+¶$&
.(.*).$
$&¶+$.1$*-+
^(\+-*\+)¶(\|\+-*\+\|)¶(\|\|.*\|\|¶)*\2¶\1$
¶$&¶
..(.*)..(?=(.|¶)*¶$)
$1
^¶-*¶-*¶|(\G|¶)-*¶-*¶$

इसे ऑनलाइन आज़माएं! स्पष्टीकरण:

+m`^((.)*)(¶(?<-2>.)*(?(2)$|(.)))
$1$#4$* $3$#2$* 

यह चरण अपने आप में काफी जटिल है, इसलिए मैं इसे थोड़ा नीचे तोड़ दूंगा। +इसका मतलब है कि मंच तब तक दोहराता है जब तक कोई और प्रतिस्थापन नहीं मिल जाता। m`^इसका मतलब है कि स्टेज किसी भी लाइन की शुरुआत में मेल खाता है। ((.)*)फिर पूरी लाइन से मेल खाता है। अब $1बस मिलान लाइन है, लेकिन $2मैचों की एक सूची है यानी अक्षर। फिर लाइन के अंत से मेल खाता है और इसलिए अगली पंक्ति की शुरुआत। (?<-2>.)*.NET बैलेंसिंग ग्रुप का उपयोग करता है। <-2>से निकाल देता मैचों $2लंबे समय से एक चरित्र के रूप में के रूप में दूसरी पंक्ति पर मिलान किया जा सकता। इस बिंदु पर, तीन चीजों में से एक हो सकती है:

  • दूसरी पंक्ति में पर्याप्त वर्ण नहीं थे। $2अभी भी कुछ मैच बाकी हैं।
  • दोनों रेखाएं समान लंबाई की थीं। $2कोई मैच नहीं बचा है, और हम लाइन के अंत में हैं।
  • दूसरी पंक्ति लंबी है, इसलिए कम से कम एक वर्ण बचा हुआ है।

(?(2)$|(.)))एक शर्त का उपयोग करके इन्हें अलग करने में मदद करता है। यदि $2अभी भी कुछ मैच बाकी हैं, तो हमें इसकी आवश्यकता है क्योंकि दूसरी पंक्ति बहुत छोटी है, इसलिए हम पंक्ति के अंत से मेल खाते हैं, लेकिन यदि $2कोई मैच नहीं बचा है, तो हम चाहते हैं कि दूसरी पंक्ति अधिक लंबी हो, इसलिए हम मेल खाते हैं एक चरित्र (जो $4कि ताकि हम जानते हैं कि मैच हुआ)। अन्यथा दोनों रेखाएं समान लंबाई की हैं और इस बिंदु पर मैच विफल हो जाता है (यह बाद की रेखा पर फिर से मेल खा सकता है)।

प्रतिस्थापन स्ट्रिंग है $1$#4$* $3$#2$*$#4करने के लिए मूल्यांकन करता है 1अगर हम, दूसरी पंक्ति पर एक अतिरिक्त चरित्र का मिलान नहीं हुआ 0नहीं तो। इसका मतलब है कि $#4$*अगर दूसरी लाइन लंबी थी तो पहली पंक्ति में एक स्थान जुड़ जाता है। इसी तरह $#2$*दूसरी पंक्ति में रिक्त स्थान जोड़ता है यदि पहली पंक्ति लंबी थी। (वास्तव में, यह रिक्त स्थान की सही संख्या को जोड़कर समाप्त होता है। यदि हम केवल दो पंक्तियों को संतुलित कर रहे थे, +तो इसे दूसरी दूसरी पंक्ति के मामले में भी सीधे प्राप्त करने के लिए चौथे कैप्चर समूह में जोड़ा जा सकता था।)

इस सब का कारण यह है कि यह चरण एक आयत में इनपुट को बाहर निकालता है। अब हम इसके चारों ओर एक बॉक्स बना सकते हैं।

%`^|$
|

|प्रत्येक तरफ एस रखें ।

^.(.*).
+$.1$*-+¶$&

+-...-+शीर्ष पर रखें ।

.(.*).$
$&¶+$.1$*-+

और नीचे फिर से।

^(\+-*\+)¶(\|\+-*\+\|)¶(\|\|.*\|\|¶)*\2¶\1$
¶$&¶

देखें कि क्या हमने एक डबल बॉक्स बनाया है। यदि हां, तो दोनों बक्सों को हटाने के लिए शेष चरणों के लिए ऊपर और नीचे अतिरिक्त खाली लाइनें जोड़ी जाती हैं।

..(.*)..(?=(.|¶)*¶$)
$1

यदि कोई अनुगामी रिक्त रेखा है, तो प्रत्येक पंक्ति के प्रारंभ और अंत से दो वर्णों को हटा दें।

^¶-*¶-*¶|(\G|¶)-*¶-*¶$

यदि कोई अग्रणी रिक्त रेखा है, तो उसे हटा दें और अगली दो पंक्तियाँ (जो -बॉक्स के शीर्ष पर शेष रहेंगी )। यदि कोई अनुगामी रिक्त रेखा है, तो उसे और पिछली दो पंक्तियों को हटा दें। (\G|¶)इस मामले में जहां केवल छह लाइनों (और इसलिए 5 वहाँ से संबंधित है रों) क्योंकि बॉक्स में कोई सामग्री थी।

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