बक्से का ऊंचाई


22

विभिन्न बक्से के इस आस्की कला आरेख पर एक नज़र:

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

प्रत्येक बॉक्स ऊर्ध्वाधर भागों ( |), क्षैतिज भागों के लिए डैश ( -), और कोनों के लिए प्लसस ( +) के लिए पाइप पात्रों के साथ बनता है ।

आरेख अन्य बक्से के अंदर बक्से को भी दिखाता है। हम उस बॉक्स की संख्या को कॉल करेंगे जो एक बॉक्स उस बॉक्स की परत के भीतर समाहित है । यहाँ प्रत्येक बॉक्स की परत के साथ आरेख फिर से एनोटेट किया गया है:

+--------------------------------------------------------------+
|                                                              |
|   +-------------------------------+          +-------+       |
|   |                               |          |       |       |
|   |                               |          |   1   |       |
|   |     +----------------+        |          |       |       |
|   |     |                |        |    0     +-------+       |
|   |     |        2       |   1    |                          |
|   |     |                |        |          +-------+       |
|   |     +----------------+        |          |       |       |
|   |                               |          |   1   |       |
|   |                               |          |       |       |
|   +-------------------------------+          +-------+       |
|                                                              |
+--------------------------------------------------------------+

आपका कार्यक्रम इनपुट के रूप में शीर्ष पर एक के लिए एक बॉक्स आरेख में ले जाएगा। आउटपुट के रूप में, आपके प्रोग्राम को बॉक्स आरेख को आउटपुट करना चाहिए:

  • परत 0 पर बॉक्स को चरित्र से भरा होना चाहिए #(NB: परत पर 0 पर केवल एक बॉक्स होगा);
  • परत 1 पर बक्से चरित्र से भरे होने चाहिए =;
  • परत 2 पर बक्से चरित्र से भरे होने चाहिए -;
  • परत 3 पर बक्से चरित्र से भरे होने चाहिए .;
  • परत 4 और ऊपर के बॉक्स भरे हुए नहीं होने चाहिए।

यहाँ उदाहरण इनपुट का आउटपुट कैसा होना चाहिए:

+--------------------------------------------------------------+
|##############################################################|
|###+-------------------------------+##########+-------+#######|
|###|===============================|##########|=======|#######|
|###|===============================|##########|=======|#######|
|###|=====+----------------+========|##########|=======|#######|
|###|=====|----------------|========|##########+-------+#######|
|###|=====|----------------|========|##########################|
|###|=====|----------------|========|##########+-------+#######|
|###|=====+----------------+========|##########|=======|#######|
|###|===============================|##########|=======|#######|
|###|===============================|##########|=======|#######|
|###+-------------------------------+##########+-------+#######|
|##############################################################|
+--------------------------------------------------------------+

यहाँ एक और इनपुट और आउटपुट है जो परतों 3, 4 और 5 दिखा रहा है। शीर्ष पर क्षैतिज रेखाएँ नोट करें जो एक साथ बहुत करीब हैं। इन मामलों में वहां किसी भी पात्र को भरने के लिए पर्याप्त जगह नहीं है।

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

उत्पादन:

+-----------------------------------------------------------------------+
|#####+--------------------------------------------------------------+##|
|#####|======+-----------------------------------------------------+=|##|
|#####|======|---------+-----------------------------------------+-|=|##|
|#####|======|---------|...........+---------------------------+.|-|=|##|
|#####|======|---------|...........|         +-------------+   |.|-|=|##|
|#####|======|---------|...........|         |             |   |.|-|=|##|
|#####|======|---------|...........|         +-------------+   |.|-|=|##|
|#####|======|---------|...........+---------------------------+.|-|=|##|
|#####|======|---------|.........................................|-|=|##|
|#####|======|---------+-----------------------------------------+-|=|##|
|#####|======|-----------------------------------------------------|=|##|
|#####|======|-----------------------------------------------------|=|##|
|#####|======+-----------------------------------------------------+=|##|
|#####|==============================================================|##|
|#####+--------------------------------------------------------------+##|
|#######################################################################|
|#######################################################################|
|#######################################################################|
+-----------------------------------------------------------------------+

