तीर द्वारा पुनर्गठित करें


11

कहते हैं कि मैं कुछ लिख रहा था, और मैंने गलती से इसे गलत बॉक्स में लिखा था:

+-------+--------+
| Verbs | Nouns  |
+-------+--------+
| Truck |        |
| eat   | Banana |
|       | Car    |
+-------+--------+

इसलिए, मैं आलसी होने के नाते, केवल तीर को उस स्थान पर खींचना चाहिए जहां यह होना चाहिए:

+-------+--------+
| Verbs | Nouns  |
+-------+--------+
|[Truck]--->     |
| eat   | Banana |
|       | Car    |
+-------+--------+

आपका काम इसे सुंदर बनाना है - इसे इस में बदल दें:

+-------+--------+
| Verbs | Nouns  |
+-------+--------+
|       | Truck  |
| eat   | Banana |
|       | Car    |
+-------+--------+

नियम

  • वाक्यांश या शब्द कोष्ठक ([...]) से घिरे होते हैं
  • मल्टीलाइन प्रविष्टियों को [...] (बहुस्तरीय हटा दिया गया), न्यूलाइन, [...] --..---> के रूप में दर्शाया जाता है । तो तीर हमेशा नीचे दाएं ब्रैकेट से निकलता है

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

+-----------+----------+
|   Verbs   |  Nouns   |
+-----------+----------+
|           |          |
|[is a noun]->         |
| eat       | Banana   |
|           | Car      |
+-----------+----------+

में बदल जाता है:

+-----------+----------+
|   Verbs   |  Nouns   |
+-----------+----------+
|           |          |
|           | is a noun|
| eat       | Banana   |
|           | Car      |
+-----------+----------+
  • बक्से प्लसस ("+") से बंधे होते हैं, और यह माना जाना चाहिए कि तीर प्लस से अधिक नहीं गुजरेंगे
  • शब्द या वाक्यांश को फिट करने के लिए हमेशा एक तीर के अंत में कमरा होगा
  • आदेश मायने रखता है - शब्द को दिखाई देना चाहिए जहां तीर इंगित करता है, हालांकि ऊर्ध्वाधर संरेखण महत्वपूर्ण नहीं है
  • तीर एक बार में 90 डिग्री तक बदल सकता है, लेकिन केवल "/" और "\" के बीच (नीचे देखें)

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

    +-----------+----------+
    |   Verbs   |  Nouns   |
    +-----------+----------+
    | [Truck]--\|          |
  /------------/|        <--\
  | | eat       | Banana   ||
  | |  /--\     | Car      ||
  | +--|--|-----+----------+|
  \----/  \-----------------/

प्रतियोगिता

कोई भी इनपुट स्वीकार्य है (टेक्स्ट फ़ाइल, STDIN, आदि)
कोई भी पठनीय आउटपुट स्वीकार्य है (टेक्स्ट फ़ाइल, STDOUT, आदि)

यहाँ कुछ और उदाहरण दिए गए हैं:

यह कोड गोल्फ है, इसलिए सबसे छोटा कोड जीतता है!

कुछ परीक्षण मामले:

   +--------+----------+-------------+
   | Colors |  Foods   |  Countries  |
   +--------+----------+-------------+
   | red    | pizza    | Switzerland |
 /-->     /---->       |             |
 | |[kale]/ | hot dogs | Brazil      |
 | |     <----------------------\    |
 | | orange |[yellow]\ | [green]/    |
 | +--------+--------|-+-------------+
 \-------------------/


/------------------------------------------\
|                                          |
|  +------------------+----------+-------+ |
|  | frog             |          |       | |
|  | forge            | dog      | eagle | |
|  | foundation       | diligent | ease  | |
|  |[Brother]--\      | down     | elf   | |
|  |           |      |[egg]--\  |[fort]---/
\---->         |      |       |  |       |  
   |           \-\    |       \----->    |  
   +-------------|----+----------+       |  
   |   Boy       \-->            |       |  
   |   Bull                      |       |  
   |   Browser                   |       |  
   +-----------------------------+-------+ 


             /--------------------------------------\
             |                     /---------------\|
/------------|---------------------/               ||
|            |               /---------------\     ||
|  +---------|-+-----------+-|------+--------|+    ||
\---->       | |  clarinet | \>     | [drums]/|    ||
   | [viola]\\--->         |        +---------+    ||
   |        \----->        |        |         |/---/|
   +-----------+ [violin]\ |        | [cello]--/    |
   |        <------------/ |        +---------+     |
   |           +-----------+      <----------\|     |
   |           |           |        |  [tuba]/|     |
   |           | [piano]\  |        |         |     |
   |        <-----------/  |        |         |     |
   |           +-----------+--------+         |     |
   |           |                    |[trumpet]------/
   | [flute]----->                  |         |      
   |           |     saxaphone      |         |      
   +-----------+--------------------+---------+ 

