내가 무언가를 쓰고 있다고 말하면서 실수로 잘못된 상자에 썼습니다 :
+-------+--------+
| 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 | |
+-----------+--------------------+---------+
답변
파이썬, 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 | |
+-----------+--------------------+---------+