एक और इनपुट, इस बार ऊर्ध्वाधर लाइनों के साथ एक साथ बंद:

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

उत्पादन:

+-------------+
|+-----------+|
||===========||
||===========||
||===========||
|+-----------+|
+-------------+

अतिरिक्त नोट्स

  • सबसे बाहरी बॉक्स के आसपास व्हाट्सएप हो सकता है।
  • बक्से में 0 की आंतरिक चौड़ाई या ऊँचाई नहीं हो सकती (इसलिए उनके अंदर हमेशा कुछ जगह होगी)
  • एक ही परत पर बक्से एक दूसरे को छू सकते हैं।

जवाबों:


3

रूबी 163 164

w=l=-1
x=$<.map{|l|w=l.size;l}.join
b=[]
x.size.times{|i|c=x[i]
x[i..i+1]=='+-'&&(x[i+w]!=?|?b-=[i%w]:b<<i%w)
c>?z&&l+=b&[i%w]!=[]?1:-1
$><<(c==' '&&'#=-.'[l]||c)}

ऑनलाइन कोशिश करें: टेस्ट केस # 1 , टेस्ट केस # 2

अनगुल्ड प्रोग्राम:

  # read all lines from STDIN
  input = $<.map{|l|l}.join
  width = input.index(?\n)+1

  box_left_margins = []
  current_layer = -1

  input.size.times{|i|
    c = input[i]

    if c == ?+ && input[i+1] == ?-
      #we're at a box's left margin
      if input[i+width] == ?|
        # we're at the box's top - mark this index as a left margin
        box_left_margins << i%width
      else
        # we're at the box's bottom - this index is no longer a left margin
        box_left_margins-=[i%width]
      end
    end

    if c == ?|
      if box_left_margins.include? (i%width)
        current_layer += 1
      else
        current_layer -= 1
      end
    end

    if c == ' '
      $><< ('#=-.'[current_layer]||' ')
    else
      $><<c
    end
  }

2

जावा, 476 466 बाइट्स

import java.util.*;class H{public static void main(String[]a){Scanner p=new Scanner(System.in);char[]l=p.nextLine().toCharArray(),d={'#','=','-','.'};int s=l.length,b,i;int[]m=new int[s];String o=new String(l);for(;;){o+='\n';l=p.nextLine().toCharArray();if(l[0]=='+')break;o+='|';b=0;for(i=1;i<s;++i){char c=l[i];switch(c){case' ':c=b>3?' ':d[b];break;case'+':m[i]=l[i-1]=='-'?-++m[i]:- --m[i];break;case'|':b+=m[i];}o+=c;}}o+=new String(l);System.out.println(o);}}

यह सबसे बाहरी बॉक्स की चौड़ाई (ओं) को निर्धारित करने के लिए पहली पंक्ति को पढ़ता है। इसके साथ यह लंबाई की एक सरणी रखता है। यह सरणी बाईं से दाईं ओर संग्रहीत होती है जहां बक्से शुरू होते हैं और समाप्त होते हैं और 0s के साथ आरंभिक होते हैं। यह बॉक्स-ऊंचाई भी संग्रहीत करता है।