5
यह एक अच्छी चुनौती है, यह सिर्फ कठिन लगता है!
बीटा डिके

2
बॉक्स पहचान को लिखने का प्रयास करते समय, मैंने नोट किया है कि यह संभव है कि यह अस्पष्ट हो कि कितने बॉक्स हैं यदि आपके पास एक सीमा पार करने वाले पर्याप्त तीर हैं, उदाहरण के लिए, इस लेआउट में कितने बॉक्स हैं pastebin.com/xyBjTAwK ? क्या हम कुछ गारंटी दे सकते हैं कि यह घटित नहीं होगा, या स्थिति के लिए अपेक्षित व्यवहार का स्पष्टीकरण नहीं होगा।
विजुअलमेल

2
@VisualMelon आप मान सकते हैं कि ऐसा नहीं होगा। ऐसा कोई मामला नहीं होगा जहां 2 प्लस अगली पंक्ति / कॉलम में हों और कनेक्ट न हों। इसके अलावा, कोष्ठक के बारे में, यह मेरी ओर से एक दोष था। आप मान सकते हैं कि कोष्ठक में कुछ भी चलता है।
स्ट्रेच

1
सभी मैं पूछता हूं कि यह एक तालिका को आउटपुट करता है जो मूल तालिका की तरह दिखता है, मूल्यों को छोड़कर। दूसरे शब्दों में, जब तक यह एक तालिका की तरह दिखता है (जैसे कोई यादृच्छिक रेखा नहीं टूटती है), तो मैं उन चीजों की परवाह नहीं करता, जिन्हें मैं नहीं देख सकता (उदाहरण के लिए रिक्त स्थान / रेखा को तोड़ता हूं)
स्ट्रेच

1
आदेश पर, यदि आइटम के शीर्ष को दाईं ओर रखा जाता है जहां तीर इंगित कर रहा है, तो यह सही जगह पर होना चाहिए। उदाहरण के लिए, "ब्रदर" "बॉय" के दाईं ओर जाएगा। आप मान सकते हैं कि तीर एक मल्टीरो आइटम के गंतव्य की पहली पंक्ति को इंगित कर रहा है। किसी वस्तु को अर्हता प्राप्त करने पर - कोष्ठक से घिरा कुछ भी (<> | ^ और व्हाट्सएप) मद का हिस्सा माना जाता है। यदि तीर के बिना इसके ऊपर कोष्ठक हैं, तो यह एक बहुस्तरीय वस्तु का हिस्सा है।
स्ट्रेच

जवाबों:


8

पायथन, 700 681 676 667 वर्ण

अभी पूरी तरह से गोल्फ नहीं है, लेकिन एक जवाब देना चाहता था।

import os
D=map(list,os.read(0,9999).split('\n'))
Z=Q=[-1,0,1,0,-1]
J=''.join
def T(y,x,d,_):c=D[y][x];D[y][x]=' ';d={'\\':3-d,'/':1-d}.get(c,d)%4;j=(y+Q[d],x+Q[d+1],d,c=='>');return c in'<>'and j or T(*j)
def F(y,x,d):
 if y<Y or x<L:
    if D[y][x]=='+':
     if J(D[y]).find('+',x+1)+1:F(y,x+1,1)
     if any((l[x:]+[''])[0]=='+'for l in D[y+1:]):F(y+1,x,2)
    else:D[y][x]='--||'[d];F(y+Q[d],x+Q[d+1],d)
i=0
for l in D:
 I=l.index
 if'+'in l:
    if Z:P,K,L,Z=i,I('+'),J(l).rfind('+'),0
    Y=i
 while'['in l:
    s,e=map(I,'[]');y,x,_,R=T(i,e+1,1,1);W=l[s+1:e]
    if R:D[y][x:x+e-s-1]=W
    else:D[y][x-e+s+2:x+1]=W
    l[s:e+1]=' '*(e-s+1)
 i+=1
F(P,K+1,1);F(P+1,K,2)
for l in D:print J(l)

रणनीति :

मैं इनपुट को मैट्रिक्स में बदल देता हूं। फिर मैं इसे लाइन से स्कैन करता हूं, एस ढूंढता हूं [। प्रत्येक के लिए [, मुझे मिलान मिल जाता है ], तो मैं Tतुरंत मौके के साथ ट्रेस फ़ंक्शन को दाईं ओर कहता हूं ]। ट्रेस फ़ंक्शन लाइन का अनुसरण करता है, ' 'एस के साथ पथ को प्रतिस्थापित करता है जैसा कि यह जाता है, और जहां शब्द जाना चाहिए वहां लौटता है। फिर मैंने शब्द को पुराने स्थान पर मिटा दिया और शब्द को नए स्थान पर रख दिया।

