Digamos que eu estava escrevendo algo, e acidentalmente escrevi na caixa errada:
+-------+--------+
| Verbs | Nouns |
+-------+--------+
| Truck | |
| eat | Banana |
| | Car |
+-------+--------+
Então eu, sendo preguiçoso, apenas desenho uma flecha no espaço que deveria ser:
+-------+--------+
| Verbs | Nouns |
+-------+--------+
|[Truck]---> |
| eat | Banana |
| | Car |
+-------+--------+
Seu trabalho é torná-lo bonito - transformá-lo neste:
+-------+--------+
| Verbs | Nouns |
+-------+--------+
| | Truck |
| eat | Banana |
| | Car |
+-------+--------+
Regras
- Frases ou palavras estão entre colchetes ([...])
As entradas multilinhas são indicadas como [...](multilinhas removidas), nova linha, [...] --...-->. Portanto, a seta sempre sai do suporteinferiordireito
Por exemplo:
+-----------+----------+
| Verbs | Nouns |
+-----------+----------+
| | |
|[is a noun]-> |
| eat | Banana |
| | Car |
+-----------+----------+
Torna-se em:
+-----------+----------+
| Verbs | Nouns |
+-----------+----------+
| | |
| | is a noun|
| eat | Banana |
| | Car |
+-----------+----------+
- As caixas são delimitadas por sinais de mais ("+") e deve-se assumir que as setas não passarão por um sinal de mais
- Sempre haverá espaço no final de uma seta para a palavra ou frase caber
- A ordem é importante - a palavra deve aparecer para onde a seta aponta, embora o alinhamento vertical não seja importante
- As setas podem girar 90 graus por vez, mas apenas entre "/" e "\" (veja abaixo)
Por exemplo:
+-----------+----------+
| Verbs | Nouns |
+-----------+----------+
| [Truck]--\| |
/------------/| <--\
| | eat | Banana ||
| | /--\ | Car ||
| +--|--|-----+----------+|
\----/ \-----------------/
A competição
Qualquer entrada é aceitável (arquivo de texto, STDIN, etc.)
qualquer saída legível é aceitável (arquivo de texto, STDOUT, etc)
Aqui estão mais alguns exemplos:
Isso é código de golfe, então o código mais curto vence!
Alguns casos de teste:
+--------+----------+-------------+
| 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 | |
+-----------+--------------------+---------+
Respostas:
Pitão,
700681676667 caracteresAinda não totalmente jogado, mas queria dar uma resposta.
Estratégia :
Transformei a entrada em uma matriz. Então eu digitalizo linha por linha, encontrando
[
s. Para todos[
, encontro a correspondência]
e chamo a função traceT
com o ponto imediatamente à direita do]
. A função trace segue a linha, substituindo o caminho por' '
s, e retorna para onde a palavra deve ir. Depois, apago a palavra no local antigo e coloco a palavra no novo local.Finalmente, eu ligo
F
, que recursivamente reconstrói as caixas.Testes :
fonte