कार्यक्रम इनपुट लाइन को लाइन से पढ़ता है और निम्नलिखित वर्णों के लिए देखता है:

  • '+' है, जैसा कि हम जानते हैं, एक बॉक्स का किनारा। यदि बाईं ओर इनपुट चार '-' है, तो यह बॉक्स का अंत है, अन्यथा यह शुरुआत है। मार्कर सरणी निम्नानुसार अद्यतन की जाती है:
    • यदि इस सूचकांक में मार्कर 0 है, तो मान को 1 (शुरुआत) या -1 (अंत) पर सेट करें।
    • मान को 0. पर सेट किया गया (हम बॉक्स के निचले हिस्से पर पहुंच गए, यह अब महत्वपूर्ण नहीं है)
  • '|' वर्तमान सूचकांक पर मार्कर द्वारा वर्तमान बॉक्स-ऊंचाई को बदलता है।
  • '' हर चार को आउटपुट मिलता है, जैसा कि ब्लैंक को छोड़कर, वर्तमान बॉक्स-ऊंचाई के अनुसार बदल दिया जाता है।

संपादित करें: सुझाव के लिए TheNumberOne का धन्यवाद। ((;)) के साथ (जबकि) मैंने भी प्रतिस्थापित किया।


1
आप के import java.util.Scannerसाथ प्रतिस्थापित कर सकते हैंimport java.util.*
TheNumberOne

2

सीजेएम, 114 111 108 104 103 102 98 बाइट्स

q"-+":R/Ws*N/z{_,{"|1"/Bs*}*}%z{_,,{_I=S&{_I>_1sf&s,\"|+"f&s,m5e<" #=2."=I\t}&}fI}%N*Ws/R*Cs"|-"er

CJam दुभाषिया में इसे ऑनलाइन आज़माएं ।

यह काम किस प्रकार करता है

q               e# Read all input from STDIN.
"-+":R/Ws*      e# Replace each "-+" with "-1".
N/z             e# Split at linefeeds and zip. Pushes the array of columns.
{               e# For each column:
  _,            e#   Push its length.
  {             e#   Do that many times:
    "|1"/Bs*    e#   Replace each "|1" with "11".
  }*            e#
}%              e#
z               e# Transpose. Goes back to array of rows.
{               e# For each row:
  _,,           e#   Push the array of its indexes.
  {             e#   For each index I:
    _I=         e#     Get the Ith character of the row.
    S&{         e#     If it is a space:
      _I>       e#       Get the characters after the Ith.
      _1sf&s,   e#       Count how many characters are 1's.
      \"|+"f&s, e#       Count how many are |'s or +'s.
      m5e<      e#       Subtract and truncate at 5.
      " #=2."=  e#       Retrieve the corresponding character.
      I\t       e#       Replace the Ith character of the row with that one.
    }&          e#
  }fI           e#
}%              e#
N*              e# Join the rows, separating by linefeeds.
Ws/R*           e# Turn "-1"s back to "-+"s.
Cs"|-"er        e# Turn 1's and 2's into |'s and -'s.

2

जावास्क्रिप्ट ( ईएस 6 ) 156

परीक्षण करने के लिए फ़ायरफ़ॉक्स में स्निपेट चलाएँ

F=b=>(
  r=b.split(/\n/),q=[n=0],
  r.map((r,i)=>(
    [...r].map((c,p)=>c=='+'?(q[p]=r[p-1]=='-'?-1:1,c):c<'!'?' #=-.'[n]||' ':((n+=q[p]|0),c)).join(''))
  ).join('\n')
)

// TEST

o=x=>O.innerHTML += x+'\n\n'


