E=enumerate
U=lambda b,x,y:len(b)>x>-1<y<len(b[0])
def f(b):
q=[(x,y,'','',0,1)for x,r in E(b)for y,l in E(r)if'['==l]
while q:
x,y,w,l,X,Y=q.pop(0)
if(u:=b[x][y]).isalpha():w+=u
if'/'==u:X,Y=[-X,-Y][::-1]
if'\\'==u:X,Y=[X,Y][::-1]
if u in'><':
for i,a in E([w[::-1],w][u>'<']):b[x][y+Y*i]=a
else:q+=(x+X,y+Y,w,u,X,Y),;b[x][y]='|'if('-'==u)*U(b,x+1,y)and U(b,x-1,y)>(' 'in(Q:={b[x-1][y],b[x+1][y]}))and{'|','+'}&Q else'-'if('|'==u)*U(b,x,y-1)and U(b,x,y+1)>(' 'in(Q:={b[x][y+1],b[x][y-1]}))and{'-','+'}&Q else' '
return b
s1 = """
+-------+--------+
| Verbs | Nouns |
+-------+--------+
|[Truck]---> |
| eat | Banana |
| | Car |
+-------+--------+
"""
s2 = """
+-----------+----------+
| Verbs | Nouns |
+-----------+----------+
| | |
|[is a noun]-> |
| eat | Banana |
| | Car |
+-----------+----------+
"""
s3 = """
+-----------+----------+
| Verbs | Nouns |
+-----------+----------+
| [Truck]--\| |
/------------/| <--\
| | eat | Banana ||
| | /--\ | Car ||
| +--|--|-----+----------+|
\----/ \-----------------/
"""
s4 = """
+--------+----------+-------------+
| Colors | Foods | Countries |
+--------+----------+-------------+
| red | pizza | Switzerland |
/--> /----> | |
| |[kale]/ | hot dogs | Brazil |
| | <----------------------\ |
| | orange |[yellow]\ | [green]/ |
| +--------+--------|-+-------------+
\-------------------/
"""
s5 = """
/------------------------------------------\
| |
| +------------------+----------+-------+ |
| | frog | | | |
| | forge | dog | eagle | |
| | foundation | diligent | ease | |
| |[Brother]--\ | down | elf | |
| | | |[egg]--\ |[fort]---/
\----> | | | | |
| \-\ | \-----> |
+-------------|----+----------+ |
| Boy \--> | |
| Bull | |
| Browser | |
+-----------------------------+-------+
"""
s6 = """
/--------------------------------------\
| /---------------\|
/------------|---------------------/ ||
| | /---------------\ ||
| +---------|-+-----------+-|------+--------|+ ||
\----> | | clarinet | \> | [drums]/| ||
| [viola]\\\\---> | +---------+ ||
| \-----> | | |/---/|
+-----------+ [violin]\ | | [cello]--/ |
| <------------/ | +---------+ |
| +-----------+ <----------\| |
| | | | [tuba]/| |
| | [piano]\ | | | |
| <-----------/ | | | |
| +-----------+--------+ | |
| | |[trumpet]------/
| [flute]-----> | |
| | saxaphone | |
+-----------+--------------------+---------+
"""
def to_board(s):
return [[*i] for i in filter(None, s.split('\n'))]
def solution(b):
for i in f(to_board(b)):
print(''.join(i))
solution(s1)
solution(s2)
solution(s3)
solution(s4)
solution(s5)
solution(s6)
RT1lbnVtZXJhdGUKVT1sYW1iZGEgYix4LHk6bGVuKGIpPng+LTE8eTxsZW4oYlswXSkKZGVmIGYoYik6CiBxPVsoeCx5LCcnLCcnLDAsMSlmb3IgeCxyIGluIEUoYilmb3IgeSxsIGluIEUocilpZidbJz09bF0KIHdoaWxlIHE6CiAgeCx5LHcsbCxYLFk9cS5wb3AoMCkKICBpZih1Oj1iW3hdW3ldKS5pc2FscGhhKCk6dys9dQogIGlmJy8nPT11OlgsWT1bLVgsLVldWzo6LTFdCiAgaWYnXFwnPT11OlgsWT1bWCxZXVs6Oi0xXQogIGlmIHUgaW4nPjwnOgogICBmb3IgaSxhIGluIEUoW3dbOjotMV0sd11bdT4nPCddKTpiW3hdW3krWSppXT1hCiAgZWxzZTpxKz0oeCtYLHkrWSx3LHUsWCxZKSw7Ylt4XVt5XT0nfCdpZignLSc9PXUpKlUoYix4KzEseSlhbmQgVShiLHgtMSx5KT4oJyAnaW4oUTo9e2JbeC0xXVt5XSxiW3grMV1beV19KSlhbmR7J3wnLCcrJ30mUSBlbHNlJy0naWYoJ3wnPT11KSpVKGIseCx5LTEpYW5kIFUoYix4LHkrMSk+KCcgJ2luKFE6PXtiW3hdW3krMV0sYlt4XVt5LTFdfSkpYW5keyctJywnKyd9JlEgZWxzZScgJwogcmV0dXJuIGIKIApzMSA9ICIiIgorLS0tLS0tLSstLS0tLS0tLSsKfCBWZXJicyB8IE5vdW5zICB8CistLS0tLS0tKy0tLS0tLS0tKwp8W1RydWNrXS0tLT4gICAgIHwKfCBlYXQgICB8IEJhbmFuYSB8CnwgICAgICAgfCBDYXIgICAgfAorLS0tLS0tLSstLS0tLS0tLSsKIiIiCnMyID0gIiIiCistLS0tLS0tLS0tLSstLS0tLS0tLS0tKwp8ICAgVmVyYnMgICB8ICBOb3VucyAgIHwKKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rCnwgICAgICAgICAgIHwgICAgICAgICAgfAp8W2lzIGEgbm91bl0tPiAgICAgICAgIHwKfCBlYXQgICAgICAgfCBCYW5hbmEgICB8CnwgICAgICAgICAgIHwgQ2FyICAgICAgfAorLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSsKIiIiCnMzID0gIiIiCiAgICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSsgIAogICAgfCAgIFZlcmJzICAgfCAgTm91bnMgICB8ICAKICAgICstLS0tLS0tLS0tLSstLS0tLS0tLS0tKyAgCiAgICB8IFtUcnVja10tLVx8ICAgICAgICAgIHwgIAogIC8tLS0tLS0tLS0tLS0vfCAgICAgICAgPC0tXCAKICB8IHwgZWF0ICAgICAgIHwgQmFuYW5hICAgfHwgCiAgfCB8ICAvLS1cICAgICB8IENhciAgICAgIHx8IAogIHwgKy0tfC0tfC0tLS0tKy0tLS0tLS0tLS0rfCAKICBcLS0tLS8gIFwtLS0tLS0tLS0tLS0tLS0tLS8gCiIiIgpzNCA9ICIiIgogICArLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKwogICB8IENvbG9ycyB8ICBGb29kcyAgIHwgIENvdW50cmllcyAgfAogICArLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tKwogICB8IHJlZCAgICB8IHBpenphICAgIHwgU3dpdHplcmxhbmQgfAogLy0tPiAgICAgLy0tLS0+ICAgICAgIHwgICAgICAgICAgICAgfAogfCB8W2thbGVdLyB8IGhvdCBkb2dzIHwgQnJhemlsICAgICAgfAogfCB8ICAgICA8LS0tLS0tLS0tLS0tLS0tLS0tLS0tLVwgICAgfAogfCB8IG9yYW5nZSB8W3llbGxvd11cIHwgW2dyZWVuXS8gICAgfAogfCArLS0tLS0tLS0rLS0tLS0tLS18LSstLS0tLS0tLS0tLS0tKwogXC0tLS0tLS0tLS0tLS0tLS0tLS0vICAgICAgICAgICAgICAgIAoiIiIKczUgPSAiIiIKLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVwgCnwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IAp8ICArLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tLSsgfCAKfCAgfCBmcm9nICAgICAgICAgICAgIHwgICAgICAgICAgfCAgICAgICB8IHwgCnwgIHwgZm9yZ2UgICAgICAgICAgICB8IGRvZyAgICAgIHwgZWFnbGUgfCB8IAp8ICB8IGZvdW5kYXRpb24gICAgICAgfCBkaWxpZ2VudCB8IGVhc2UgIHwgfCAKfCAgfFtCcm90aGVyXS0tXCAgICAgIHwgZG93biAgICAgfCBlbGYgICB8IHwgCnwgIHwgICAgICAgICAgIHwgICAgICB8W2VnZ10tLVwgIHxbZm9ydF0tLS0vIApcLS0tLT4gICAgICAgICB8ICAgICAgfCAgICAgICB8ICB8ICAgICAgIHwgICAKICAgfCAgICAgICAgICAgXC1cICAgIHwgICAgICAgXC0tLS0tPiAgICB8ICAgCiAgICstLS0tLS0tLS0tLS0tfC0tLS0rLS0tLS0tLS0tLSsgICAgICAgfCAgIAogICB8ICAgQm95ICAgICAgIFwtLT4gICAgICAgICAgICB8ICAgICAgIHwgICAKICAgfCAgIEJ1bGwgICAgICAgICAgICAgICAgICAgICAgfCAgICAgICB8ICAgCiAgIHwgICBCcm93c2VyICAgICAgICAgICAgICAgICAgIHwgICAgICAgfCAgIAogICArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLSsgICAKIiIiCnM2ID0gIiIiCiAgICAgICAgICAgICAvLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cICAgCiAgICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgLy0tLS0tLS0tLS0tLS0tLVx8ICAgCi8tLS0tLS0tLS0tLS18LS0tLS0tLS0tLS0tLS0tLS0tLS0tLyAgICAgICAgICAgICAgIHx8ICAKfCAgICAgICAgICAgIHwgICAgICAgICAgICAgICAvLS0tLS0tLS0tLS0tLS0tXCAgICAgfHwgICAgCnwgICstLS0tLS0tLS18LSstLS0tLS0tLS0tLSstfC0tLS0tLSstLS0tLS0tLXwrICAgIHx8ICAgClwtLS0tPiAgICAgICB8IHwgIGNsYXJpbmV0IHwgXD4gICAgIHwgW2RydW1zXS98ICAgIHx8ICAgCiAgIHwgW3Zpb2xhXVxcXFwtLS0+ICAgICAgICAgfCAgICAgICAgKy0tLS0tLS0tLSsgICAgfHwgICAKICAgfCAgICAgICAgXC0tLS0tPiAgICAgICAgfCAgICAgICAgfCAgICAgICAgIHwvLS0tL3wgICAKICAgKy0tLS0tLS0tLS0tKyBbdmlvbGluXVwgfCAgICAgICAgfCBbY2VsbG9dLS0vICAgIHwgICAKICAgfCAgICAgICAgPC0tLS0tLS0tLS0tLS8gfCAgICAgICAgKy0tLS0tLS0tLSsgICAgIHwgCiAgIHwgICAgICAgICAgICstLS0tLS0tLS0tLSsgICAgICA8LS0tLS0tLS0tLVx8ICAgICB8ICAgCiAgIHwgICAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgIHwgIFt0dWJhXS98ICAgICB8ICAgCiAgIHwgICAgICAgICAgIHwgW3BpYW5vXVwgIHwgICAgICAgIHwgICAgICAgICB8ICAgICB8ICAgICAKICAgfCAgICAgICAgPC0tLS0tLS0tLS0tLyAgfCAgICAgICAgfCAgICAgICAgIHwgICAgIHwgICAgCiAgIHwgICAgICAgICAgICstLS0tLS0tLS0tLSstLS0tLS0tLSsgICAgICAgICB8ICAgICB8ICAgICAgIAogICB8ICAgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICB8W3RydW1wZXRdLS0tLS0tLyAgCiAgIHwgW2ZsdXRlXS0tLS0tPiAgICAgICAgICAgICAgICAgIHwgICAgICAgICB8ICAgICAgICAgCiAgIHwgICAgICAgICAgIHwgICAgIHNheGFwaG9uZSAgICAgIHwgICAgICAgICB8ICAgICAgIAogICArLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tKyAgICAgICAgICAgICAgIAoiIiIKZGVmIHRvX2JvYXJkKHMpOgoJcmV0dXJuIFtbKmldIGZvciBpIGluIGZpbHRlcihOb25lLCBzLnNwbGl0KCdcbicpKV0KCmRlZiBzb2x1dGlvbihiKToKCWZvciBpIGluIGYodG9fYm9hcmQoYikpOgoJCXByaW50KCcnLmpvaW4oaSkpCgpzb2x1dGlvbihzMSkKc29sdXRpb24oczIpCnNvbHV0aW9uKHMzKQpzb2x1dGlvbihzNCkKc29sdXRpb24oczUpCnNvbHV0aW9uKHM2KQ==