화살표로 재구성


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
이것은 좋은 도전입니다, 그것은 단지 피 묻은 것 같습니다!
Beta Decay

2
상자 식별을 작성하는 동안 경계를 가로 질러 충분한 화살표가있는 경우 상자가 몇 개 있는지 모호 할 수 있습니다 (예 :이 레이아웃에 몇 개의 상자가 있습니까? pastebin.com/xyBjTAwK ? 이것이 일어나지 않을 것이라는 보장이나 상황에 대한 예상되는 행동에 대한 설명이 있습니까?
VisualMelon

2
@VisualMelon 발생하지 않을 것이라고 가정 할 수 있습니다. 다음 행 / 열에 2 개의 플러스가 있고 연결되지 않은 경우는 없습니다. 또한 괄호에 관해서는 그것은 내 부분의 결함이었습니다. 괄호 안의 모든 것이 움직이고 있다고 가정 할 수 있습니다.
Stretch Maniac

1
내가 묻는 것은 값 이동을 제외하고 원래 테이블처럼 보이는 테이블을 출력한다는 것입니다. 다시 말해서, 테이블처럼 보이는 한 (예 : 임의의 줄 바꿈 없음) 볼 수없는 것 (예 : 후행 공백 / 줄 바꿈)에 대해서는 신경 쓰지 않습니다.
Stretch Maniac

1
주문에서 항목의 상단이 화살표가 가리키는 위치에 놓이면 올바른 위치에 있어야합니다. 예를 들어 "Brother"는 "Boy"의 오른쪽으로 이동합니다. 화살표가 여러 행 항목 대상의 첫 번째 행을 가리키고 있다고 가정 할 수 있습니다. 항목을 한정하는 항목-대괄호로 묶인 항목 (> <| ^ 및 공백)은 항목의 일부로 간주됩니다. 화살표가없는 괄호가 위에 있으면 여러 줄 항목의 일부입니다.
스트레칭 미치 광

답변:


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)

전략 :

입력을 행렬로 바꿉니다. 그런 다음 한 줄씩 스캔하여 [s를 찾습니다 . 모든 것에 [대해 일치하는 것을 찾은 ]다음 T바로 오른쪽에 자리가 있는 추적 함수 를 호출 합니다 ]. 추적 함수는 행 ' '을 따라 가면서 경로를 s로 바꾸고 단어가 이동해야하는 위치를 반환합니다. 그런 다음 이전 위치에서 단어를 지우고 새 위치에 단어를 넣습니다.

마지막 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      |         |      
   +-----------+--------------------+---------+ 
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.