;[`+--------------------------------------------------------------+
|                                                              |
|   +-------------------------------+          +-------+       |
|   |                               |          |       |       |
|   |                               |          |       |       |
|   |     +----------------+        |          |       |       |
|   |     |                |        |          +-------+       |
|   |     |                |        |                          |
|   |     |                |        |          +-------+       |
|   |     +----------------+        |          |       |       |
|   |                               |          |       |       |
|   |                               |          |       |       |
|   +-------------------------------+          +-------+       |
|                                                              |
+--------------------------------------------------------------+`
,`+-----------------------------------------------------------------------+
|     +--------------------------------------------------------------+  |
|     |      +-----------------------------------------------------+ |  |
|     |      |         +-----------------------------------------+ | |  |
|     |      |         |           +---------------------------+ | | |  |
|     |      |         |           |         +-------------+   | | | |  |
|     |      |         |           |         |             |   | | | |  |
|     |      |         |           |         +-------------+   | | | |  |
|     |      |         |           +---------------------------+ | | |  |
|     |      |         |                                         | | |  |
|     |      |         +-----------------------------------------+ | |  |
|     |      |                                                     | |  |
|     |      |                                                     | |  |
|     |      +-----------------------------------------------------+ |  |
|     |                                                              |  |
|     +--------------------------------------------------------------+  |
|                                                                       |
|                                                                       |
|                                                                       |
+-----------------------------------------------------------------------+`
,`+-------------+
|+-----------+|
||           ||
||           ||
||           ||
|+-----------+|
+-------------+`  
].forEach(t=>o(t+'\n'+F(t)+'\n'))
pre { font-size:10px;}
<pre id=O></pre>


1

सीजेएम, 76 74 बाइट्स

q:Q"-+":R/Ws*{_"| "#"]_QN#~%'|m0='+=2*(U+:U+~; \"#=-.\"+U5e<= "S/=~}%Ws/R*

CJam दुभाषिया में इसे ऑनलाइन आज़माएं ।

यह काम किस प्रकार करता है

q:Q        e# Read all input from STDIN and save it in the variable Q.
"-+":R/Ws* e# Replace each "-+" with "-1".
           e# This allows us to easily keep track of right corners.
{          e# For each charcter in the modified input:
  _"| "#   e#   Push its index in the string (0 for '|', 1 for ' ', -1 otherwise).

  "]_QN#~%'|m0='+=2*(U+:U+~; \"#=-.\"+U5e<= "S/

           e#   Split the pushed string at spaces, which results in three chunks:

           e#     ]        Turn the entire stack into a string.
           e#     _QN#     Compute the first index of a linefeed (row length).
           e#     ~%       Retrieve every previous character in the current column,
           e#              starting with the last.
           e#     '|m0=    Get the first character that is not a vertical bar.
           e#     '+=2*(   Push 1 if it's a plus sign and -1 otherwise.
           e#     U+:U     Add to U (initially 0) to keep track of the layer.
           e#     +~;      Add U to the string (casts to Array), dump and discard U.

           e#     "#=-."+  Concatenate this string with the space on the stack.
           e#     U5e<     Truncate U at 5.
           e#     =        Retrieve the corresponding character to replace the space.

           e#     (empty)

  =~       e#   Select and execute the proper chunk.
}%         e#
Ws/R*      e# Replace each "-1" with "-+".

1

एपीएल (Dyalog यूनिकोड) , 50 बाइट्स SBCS

s[⊃¨0~¨⍨a5|5⌊+⍀+\(⊢ׯ1*+⍀++\)5=a←⎕⍳⍨s' #=-.+|']

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

s←' #=-.+|' चर के लिए एक स्ट्रिंग असाइन करें s

मूल्यांकित इनपुट, यह एक चरित्र मैट्रिक्स होना चाहिए

⎕⍳⍨sमें इसके सूचकांक के साथ हर तत्व को बदलेंs

a← को आवंटित a

5=+-ईएस a( s[5]है '+') में जहां हैं, वहां बूलियन मैट्रिक्स लौटाएं

(⊢ׯ1*+⍀++\)यह कार्यों की एक ट्रेन है:

  • +\ पंक्ति द्वारा आंशिक रकम का मैट्रिक्स

  • + प्लस

  • +⍀ कॉलम द्वारा आंशिक रकम का मैट्रिक्स

  • ¯1* की शक्ति के लिए नकारात्मक एक - बाधाओं को ev1 में बदल दें और 1 में विकसित करें

  • ⊢× ट्रेन के तर्क से गुणा करें - बॉक्स कोनों को छोड़कर सब कुछ शून्य

+⍀+\ पंक्ति द्वारा आंशिक रकम के कॉलम द्वारा आंशिक रकम

5⌊ उसमें से न्यूनतम और ५

5| modulo 5

a,¨aवर्तमान मैट्रिक्स के तत्वों को युग्मित करें

0~¨⍨ जोड़े में से 0 हटा दें

⊃¨ जो शेष है उनमें से प्रत्येक

s[ ] सूचकांक में प्रत्येक तत्व का उपयोग करें s



@EriktheOutgolfer को चिंता करने की कोई आवश्यकता नहीं है, उत्तर सही है :) जो तर्क तैयार करता है (मैट्रिक्स में कच्चे इनपुट लाइनों को मिलाता है) उसे रिवर्स करना चाहिए क्योंकि ↑⍞⍞...⍞दाएं-से-बाएं मूल्यांकन करता है। पहले उदाहरण के लिए यह कोई मायने नहीं रखता था और मैं इस बात का उल्लेख करना भूल गया था।
ngn


