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-"
Você melhor esteja preparado para pegar o trem, porque você está prestes a construir o trem no qual viajará. Dada uma string s
, produza um trem totalmente formado conforme descrito acima. A primeira saída é sempre o motor que “puxará sua corda, conforme ilustrado sozinho abaixo:
o O O o TS__[O] {======| ./o--000"
Seguindo a locomotiva estão os vagões contendo cada caráter de sua carga preciosa. Para evitar confusão ao descarregar, sua empresa incumbiu você de etiquetar a parte externa desses carros. Os carros em questão sempre terão a seguinte aparência:
___ | # | |___| _|"""""| "`-0-0-"
Onde #
é representativo do caractere que está dentro do ” cargo ” hold. Acorrentar o motor a cada carro também faz parte do seu trabalho, já que você foi encarregado de supervisionar a fluidez e o sucesso de toda a remessa. Portanto, depois de etiquetar todos os carros e colocar o motor nos trilhos, você deve garantir que o trem esteja montado e pronto para andar.
Regras
- apenas a entrada que seu programa deve receber é uma única string.
- O motor deve sempre ser enviado, mesmo se sua remessa estiver vazia.
- Cada carro pode conter apenas um caractere, não tente a sorte, você pode danificar os bens.
- Você só precisa suportar os seguintes caracteres ASCII imprimíveis:
_-0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
Se você acabar fazendo mais, que “Tudo bem também, mas este é o mínimo. - 1-2 espaços finais são aceitáveis, assim como uma única nova linha final.
- Isso é code-golf ascii-art , menor contagem de bytes vitórias.
Comentários
- Vagamente relacionado.
- Eu não ‘ acho que isso é realmente complexidade de kolmogorov . Bas ed em neste meta post esta questão está certamente na linha entre se ajustar ou não a nossa definição e eu pessoalmente diria que não se encaixa na tag semelhante a esta pergunta que também pede um tipo de encapsulamento de string.
- Isso é lindo ascii -art
- @WheatWizard it ‘ é uma mistura de vários gêneros. O motor cairia na complexidade de kolmogrov, a coisa toda em ASCII-Art e provavelmente também cairia um pouco na manipulação de strings.
- Eu tinha a impressão de que compactar o padrão real do trem valeria a pena da tag; mas eu ‘ irei removê-lo para interromper o argumento.
Resposta
05AB1E , 101 99 bytes
Primeira tentativa ingênua.
" o O O o"ð7×"TS__[O] {======|./o--000""J5ä¹v… _ €ÐJy“ | ÿ | |___| _|"""""|"`-0-0-"“«5ä})øJ»
Comentários
- Bem, o código não ‘ se parece com um trem, mas ‘ está ganhando agora.
Resposta
JavaScript (ES6), 149 144 bytes
s=>` o O Oa ___ o a | $& | TS__[O]a |___| {======|a_|"""""| ./o--000"a"\`-0-0-"`.replace(/a(.*)/g,(_,c)=>s.replace(/./g,c))
Não acho que o mecanismo em si possa ser compactado, mas talvez seja possível.
Trecho de teste
let f = s=>` o O Oa ___ o a | $& | TS__[O]a |___| {======|a_|"""""| ./o--000"a"\`-0-0-"`.replace(/a(.*)/g,(_,c)=>s.replace(/./g,c)) O.innerHTML = f("CODE GOLF")
<input value="CODE GOLF" oninput="O.innerHTML=f(this.value.replace(/\n/g,"<br>"))"><br> <pre id=O></pre>
Comentários
- Muitos caracteres repetidos, deve ser possível espremer mais alguns bytes fora dele.
- Quase se pode ver o trem embalado no código-fonte 🙂
- Melhor votado principalmente porque o código se assemelha a um trem
- Pontos de bônus porque ele roda ali mesmo no navegador!
Resposta
Befunge, 276 270 bytes
p1p~:7>7+#:`#~_$:v >#p0p10:p00:+1g00_v#: v"!!```!!!"v>0p01g\-0g1+53p v"!}!#!}!!"v0 p115< v"!}```}!!"v^:-1< v"}#####}`">00g:| >"(.1.1.a#"^+<v1< v"P!P!p!!! "v5>g00p v"!!!!!p!!!"v6 v"^P\``TU!!"vp v"}>>>>>>|!"v+ >"(111..p0/"v6 v-1:g110">>"<g >:11p!#v_p011^ #-:#1_@>$$$$>,#
Explicação
O carro e o motor são codificados como dois conjuntos de cinco strings nas linhas 3 a 12. Os valores dos caracteres estão desviados em 1 para evitar ter que lidar com as aspas duplas que não podem ser usadas em uma string Befunge.
O código funciona construindo o conjunto completo de caracteres necessários para processar o trem em a pilha. Para cada linha de saída, uma sequência de carro apropriada é primeiro adicionada à pilha, repetida quantas vezes forem necessárias para a carga e, em seguida, uma cópia da sequência de motor apropriada.
Depois que cada linha foi construída, um par de setas para baixo à esquerda das strings é substituído por uma seta para a direita, de modo que a próxima iteração do loop segue um caminho diferente através do código, usando um diferente par de strings para o carro e o motor.
Depois que todos os dados foram compilados na pilha, há um loop de renderização final que grava os caracteres, subtraindo 1 cada vez para contabilizar a codificação inicial .
Como bônus, a fonte é projetada na forma de uma torre de canhão , no caso de o trem ser atacado . Os jogadores de golfe destruíram minha torre de arma.
Comentários
- Os jogadores de golfe destruíram minha torre de arma, LOL. +1. Ainda assim, ‘ s vencendo C # e Java.
Resposta
PHP, 218 211 204 187 183 bytes
o O O<?for(;$y<5;print"\n".[" o "," TS__[O]"," {======|","./o--000""][+$y++])for($p=0;$c=a&$argn[$p++];)echo[" ___ "," | $c | "," |___| ","_|"""""|","\"`-0-0-""][+$y];
Recebe informações de STDIN; executa com -nR
.
Comprimir o motor ou wagon exigiria mais código para descompactar do que economiza em armazenamento.
Não vejo mais potencial aqui.
Comentários
-
a&$c=$argn
em vez de""<$c=$argv[1]
- @J ö rgH ü lsermann Sim, este post era antigo. 🙂
Resposta
Python 2, 176 bytes
lambda i:"\n".join(map("".join,zip(*[[" o O O"," o "," TS__[O]"," {======|","./o--000""]]+[[" ___ "," | "+x+" | "," |___| ","_|"""""|","\"`-0-0-""]for x in i])))
Exemplo:
print f("Python")
dá
o O O ___ ___ ___ ___ ___ ___ o | P | | y | | t | | h | | o | | n | TS__[O] |___| |___| |___| |___| |___| |___| {======|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""| ./o--000""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-"
Resposta
Powershell, 167 166 bytes
$l=($a=$args[0]).Length;" o O O"+" ___ "*$l;" o "+($a[0..$l]|%{" | $_ |"});" TS__[O]"+" |___| "*$l;" {======|"+"_|"""""|"*$l;"./o--000""+""`-0-0-"""*$l
Exemplo:
.\train.ps1 "PowerShell!" o O O ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ o | P | | o | | w | | e | | r | | S | | h | | e | | l | | l | | ! | TS__[O] |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| {======|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""| ./o--000""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-"
Possivelmente inválido! Se executado sem nenhum argumento, ele tentará imprimir uma string vazia e terá a seguinte aparência:
o O O o | | TS__[O] {======| ./o--000"
Se executado com uma string de entrada vazia, retornará corretamente no entanto:
.\train.ps1 "" o O O o TS__[O] {======| ./o--000"
(mais ou menos) Ungolfed:
$l=($a=$args[0]).Length " o O O"+" ___ "*$l " o "+($a[0..$l]|%{" | $_ |"}) " TS__[O]"+" |___| "*$l " {======|"+"_|"""""|"*$l "./o--000""+""`-0-0-"""*$l
a compressão mais curta no Powershell é vai ser +"c"*x
onde c é o caractere e x é o número de repetições, e que “s apenas para repetições à direita ou à direita, quaisquer repetições da corda central exigirão um +
e um "
extra – então não há nenhum ponto nisso onde eu posso ver a compressão economizando qualquer espaço, e o único conjunto de caracteres repetido é ___
que tem apenas 3 caracteres.
Explicação:
$l=($a=$args[0]).Length
Pegue o primeiro argumento , coloque-o em $ a e, em seguida, pegue o comprimento de $ a e coloque-o em $ l, essas são as únicas variáveis de que você precisa.
" o O O"+" ___ "*$l
a maior parte de os outros bits seguem este formato de t a parte esquerda e depois a parte direita vezes o número de caracteres necessários.
" o "+([char[]]$a|%{" | $_ |"})
loop (|%{}
) por meio de $ a como uma matriz de char, então foreach (char $_ in $a)
para uma versão não pipeline, então coloque o char no texto.
esta é uma abordagem extremamente simples, mas como não consigo encontrar uma boa maneira de comprimir as strings além disso, parece ser a mais útil.
economizei 1 byte graças ao briantist! e aqui estava eu pensando que não ficaria mais curto.
Comentários
- Você não ‘ não preciso lidar com argumentos :).
- @carusocomputing yay, obrigado por me avisar.
- Legal! Você pode economizar 1 byte alterando
[char[]]$a
para$a[0..$l]
🙂 - ah estava usando matriz de char antes de declarar
$l
e esqueci totalmente sobre isso. obrigado por isso!
Resposta
Java, 361 bytes
class C {static void main(String[]v){Scanner q = new Scanner(System.in);String i = q.nextLine();String[] t = {" o O O ", " o ", " TS__[O] ", " {======|", "./o--000"",};for (char c: i.toCharArray()) {t[0]+="___ ";t[1]+="| # | ".replace("#",c);t[2]+="|___| ";t[3]+="_|\"\"\"\"\"|";t[4]+="\"`-0-0-"";}for(String p:t) System.out.println(p);}}
class C { static void main(String[]v) { Scanner q = new Scanner(System.in); String i = q.nextLine(); String[] t = { " o O O ", " o ", " TS__[O] ", " {======|", "./o--000"", }; for (char c: i.toCharArray()) { t[0]+="___ "; t[1]+="| # | ".replace("#",c); t[2]+="|___| "; t[3]+="_|\"\"\"\"\"|"; t[4]+="\"`-0-0-""; } for(String p:t) System.out.println(p); } }
Exemplo
java o O O ___ ___ ___ ___ o | j | | a | | v | | a | TS__[O] |___| |___| |___| |___| {======|_|"""""|_|"""""|_|"""""|_|"""""| ./o--000""`-0-0-""`-0-0-""`-0-0-""`-0-0-"
Comentários
- Eu sei que ‘ caiu pela metade em um ano, mas você pode golfe bastante (também removendo espaços):
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 ainda mais se você substituirnew java.util.Scanner(System.in).nextLine()
comv[0]
como alternativa em put ( 279 bytes ) Experimente aqui .
Resposta
Perl, 137 bytes
132 bytes de código + 5 bytes para -pF
sinalizadores.
ascii_train.pl
:
#!/usr/bin/perl -apF s/./ | $& | /g;$_=" o O O! ___ o $_ TS__[0]! |___| {======|!"."_|"""""|"." ./o--000"!\"`-0-0-"";s/!(.*)/$1x@F/ge
Observe que adicionei o sinalizador -a
no código, mas é apenas porque as versões antigas do Perl exigem -a
quando -F
é usado.
Para executá-lo:
echo -n "code-golf" | perl ascii_train.pl
O a entrada deve ser fornecida sem uma nova linha final (com echo -n
por exemplo).
Explicações:
Pelo que vi, é praticamente a mesma ideia como a resposta do JavaScript da ETHProduction.
Não há muita coisa acontecendo: infelizmente, os padrões são um pouco curtos demais para fazer com que o operador x
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 dele string longa, tudo entre um !
e uma nova linha é um padrão que desejamos repetir para construir os carros. Essa repetição é feita graças ao regex s/!(.*)/$1x@F/ge
. (Usei !
porque a entrada não pode contê-la).
Resposta
SOGL V0.12 , 57 56 bytes
Τ¡ā↓mΛC┌─⁵℮Ƨ⅛□→(š;∞⅟¹°⅔Ζ‽ζ÷⁴‘9n,{"s=Ο!NθæιžGš‼t╬¼Xg`‘8n┼
Explicação:
..‘ push a compressed string of the locomotive in a single line 9n split in line lengths of 9 ,{ for each character in the input "..‘ push a compressed string of a wagon in a single line 8n split to line lengths of 8 ┼ add horizontally
Resposta
C #, 277 bytes
Jogado golfe:
string T(string s){var o=new string[]{" o O O"," o "," TS__[O]"," {======|","./ o--000"" };for(int i=0;i<s.Length;i++){o[0]+=" ___ ";o[1]+="| # | ".Replace("#",s[i]+"");o[2]+=" |___| ";o[3]+="_|\"\"\"\"\"|";o[4]+="\"`-0-0-"";}return string.Join("\r\n",o);
Sem golfe:
public string T(string s) { var o = new string[] { " o O O", " o ", " TS__[O]", " {======|", "./ o--000"" }; for (int i = 0; i < s.Length; i++) { o[0] += " ___ "; o[1] += "| # | ".Replace("#", s[i] + ""); o[2] += " |___| "; o[3] += "_|\"\"\"\"\"|"; o[4] += "\"`-0-0-""; } return string.Join("\r\n", o); }
Teste:
Console.Write(new AllAboardTheASCIITrain().T("")); o O O o TS__[O] {======| ./ o--000"
E …
Console.Write(new AllAboardTheASCIITrain().T("Programming Puzzles & Code Golf")); o O O ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ o | P | | r | | o | | g | | r | | a | | m | | m | | i | | n | | g | | | | P | | u | | z | | z | | l | | e | | s | | | | & | | | | 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-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-"
Resposta
C # 221 bytes
nada de especial acontecendo aqui .. apenas criando cada linha e juntando-as com novas linhas.
s=>{var t=new[]{" o O O"," o "," TS__[O]"," {======|","./o--000""};foreach(var c in s){t[0]+=" ___ ";t[1]+=$" | {c} | ";t[2]+=" |___| ";t[3]+="_|\"\"\"\"\"|";t[4]+="\"`-0-0-"";}return string.Join("\n",t);};
Resposta
C, 217 212 208 bytes
i;f(char*t){char d[]=" o O O o TS__[O] {======|./o--000" ___ | C | |___| _|\"\"\"\"\"|\"`-0-0-"",*p;for(;i<5;i++){printf("%.9s",d+i*9);for(p=t;d[57]=*p++;)printf("%.8s",d+45+i*8);puts("");}}
Ou tput:
o O O ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ o | C | | O | | D | | E | | | | G | | O | | L | | F | | | | I | | N | | | | C | TS__[O] |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| {======|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""| ./o--000""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-"
Resposta
Jq 1,5 , 178 bytes
[[" o O O o TS__[O] {======|./o--000""|_nwise(9)]]+[range(length)as$i|[.[$i:$i+1]|" ___ | \(.) | |___| _|\"\"\"\"\"|\"`-0-0-""|_nwise(8)]]|transpose|map(add)[]
Expandido
# engine def E:" o O O o TS__[O] {======|./o--000""|_nwise(9); # car (note string interpolation) def C:" ___ | \(.) | |___| _|\"\"\"\"\"|\"`-0-0-""|_nwise(8); # generate train [[E]] + [range(length) as $i| [.[$i:$i+1] |C]] # combine rows and concatenate strings | transpose | map(add)[]
Exemplo de execução
$ jq -MRr train.jq <<< "golf" o O O ___ ___ ___ ___ o | g | | o | | l | | f | TS__[O] |___| |___| |___| |___| {======|_|"""""|_|"""""|_|"""""|_|"""""| ./o--000""`-0-0-""`-0-0-""`-0-0-""`-0-0-" $ wc -c < train.jq 178
Resposta
Excel VBA, 218 Bytes
Função de janela imediata VBE anônima que recebe entrada do intervalo [A1]
e saídas para a janela VBE imediata
[B1]=[Len(A1)]:?" o O O"[Rept(" ___ ",B1)]:?" o ";:For i=1To[B1]:?" | "Mid([A1],i,1)" | ";:Next:?:?" TS__[O]"[Rept(" |___| ",B1)]:?" {======|"[Rept("_|""""""""""|",B1)]:?"./o--000""[Rept("""`-0-0-"",B1)]
Formatado para facilitar a leitura
[B1]=[Len(A1)] ?" o O O"[Rept(" ___ ",B1)] ?" o ";:For i=1To[B1]:?" | "Mid([A1],i,1)" | ";:Next:?: ?" TS__[O]"[Rept(" |___| ",B1)]: ?" {======|"[Rept("_|""""""""""|",B1)]: ?"./o--000""[Rept("""`-0-0-"",B1)]
Exemplo de saída
o O O ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ ___ o | V | | B | | A | | | | E | | x | | p | | r | | e | | s | | s | TS__[O] |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| |___| {======|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""|_|"""""| ./o--000""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-""`-0-0-"