अंत में, मैं कॉल करता हूं F, जो पुन: बक्से को फिर से बनाता है।

टेस्ट :

reorg_test1... True
Input:
+-------+--------+
| Verbs | Nouns  |
+-------+--------+
|[Truck]--->     |
| eat   | Banana |
|       | Car    |
+-------+--------+


Output:
+-------+--------+
| Verbs | Nouns  |
+-------+--------+
|       |   Truck|
| eat   | Banana |
|       | Car    |
+-------+--------+



reorg_test2... True
Input:
+-----------+----------+
|   Verbs   |  Nouns   |
+-----------+----------+
|           |          |
|[is a noun]->         |
| eat       | Banana   |
|           | Car      |
+-----------+----------+


Output:
+-----------+----------+
|   Verbs   |  Nouns   |
+-----------+----------+
|           |          |
|           | is a noun|
| eat       | Banana   |
|           | Car      |
+-----------+----------+



reorg_test3... True
Input:
    +-----------+----------+
    |   Verbs   |  Nouns   |
    +-----------+----------+
    | [Truck]--\|          |
  /------------/|        <--\
  | | eat       | Banana   ||
  | |  /--\     | Car      ||
  | +--|--|-----+----------+|
  \----/  \-----------------/


Output:
    +-----------+----------+
    |   Verbs   |  Nouns   |
    +-----------+----------+
    |           |          |
    |           |   Truck  | 
    | eat       | Banana   | 
    |           | Car      | 
    +-----------+----------+ 




reorg_test4... True
Input:
   +--------+----------+-------------+
   | Colors |  Foods   |  Countries  |
   +--------+----------+-------------+
   | red    | pizza    | Switzerland |
 /-->     /---->       |             |
 | |[kale]/ | hot dogs | Brazil      |
 | |     <----------------------\    |
 | | orange |[yellow]\ | [green]/    |
 | +--------+--------|-+-------------+
 \-------------------/


Output:
   +--------+----------+-------------+
   | Colors |  Foods   |  Countries  |
   +--------+----------+-------------+
   | red    | pizza    | Switzerland |
   | yellow |   kale   |             |
   |        | hot dogs | Brazil      |
   |green   |          |             |
   | orange |          |             |
   +--------+----------+-------------+




reorg_test5... True
Input:
/------------------------------------------\
|                                          |
|  +------------------+----------+-------+ |
|  | frog             |          |       | |
|  | forge            | dog      | eagle | |
|  | foundation       | diligent | ease  | |
|  |[Brother]--\      | down     | elf   | |
|  |           |      |[egg]--\  |[fort]---/
\---->         |      |       |  |       |  
   |           \-\    |       \----->    |  
   +-------------|----+----------+       |  
   |   Boy       \-->            |       |  
   |   Bull                      |       |  
   |   Browser                   |       |  
   +-----------------------------+-------+ 


Output:


   +------------------+----------+-------+  
   | frog             |          |       |  
   | forge            | dog      | eagle |  
   | foundation       | diligent | ease  |  
   |                  | down     | elf   |  
   |                  |          |       |  
   |  fort            |          |       |  
   |                  |          |   egg |  
   +------------------+----------+       |  
   |   Boy           Brother     |       |  
   |   Bull                      |       |  
   |   Browser                   |       |  
   +-----------------------------+-------+ 



reorg_test6... True
Input:
             /--------------------------------------\
             |                     /---------------\|
/------------|---------------------/               ||
|            |               /---------------\     ||
|  +---------|-+-----------+-|------+--------|+    ||
\---->       | |  clarinet | \>     | [drums]/|    ||
   | [viola]\\--->         |        +---------+    ||
   |        \----->        |        |         |/---/|
   +-----------+ [violin]\ |        | [cello]--/    |
   |        <------------/ |        +---------+     |
   |           +-----------+      <----------\|     |
   |           |           |        |  [tuba]/|     |
   |           | [piano]\  |        |         |     |
   |        <-----------/  |        |         |     |
   |           +-----------+--------+         |     |
   |           |                    |[trumpet]------/
   | [flute]----->                  |         |      
   |           |     saxaphone      |         |      
   +-----------+--------------------+---------+ 


Output:




   +-----------+-----------+--------+---------+      
   |  cello    |  clarinet |   drums|         |      
   |           |  trumpet  |        +---------+      
   |           |   viola   |        |         |      
   +-----------+           |        |         |      
   |  violin   |           |        +---------+      
   |           +-----------+  tuba  |         |      
   |           |           |        |         |      
   |           |           |        |         |      
   |   piano   |           |        |         |      
   |           +-----------+--------+         |      
   |           |                    |         |      
   |           |  flute             |         |      
   |           |     saxaphone      |         |      
   +-----------+--------------------+---------+ 
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.