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
Respostas:
Perl,
210195194193 caracteresatualizar
Mesmas idéias, mas aplicadas de maneira muito diferente, na maior parte.
Corra com
perl -p0
(4 caracteres contados para os comutadores).Isso também requer uma alteração no script de teste do bash, para não colocar em excesso os argumentos:
BTW, eu realmente aprecio os scripts de teste, @Joey.
comentou:
edições :
{3,}
" por 3 espaços literais e o+
quantificador, para salvar outro caractere1while(...)
formulário, onde eu posso omitir o ponto e vírgula no final do scriptoriginal (ver histórico para versão comentada)
Deliberadamente, não olhei para a solução Perl da @ Howard até a minha estar funcionando, mas fui capaz de melhorar meu golfe olhando depois.
Em particular, as regexps para tetos de túneis e pilares estendidos ajudaram. Muito bem, Howard.
Por outro lado, minha alternativa para obter o comprimento da linha, usar o $ _ implícito para a impressão, deixar o ponto-e-vírgula final e remover as novas linhas pode reduzir o tamanho de Howard para 222 caracteres.
fonte
bash
script de teste, agradeça a Ventero. Eu só peguei o que ele criou e bateu nele até que trabalhou um pouco ;-)Perl, 234 caracteres
Esta é uma solução apenas para perl regex. Ele passa em todos os casos de teste fornecidos.
A versão idêntica, porém mais legível, mostra as etapas para obter o resultado:
fonte
C ++,
662622598 caracteres, 4 linhasDeve ser isso, eu testei isso com o script PowerShell, então deve ficar tudo bem ...
Editar 1
Substituiu todas as constantes char por números, removeu chamadas sucessivas para std :: cout + algumas outras pequenas alterações.
Editar 2
última edição, apenas para obter menos de 600. Retirou g [t] [f] como um #define e mudou algumas coisas.
fonte
#define
std::
?Ruby,
382356353 caracteresEu pensei em dar uma chance a uma solução não-regex.
O maior economizador de espaço aqui é usar o
||
operador condicional em vez deif - elsif - end
. Então, ao invés de escrever,if(a) lorem_ipsum end
eu escrevi!a||lopem_ipsum
. Blocos maiores podem ser incluídos usando parênteses!a||(block)
. Se a condição incluir&&
operadores, eles deverão ser negados usando parênteses e um!
ou usando as leis de De Morgan.E aqui está o mesmo com mais palavras
fonte
Scala, 462 caracteres
Não é particularmente competitivo, mas hoje aprendi muito sobre expressões regulares. :-)
fonte
Erlang, 1182 caracteres
Não é competitivo. Para ser sincero, eu estava simplesmente interessado em produzir uma boa arte ascii, não tanto no golfe. Observe que isso não usa expressões regulares; em vez disso, eu mesmo escrevi a máquina de estado. Isso também precisará da correção de superquotação no shell script, mencionada na solução perl acima.
fonte
PowerShell,
300295 287 bytesCorreção de -8 bytes exibida na resposta do DCharness'es .
Script de teste não destruído:
Saída:
Explicação dos quadrinhos:
fonte