@EriktheOutgolfer आह, मैं देखता हूं ... मैं अब उत्तर हटा दूंगा और बाद में इसे ठीक करूंगा। धन्यवाद।
ngn

अब तय किया जाना चाहिए
ngn

0

> <> , 118 115 87 बाइट्स

]0{i:0(?;:"-"=?\:"+"=?\:" "=?\$3l$g+}:ob(?
~$?:g2.10p1+4f:<p3l+10/.16@:$/>.!0"#"$
 #=-.

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

यदि प्रतीकों में से एक नहीं था -तो यह 6 बाइट्स छोटा हो सकता है। एह, वैसे भी यह थोड़ा बहुत छोटा है

यह काम किस प्रकार करता है:

] Resets the stack
 0{ Pushes a 0 and rotates the stack
    If the stack is empty, this initialises 0 as the counter
    Otherwise it adds an extra 0 to the stack and pushes the counter to the top
   i:0(?; Gets input and ends if it is EOF
         :"-"=?\ If the inputted character is a -
         p1+4f:< Put a - at cell (19, 1)
      .10        And skip to the end of this line

         :"+"=?\ Else if the inputted character is +
            ?10/ Generate either -1 or 1, depending on what was last put into cell (19,1)
                 The question mark represents cell (19,1), which is either + or -
         p3l     Put this number on (3, length of the stack)
.10p1+4f:<       Repeat the exact same code as with the -, except we put a + at cell (19,1)
         :" "=?\ Else if the character is a space
            @:$/ Create a copy of the counter
         .16     Skip to cell (1,6)
      g2         Get the cell (2, counter) (the  #=-.)
   ~$?           If that cell is a zero, pop it, leaving the initial space. 
                 Else pop the space, leaving the fetched character
        Else if the character is a | or a newline
        $3l$g+   Get the cell at (3, length of the stack) and add it to the counter
    For everything but the last else, we are at the end of the second line
       >.!0"#"$ Skip to the 35th instruction on the first line

 } Push the counter to the bottom of the stack
  :o Output the current character
    b(? If the character is smaller than 11 (a newline)
 ]          Skip the clear stack at the start of the line
 Repeat this until EOF

0

सी (जीसीसी) , 190 179 बाइट्स

-11 बाइट्स सीलिंगकैट के लिए धन्यवाद

विफल रहता है अगर sizeof (int)> 9, लेकिन तब आप इस तथ्य में सांत्वना ले सकते हैं कि आपका कंप्यूटर भविष्य से है।

l;*H,*h,d;f(S){h=H=calloc(l=index(S,10)-S,9);for(char*s=S;*s;s++)h=*s^10?h:H-1,d=*s-43?d:s!=S&s[-1]==45|s-S>l&s[~l]=='|'?-1:1,*h+=*s^45?0:d,h+=write(1,*s^32|*h>4?s:" #=-."+*h,1);}

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

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