Você é responsável por construir uma nova rodovia. No entanto, conduz por terras montanhosas e, portanto, precisa de numerosas pontes e túneis. A rodovia em si deve permanecer em um único nível.
Entrada
Você recebe uma descrição ASCII aproximada de como as montanhas se parecem com entradas padrão, como as seguintes:
/\
/ \
/\ / \
/\ / \/ \
/ \ / \ /\
/ \/ \ / \
_ / \ /\ / \
\ / \ / \ / \ /\
\ / \ / \/ \/ \
\ / \ /
\/ \/
A _
primeira coluna marca o início e o nível da estrada. A cordilheira é contígua e, se o último segmento for uma ponte, possui um número par de caracteres.
Você pode supor que uma linha de entrada nunca tenha mais que 100 caracteres e que não haja mais que 15 linhas. Cada linha tem o mesmo comprimento que é possivelmente preenchido com espaço no final. A estrada nunca começa dentro de uma montanha ou como uma ponte. A primeira coisa que segue o ladrilho da estrada na entrada é uma inclinação para baixo ou para cima.
Saída
A produção é a mesma cadeia de montanhas, exceto que agora existe uma estrada onde anteriormente era apenas o seu começo. A saída é fornecida na saída padrão.
Para isso, existem inúmeras regras:
A estrada deve começar no local indicado na entrada e permanecer no mesmo nível o tempo todo. Para facilitar, preparamos uma série de ladrilhos pré-fabricados com a seguinte aparência
_
:_______ \ / \/\/
A estrada deve se estender até o extremo da cordilheira (isto é, o comprimento das linhas de entrada determina o quão longe a estrada vai).
Os túneis devem ser perfurados sempre que uma montanha é para onde a estrada precisa percorrer. Os túneis atravessam a montanha e deixam buracos no início e no final (ou seja, um túnel substitui a encosta da montanha por um parêntese de fechamento no início e um parêntese de abertura no final).
Os túneis deixam, bem, um túnel na montanha que geralmente tem um teto. Felizmente, nossos ladrilhos pré-fabricados podem ser usados para reforçar o teto, para que o túnel não desmorone (a linha acima do túnel deve ser usada
_
para reforçar o túnel):/\ / \ /____\ ___)______(__ \/ \/
O túnel não precisa ser reforçado quando a montanha não está alta o suficiente acima dele. Parece estranho para mim também, mas me disseram que os ladrilhos pré-fabricados são fortes o suficiente para aguentar, mesmo quando espaçados nesse caso (nenhum teto do túnel é desenhado quando há uma inclinação diretamente acima do túnel):
/\ /\/__\ ___)______(__ \/ \/
Pontes são necessárias sempre que a estrada precisa atravessar um abismo. Para pontes curtas, os ladrilhos pré-fabricados são fortes o suficiente, mas ainda precisam de um pouco de apoio no início e no final da ponte (a primeira inclinação descendente sob a ponte e a última inclinação ascendente são substituídas por,
Y
para que haja uma viga de apoio para a ponte ):_____ Y Y \/
Pontes mais longas precisam de suporte adicional. Uma ponte longa é aquela que possui mais de seis faixas de estrada não suportadas seguidas. Pontes longas precisam de um pilar no centro. Pilares são facilmente construídos com nossos vigas pilar pré-construídos que se parecem com isto:
|
. Cada pilar precisa de dois deles e eles se estendem até o fundo do abismo:_____________________________ Y || Y \ /\ || /\ /\/ \ /\ / \||/ \ /\/ \/ \/ \/ \/
Como a entrada representa apenas uma parte de toda a cadeia montanhosa pela qual a rodovia precisa ser construída, pode terminar abruptamente no meio de uma ponte ou túnel. A regra da ponte longa ainda se aplica ao segmento final e você pode assumir que a primeira parte além da entrada fornecida suporta a ponte novamente.
Seguindo as regras acima, obtemos o seguinte para nossa entrada:
/\
/ \
/\ / \
/\ / \/ \
/ \ / \ /\
/____\/______________\ /__\
_________)______________________(________)(____)____(______
Y Y Y Y Y Y Y YY
\ / \ / \/ \/ \
\ / \ /
\/ \/
O código mais curto por contagem de caracteres vence. O espaço em branco à direita nas linhas é ignorado para validação.
Entrada de amostra 1
_
\ /\
\ / \
\ / \
\ /\ / \ /\ /
\ /\ / \ / \ /\ /\/ \ /
\ / \ / \/ \ / \/ \/\ /
\/ \ / \ / \/
\ / \/
\/
Saída de amostra 1
____________________________________________________________
Y || YY ||
\ || / \ ||
\ || / \ ||
\ || /\ / \ || /\ /
\ /\ || / \ / \ /\ |/\/ \ /
\ / \ || / \/ \ / \/ \/\ /
\/ \ || / \ / \/
\||/ \/
\/
Entrada de amostra 2
/\ /\
/ \/ \ /
/\ / \ /\ /
/\ / \ / \/ \ /
/ \ / \/\ / \ /\ /
/ \/ \ / \ / \ /
_/ \ / \/ \/
\ /
\ /\/
\ /\ /
\/ \ /
\ /
\/
Saída de amostra 2
/\ /\
/ \/ \ /
/\ / \ /\ /
/\ / \ / \/ \ /
/ \ / \/\ / \ /\ /
/____\/________\ /__________________\ /__\ /____
_)________________(__________________)____________________()____()_____
Y || Y
\ || /\/
\ /\ || /
\/ \|| /
\| /
\/
Nota
Os espaços à direita na saída são ignorados para comparação com as soluções de referência.
Condição vencedora
O código mais curto vence, como é habitual no golfe. Em caso de empate, a solução anterior vence.
Casos de teste
Existem dois scripts de teste, contendo casos de teste idênticos:
A invocação ocorre nos dois casos:, <test script> <my program> [arguments]
por exemplo, ./test ruby bridges.rb
ou ./test.ps1 ./bridges.exe
.
Outra nota
Esta tarefa fez parte de um concurso de golfe realizado na minha universidade durante o período 2011-W24. As pontuações e idiomas de nossos concorrentes foram os seguintes:
- 304 - Perl
- 343 - C
- 375 - C
- 648 - Python
Nossa própria solução (graças ao Ventero) foi
- 262 - Ruby