Todos a bordo do trem ASCII!
o O O ___ ___ ___ ___ ___ ___ ___ ___ ___
o | C | | O | | D | | E | | | | G | | O | | L | | F |
TS__[O] |___| |___| |___| |___| |___| |___| |___| |___| |___|
{======|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|
./o--000'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'"`-0-0-'
É melhor você estar preparado para pegar o trem, porque está prestes a construir o trem em que estará andando. Dada uma corda s
, produza um trem totalmente formado, como mostrado acima. A primeira coisa que sai é sempre o mecanismo que puxará sua corda, como mostrado abaixo:
o O O
o
TS__[O]
{======|
./o--000'
Seguindo a locomotiva, há vagões contendo cada personagem de sua preciosa carga. Para economizar confusão ao descarregar, sua empresa encarregou você de rotular a parte externa desses carros. Os carros em questão sempre terão a seguinte aparência:
___
| # |
|___|
_|"""""|
"`-0-0-'
Onde o #
é representativo do personagem que está dentro do porão de "carga". A ligação do motor a cada carro também faz parte do seu trabalho, pois você deve supervisionar a fluidez e o sucesso de todo o transporte. Assim, depois de rotular todos os carros e colocar o motor nos trilhos, você deve garantir que o trem esteja montado e pronto para rolar.
Regras
- A única entrada que seu programa deve receber é uma única sequência.
- O motor deve sempre ter saída, mesmo que sua remessa esteja vazia.
- Cada carro pode conter apenas um personagem, não empurre a sorte, pois pode danificar a mercadoria.
- Você precisa apenas suportar os seguintes caracteres ASCII imprimíveis:
_-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
Se você acabar fazendo mais, tudo bem também, mas esse é o mínimo necessário. - 1-2 espaços à direita são aceitáveis, assim como uma nova linha à direita.
- Isso é código-golf ascii-art , menor número de bytes ganhos.
Respostas:
05AB1E ,
10199 bytesPrimeira tentativa ingênua.
Experimente online!
fonte
JavaScript (ES6),
149144 bytesEu não acho que o próprio motor possa ser comprimido, mas talvez seja possível.
Snippet de teste
Mostrar snippet de código
fonte
Befunge,
276270 bytesExperimente online!
Explicação
O carro e o motor são codificados como dois conjuntos de cinco cadeias nas linhas 3 a 12. Os valores dos caracteres são 1 em zero, para evitar ter que lidar com aspas duplas que não podem ser usadas em uma string Befunge.
O código funciona criando o conjunto completo de caracteres necessários para renderizar o trem na pilha. Para cada linha de saída, uma sequência de carros apropriada é primeiro adicionada à pilha, repetida quantas vezes forem necessárias para a carga e, em seguida, uma cópia da sequência de mecanismo apropriada.
Após a construção de cada linha, um par de setas para a esquerda das cordas é substituído por uma seta para a direita. Portanto, a próxima iteração do loop segue um caminho diferente no código, usando um par de cordas diferente para o carro e motor.
Depois que todos os dados foram construídos na pilha, há um loop de renderização final que grava os caracteres, subtraindo 1 a cada vez para contabilizar a codificação inicial.
Como um bônus, a fonte é projetada na forma de uma torre de armas , caso o trem seja atacado.Golfistas destruíram minha torre de armas.fonte
PHP,
218 211 204 187183 bytesRecebe entrada do STDIN; corra com
-nR
.A compactação do mecanismo ou vagão exigiria mais código para descompactar do que economiza no armazenamento.
Não vejo mais potencial aqui.
fonte
a&$c=$argn
em vez de""<$c=$argv[1]
Python 2, 176 bytes
Exemplo:
dá
fonte
Powershell,
167166 BytesExemplo:
Possivelmente inválido! Se executado sem argumentos, ele tentará imprimir uma sequência vazia e será semelhante a:
Se executado com uma string de entrada vazia, ela retornará corretamente, no entanto:
(meio) Ungolfed:
a menor compressão no Powershell será
+'c'*x
onde c é o caractere x é o número de repetições, e isso é apenas para repetições à direita ou à direita, qualquer repetição na corda central exigirá um extra+
e um extra"
- portanto, não há sentido em que Posso ver a compactação economizando espaço, e o único conjunto de caracteres repetidos___
é de apenas 3 caracteres.Explicação:
$l=($a=$args[0]).Length
Pegue o primeiro argumento, coloque-o em $ a, depois pegue o tamanho de $ a e coloque-o em $ l, essas são as únicas variáveis necessárias." o O O"+" ___ "*$l
a maioria dos outros bits segue esse formato da parte esquerda e depois a parte direita vezes o número de caracteres necessários." o "+([char[]]$a|%{" | $_ |"})
loop (|%{}
) a $ a como uma matriz de caracteres, portanto,foreach (char $_ in $a)
para uma versão sem pipeline, coloque o caractere no texto.essa é uma abordagem extremamente simples, mas como não consigo encontrar uma boa maneira de compactar as strings, parece a mais útil.
economizou 1 Byte graças ao briantist! e aqui eu estava pensando que isso não ficaria mais curto ..
fonte
[char[]]$a
para$a[0..$l]
:) #$l
e esquecesse totalmente. obrigado por isso!Java, 361 bytes
Exemplo
fonte
interface C{static void main(String[]v){String n="\n",b=" o O O ",c=" o ",d=" TS__[O] ",e=" {======|",f="./o--000'";for(String x:new java.util.Scanner(System.in).nextLine().split("")){b+="___ ";c+="| "+x+" | ";d+="|___| ";e+="_|\"\"\"\"\"|";f+="\"`-0-0-'";}System.out.print(b+n+c+n+d+n+e+n+f);}}
( 318 bytes ) ou até mais se você substituirnew java.util.Scanner(System.in).nextLine()
comv[0]
como entrada alternativa ( 279 bytes ) Experimente aqui .Perl, 137 bytes
132 bytes de código + 5 bytes para
-pF
sinalizadores.ascii_train.pl
:Observe que eu adicionei
-a
sinalizador no código, mas é apenas porque versões antigas do Perl exigem-a
quando-F
é usado.Para executá-lo:
A entrada deve ser fornecida sem uma nova linha final (
echo -n
por exemplo).Explicações:
Pelo que vi, é mais ou menos a mesma ideia que a resposta JavaScript da ETHProduction.
Não há muita coisa acontecendo: infelizmente os padrões são um pouco curtos para fazer com que o
x
operador valha a pena ser usado.Primeiro,
s/./ | $& | /g
envolve cada caractere da entrada com|
(e espaços) para formar o segundo nível do trem.Então, dentro dessa longa corda, tudo entre a
!
e uma nova linha é um padrão que desejamos repetir para construir os carros. Essa repetição é feita graças ao regexs/!(.*)/$1x@F/ge
. (Eu usei!
porque a entrada não pode conter).fonte
C #, 277 bytes
Golfe:
Ungolfed:
Testando:
E...
fonte
Bytes C # 221
nada de especial está acontecendo aqui .. apenas criando cada linha e junte-se a elas com novas linhas.
fonte
C,
217212208 bytesExperimente online
Resultado:
fonte
SOGL V0.12 ,
5756 bytesExperimente aqui!
Explicação:
fonte
Jq 1.5 , 178 bytes
Expandido
Amostra de execução
Experimente online
fonte
Excel VBA, 218 bytes
Função de janela imediata VBE anônima que leva as entradas do intervalo
[A1]
e as saídas para a janela imediata VBEFormatado para facilitar a leitura
Saída de amostra
fonte