Todos a bordo do trem ASCII

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 é , 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» 

Experimente online!

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,"&lt;br&gt;"))"><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_@>$$$$>,# 

Experimente online!

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") 

 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ê substituir new java.util.Scanner(System.in).nextLine() com v[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┼ 

Experimente aqui!

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("");}} 

Experimente online

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 

Experimente online

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-"  

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *