ASCII Train Golf

60

Considere estos siete vagones de tren ASCII.

Motor (E)

            __
======      \/
| [] |=========
|              )
================
 O-O-O   O-O-O \\

Vehículo de pasajeros (P)

===============
| [] [] [] [] |
===============
 O-O       O-O

Furgón (B)

===============
|-|-|  |  |-|-|
===============
 O-O       O-O

Petrolero (T)

 _____---_____
(             )
===============
 O-O       O-O

Tolva (H)

_______________
\ | | | | | | /
===============
 O-O       O-O

Cama plana (F)

===============
 O-O       O-O

Caboose (C)

    =====
====|   |====
| []     [] |
=============
 O-O     O-O

Escriba un programa que, cuando se le da una secuencia de caracteres EPBTHFC, genera su representación de tren ASCII, que se utiliza --para los acoplamientos del automóvil. Los caracteres de entrada más a la izquierda se convierten en los vagones de tren más a la derecha. El tren siempre está mirando a la derecha.

Por ejemplo, una entrada de EEHTBPFCdebería producir

                                                                                                                __                __
    =====                                                                                           ======      \/    ======      \/
====|   |====                   ===============  ===============   _____---_____   _______________  | [] |=========   | [] |=========
| []     [] |                   | [] [] [] [] |  |-|-|  |  |-|-|  (             )  \ | | | | | | /  |              )  |              )
=============--===============--===============--===============--===============--===============--================--================
 O-O     O-O    O-O       O-O    O-O       O-O    O-O       O-O    O-O       O-O    O-O       O-O    O-O-O   O-O-O \\  O-O-O   O-O-O \\

Detalles

  • Este es el código de golf; gana el programa más corto en bytes.
  • Cualquier secuencia de una o más de las letras EPBTHFCes una entrada válida.
  • Su programa debe poder generar los 7 tipos de automóviles exactamente como aparecen arriba.
  • Tome información de la línea de comando o directamente del usuario (por ejemplo, cuadro de mensaje). Salida a stdout. (Las citas alrededor de la entrada están bien).
  • La altura de la salida debe ser 6 o la altura máxima necesaria para los vagones de tren que se dibujan.
  • No coloque acoplamientos ( --) en la parte delantera del primer automóvil o en la parte posterior del último automóvil.
Pasatiempos de Calvin
fuente
¿Habrá siempre una Een el frente y podría haber una Een el medio?
Martin Ender
1
"el programa más corto gana". => ¿contamos bytes o caracteres?
xem
1
Otra pregunta relacionada: codegolf.stackexchange.com/q/4690/9498
Justin

Respuestas:

21

Perl, 265 bytes

Como esta entrada contiene bytes que no corresponden a caracteres ASCII imprimibles, no se puede copiar y pegar aquí directamente. En cambio, lo estoy proporcionando como un volcado hexadecimal. Los usuarios en sistemas Unix-ish pueden reconstruir el script al alimentar el siguiente volcado hexadecimal al xxd -rcomando:

0000000: 7573 6520 436f 6d70 7265 7373 275a 6c69  use Compress'Zli
0000010: 623b 6576 616c 2075 6e63 6f6d 7072 6573  b;eval uncompres
0000020: 7320 2778 daad 9241 6b83 3014 c7ef f914  s 'x...Ak.0.....
0000030: ef10 6add f67c 5ed6 8b06 c646 476f dda1  ..j..|^....FGo..
0000040: 3723 c183 1d85 8212 c740 087e f625 a6a3  7#.......@.~.%..
0000050: b1f6 24fd 3de1 3d7f e8fb e790 b74a 74ed  ..$.=.=......Jt.
0000060: f9f4 c3e9 25cf a328 6310 a094 6b4c 8c78  ....%..(c...kL.x
0000070: 2569 5406 8a12 8cf8 c7ab 09b1 ff71 0222  %iT..........q."
0000080: 833d da02 b874 2981 c10d 3333 df74 39c1  .=...t)...33.t9.
0000090: f531 d6dc 0f03 8f9f 9666 a12d 7021 6e7a  .1.......f.-p!nz
00000a0: 6416 2807 228e dd99 3584 c40f cc52 53ac  d.(."...5....RS.
00000b0: 9160 82a2 4559 0bcd a22c ff2e 1cc1 0e63  .`..EY...,.....c
00000c0: 9d09 6f85 25b8 13b3 8470 3fe3 5c27 a1eb  ..o.%....p?.\'..
00000d0: df5a 7735 b44d 2b86 9eb6 5fef 87dd e707  .Zw5.M+..._.....
00000e0: a5b8 219d b1ae eaed 3743 4709 f1aa d83c  ..!.....7CG....<
00000f0: f1d5 3357 257d 6be7 1039 9186 63a3 214d  ..3W%}k..9..c.!M
0000100: 9257 f607 1251 a1e7 27                   .W...Q..'

El script usa la función Perl 5.10 say, por lo que debe ejecutarse con él perl -M5.010. Toma un argumento de línea de comando único que consiste en las letras EPBTHFCy genera la disposición correspondiente del vagón de tren. Por ejemplo, la entrada FEHproduce la siguiente salida:

                             __                     
                 ======      \/                     
_______________  | [] |=========                    
\ | | | | | | /  |              )                   
===============--================--===============
 O-O       O-O    O-O-O   O-O-O \\  O-O       O-O   

El código legible al comienzo del script simplemente descomprimió la cadena comprimida en zlib que contiene el cuerpo del script y lo evalúa. El código descomprimido, a su vez, se ve así:

@a=split$/,<<'';
            __    
======      \/    
| [] |=========   
|              )  
================--
 O-O-O   O-O-O \\ 


===============  
| [] [] [] [] |  
===============--
 O-O       O-O   


===============  
|-|-|  |  |-|-|  
===============--
 O-O       O-O   


 _____---_____   
(             )  
===============--
 O-O       O-O   


_______________  
\ | | | | | | /  
===============--
 O-O       O-O   




===============--
 O-O       O-O   

    =====      
====|   |====  
| []     [] |  
=============--
 O-O     O-O   

$i=reverse pop=~y/EPBTHFC/0-6/r;
say$i=~s/./$a[6*$&+$_]/gr=~s/--$//r for 0..5

Tenga en cuenta que todos los vagones del tren tienen sus líneas acolchadas con espacios a una longitud uniforme e incluyen el acoplamiento (que es despojado del vagón más a la derecha por el lazo de salida). La compresión DEFLATE utilizada por zlib es muy buena para comprimir datos tan repetitivos, por lo que no es necesario intentar comprimirlos a mano.

Tenga en cuenta que este es un primer intento rápido. Estoy seguro de que sería posible reducir varios bytes de la longitud jugando con variaciones como reordenar los vagones del tren en la fuente.

Ilmari Karonen
fuente
62

Python, 464

from curses import*
E,P,B,T,H,F,C='eJyNkM0NgDAIhe9MwVEPpBN0AxMHsKaLdHgfpVr7E+NHUyCQR4C5EiP5jKXBUeLj5ORvkDes5DtEiHeBoWo+hI36NtN9XurrRaVMQTSTEBizPo3+SGBBICLZ0/K9y0whtlDA/Gruj8SwyaRJA9tSPz16qmdTxqO9VeAvC5VloQ=='.decode('base64').decode('zlib').split('L')
i=[s.split('\n')for s in map(eval,raw_input()[::-1])]
h=max(sum(map(bool,s))for s in i)
w=initscr()
x=0
for t in i:[w.addstr(y,x,t[y+6-h])for y in range(h)];x+=len(t[-2])
w.addstr(h-2,x-2,'  ')
w.getch()
endwin()

Fui por un enfoque usando maldiciones. Realmente no puede competir, pero me divertí un poco (~ 630 bytes):

entrenar

from curses import*
E,P,B,T,H,F,C='eJyFkMENwCAIRe9M8Y/tgTiBGzTpALVxEYcvSFqiNO2DCAb8BgCnVsodu5ZEDceJlm/kPrBSniDsLCY1i6VsNDeZ6uMt1GEKMJU3ARYD1DX7F5DRBGbukZbvKeL7OkJF/nZL/wJxhrlFE6vooYtuviwlrso1JF745GMr'.decode('base64').decode('zlib').split('L')
i=[s.split('\n')for s in map(eval,raw_input()[::-1])]
h=max(sum(map(bool,s))for s in i)
w=initscr()
m=w.getmaxyx()[1]
for o in range(-sum(2+len(t[-2])for t in i),m):
 x=o
 for t in i:
  if m>x>o:w.addnstr(h-2,max(x,0),'--'[max(0,-x):],m-x);x+=2
  [w.addnstr(y,max(x,0),t[y+6-h][max(0,-x):],m-x)for y in range(h)if x<m];x+=len(t[-2])
 w.move(h,0);w.refresh();w.clear();napms(90)
endwin()
grc
fuente
10
Wow, esa animación es genial! (+1) Los GIF animados funcionan en publicaciones, por lo que puede editar la imagen real en lugar de un enlace, lo que haría que su solución se vea más elegante. ;)
Pomo de la puerta
2
@Doorknob Gracias. Pondré la imagen, simplemente no estaba seguro de si un GIF animado sería demasiado molesto.
grc
24
@grc molesto? ¿estás seguro de que no quisiste decir IMPRESIONANTE?
nderscore
44
No hay nada mejor que un gif de arte ASCII. +1!
Chris Cirefice
44
¡Envíalo a Homebrew! sl2.0
Kroltan
8

Python ( 582 488 476 450 caracteres)

import sys
A=sys.argv[1]
h=0
c='eJyVkrEKAzEIhnef4h97g9x+kOVKS7d2uK0peZE8fNXQS3NCpb+BREU/YnIhfKkUgJKpBfIsgYrnCzV9pIFBE6WDCHcWk1zbMy0PGovg/GMPw+6rujwaAY0CWtb/ESwG6NJTjNhChMxQxMy2g06/R+URtxBRRlGWC3SbY8Q1vkXgh4gz+Qb7v7Jy/US1P7TKP3NvbG3fy/V/Cw=='.decode('base64').decode('zlib').split(':')
C={}
for x in c:X=x.split('\n');C[X[0]]=X[1:-1]
for c in A:h=max(h,1+('F..CE'.find(c)+1or 3))
for y in range(6-h,6):print(' -'[y==4]*2).join(C[c][y]for c in A[::-1])

La ensalada ascii es una cadena comprimida en zlib codificada en base64 que contiene las figuras ...

max.haredoom
fuente
1. string.decode('base64')2. j=lambda y:y==4and'--'or' '3. for c in A[::-1]:i.append(C[c][y])f.append(j(y).join(i)
Sangría de
Además, las últimas 6 líneas podrían serfor l in((y==4and'--'or' ').join(C[c][y]for c in A[::-1])for y in range(6-h,6)):print l
ver el
1
Ofrecí una edición con algunas mejoras.
seequ
1
Ahora que lo pienso, la última línea podría serfor y in range(6-h,6):print(y==4and'--'or' ').join(C[c][y]for c in A[::-1])
ver
¡@TheRare incorporó su segunda (!) Mejora! ¡Tu!
max.haredoom
7

Pitón, 402 369

import sys
for n in range(6):
 l= sys.argv[1][::-1]
 for x,y in zip("EPBTHFC",range(0,42,6)):
  l=l.replace(x,'eJytktsNgCAMRVfpp340TMAHEziAGBZhePvgLYmGeGosXqQXSAEqIfDbWUElb0SKcF4QbUaljr0srCA6OJCC5jV7cDAyUYY6eQPlic9/kleqoKNVL6QANkmj37zohglElMzK9naJy16hhxRPR6ph/jzXB2XBS76bZpQa3Hex7Qpm1hOtg+Yb0a6PSA=='.decode('base64').decode('zlib').split('A')[y+n]).strip('-')
 print l

¡Gracias por las mejoras, ugoren!

Elveone
fuente
¡Gracias por formatear mi código! Soy un poco nuevo en esto y, sinceramente, no sé lo que estoy haciendo.
Elveone
1
Ahorrar algunos caracteres: range(6),for x,y in zip("EPBTHFC",range(0,42,6)):
ugoren
4

Javascript,> 471 bytes

Bueno, mierda, ya superando el mejor puntaje, y todavía no he podido imprimirlo todo en secuencia. Pero pasé una tarde en esto y todavía quería mostrarlo.

function c(i){
    var i=i.replace(/f/,"=15r h 7h").match(/(\D)(\d+)?/g),
    s={
        's':'\\',
        'w':' []',
        'b':' |',
        'h':'O-O',
        't':'-|',
        'r':'\n'
    }
    ,
    a=[];
    for(j in i){
        x=/(\D)(\d+)?/g.exec(i[j]),
        a[j]=x[1],
        n=x[2]/1,
        o="";
        while(x[2]&&0<n--)o+=a[j];
        a[j]=o||a[j];
    }
    r=a.join('');
    for(j in s)r=r.replace(RegExp(j,"g"),s[j]);
    return r;
}
E=" 12_2r=6 6s/r|wb=9r| 14)r=16r h-O 3h-O ss",
P="r2=15r|w4brf",
B="r2=15r|t2 b bt2rf",
T="r2 _5-3_5r( 13)rf",
H="r2_15rsb6 /rf",
F="r4f",
C="r 4=5r=4| 3|=4r|w 4wbr=13r h 5h";
console.log(c(C));

Justo console.log(c(L)); // L=train car lettere imprimirá un solo automóvil en la consola. Sé que podría hacer muchos recortes incluso para esto, pero me rindo. :PAGS

Phil Tune
fuente
66
Tenía que hacerlo: jsfiddle.net/34w2z
William Barbosa
3
@WilliamBarbosa jaja, soy retrasado. Pensé: "¿Qué magia es esta? Mi código se está moviendo". y buscando todo lo que cambiaste en el script para que se desplazara ... luego moví mis ojos hacia el HTML. Ahh, <marquee>demonio diabólico. ¿Por qué te han despreciado alguna vez?
Phil Tune
44
@WilliamBarbosa Creo que ha localizado el único uso legítimo para esta etiqueta.
Mike Clark
3

Java (583 caracteres)

Con la compresión casera básica, no estoy seguro de que sea tan eficiente :-) La cadena del tren (por ejemplo EEHTBPFC) debe pasarse como parámetro.

class C{public static void main(String[]a){String s="",y="thAthA",x=" *!*h*!* A",q="vjA",r=q+x+y;String[]m=("hP78A^\\#$8A% &' %j.,A%hh) Ajj.A *!*!*8*!*!* /A"+y+q+"% &' &' &' &' %A"+r+q+"%!%!%,%,%!%!%A"+r+" [9[ A(tP)A"+r+"ss+A# % % % % % % $A"+r+y+q+x+"tPADRDAF%8%FA% &'P&' %AvRA *!*P*!* ").split("A");for(int l,z,i,j=0;j<6;j++){for(i=a[0].length()-1;i>=0;i--){z=a[0].charAt(i);r=m["EPBTHFC".indexOf(z)*6+j];for(int c:r.toCharArray()){c-=32;for(l=0;l<=c/12;l++)s+=" -=\\/|[]()O_".charAt(c%12);}if(i>0)for(l=0;l<(z=='E'&&j!=4?1:2);l++)s+=j==4?"-":" ";}s+="\n";}System.out.println(s);}}

Desplegado:

class C{
    public static void main(String[]a){
        String s="",y="thAthA",x=" *!*h*!* A",q="vjA",r=q+x+y;
        String[]m=("hP78A^\\#$8A% &' %j.,A%hh) Ajj.A *!*!*8*!*!* /A"+y+q+"% &' &' &' &' %A"+r+q+"%!%!%,%,%!%!%A"+r+" [9[ A(tP)A"+r+"ss+A# % % % % % % $A"+r+y+q+x+"tPADRDAF%8%FA% &'P&' %AvRA *!*P*!* ").split("A");
        for(int l,z,i,j=0;j<6;j++){
            for(i=a[0].length()-1;i>=0;i--){
                z=a[0].charAt(i);
                r=m["EPBTHFC".indexOf(z)*6+j];
                for(int c:r.toCharArray()) {
                    c-=32;
                    for(l=0;l<=c/12;l++)
                        s+=" -=\\/|[]()O_".charAt(c%12);
                }
                if(i>0)for(l=0;l<(z=='E'&&j!=4?1:2);l++)s+=j==4?"-":" ";
            }
            s+="\n";
        }
        System.out.println(s);
    }
}
Arnaud
fuente
3

C #, 758 664 603 562bytes

No es una gran puntuación, unos 200 bytes en la cadena mal codificada, y unos 80 bytes dedicados a decodificarla. ¡Frustrante cantidad de código invertido en resolver el acoplamiento del motor! Ahora deja un espacio en blanco al frente del tren, que está desordenado pero dentro de las reglas, y también tiene las dimensiones de la cadena de datos codificadas, algo que me resistí a hacer inicialmente.

using c=System.Console;class P{static void Main(){string d=c.ReadLine(),a="",z=@"99 1_5 4=78 5=5 \/1 3=|2 |3=14 29= 4_2-4_ 14_| [] |8= | []4 [] |14 | [] [] [] [] 1|-|-|1 |1 |-|-|(12 )\ | | | | | | /|13 )103= O-O4 O-O1 O-O6 O-O1 O-O6 O-O1 O-O6 O-O1 O-O6 O-O1 O-O6 O-O1 O-O-O2 O-O-O c";int j=0,e;foreach(var h in z)if(h>47&&h<58)j=j*10+h-48;else for(j++;j>0;j--)a+=h;int[]x={0,13,28,43,58,73,88,104};for(;j<6;j++){z="";foreach(var h in d)z=a.Substring(j*104+x[e="CFPBTHE".IndexOf(h)],x[e+1]-x[e])+(j==4?"--":"  ")+z;c.WriteLine(z.Replace("c ",@"\\").Trim('-'));}}}

Formateado un poco:

using c=System.Console;
class P{static void Main(){
    string d=c.ReadLine(),a="",z=@"99 1_5 4=78 5=5 \/1 3=|2 |3=14 29= 4_2-4_ 14_| [] |8= | []4 [] |14 | [] [] [] [] 1|-|-|1 |1 |-|-|(12 )\ | | | | | | /|13 )103= O-O4 O-O1 O-O6 O-O1 O-O6 O-O1 O-O6 O-O1 O-O6 O-O1 O-O6 O-O1 O-O-O2 O-O-O c";

    int j=0,e;

    foreach(var h in z)
        if(h>47&&h<58)
            j=j*10+h-48;
        else
            for(j++;j>0;j--)
                a+=h;

    int[]x={0,13,28,43,58,73,88,104};

    for(;j<6;j++)
    {
        z="";
        foreach(var h in d)
            z=a.Substring(j*104+x[e="CFPBTHE".IndexOf(h)],x[e+1]-x[e])+(j==4?"--":"  ")+z;
        c.WriteLine(z.Replace("c ",@"\\").Trim('-'));
    }
}}

La cadena se comprime simplemente reemplazando el carácter repetido con una representación de cadena del número de caracteres seguido del carácter (menos 1), o solo el carácter si solo hay uno de ellos (quería seguir con ASCII y evitar hacer algo en el nivel sub-char). Codificador (no incluido en la puntuación):

string compress(string str)
{
    str += (char)0; // too lazy to write a proper loop
    string res = "";

    char prev = str[0];
    int count = 1;

    for (int i = 1; i < str.Length; i++)
    {
        char cur = str[i];
        if (cur != prev)
        {
            if (count != 1)
                res += (count - 1).ToString();
            res += prev;

            prev = cur;
            count = 1;
        }
        else
        {
            count++;
        }
    }

    return res;
}
VisualMelon
fuente
3

Aquí está mi solución en PHP (compatible con v5.4), 512bytes. Podría ser más corto, pero solo hice una compilación rápida para probar esto.

<?php $m=array_combine(str_split('EPBTHFC'),explode('$',gzinflate(base64_decode('jZDBDYAwCEXvfwoOHvRAnKAzOICYLtLhhVYlrY320RQI5BMgcmJEyJRUViTaD0rhRvOKBaEBtLGa1ooXmdA2FdXnJfQ0rgkW9RRYjcieRQMKupzCzNlj/t6jIxBrIDrdbR1QwH+PRaVkn107+cWM971cxPwJ'))));$t=['','','','','',''];$i=str_split(strrev(strtoupper($argv[1])));foreach($i as $w=>$n){$c=$m[$n];$c=explode("\n",$c);foreach($t as $j=>&$p){$p.=str_pad($c[$j],$n=='E'?18:($n=='C'?15:17),$j==4?'-':' ');if($w==count($i)-1)$p=rtrim($p,' -');}}echo implode("\n",$t)."\n";

Esta es una versión extendida para una fácil lectura:

<?php
$m=array_combine(
    str_split('EPBTHFC'),
    explode('$',
        gzinflate(
            base64_decode(
                'jZDBDYAwCEXvfwoOHvRAnKAzOICYLtLhhVYlrY320RQI5BMgcmJEyJRUViTaD0rhRvOKBaEBtLGa1ooXmdA2FdXnJfQ0rgkW9RRYjcieRQMKupzCzNlj/t6jIxBrIDrdbR1QwH+PRaVkn107+cWM971cxPwJ'
            )
        )
    )
);
$t=['','','','','',''];
$i=str_split(strrev(strtoupper($argv[1])));
foreach($i as $w=>$n)
{
    $c=$m[$n];
    $c=explode("\n",$c);
    foreach($t as $j=>&$p)
    {
        $p.=str_pad($c[$j],$n=='E'?18:($n=='C'?15:17),$j==4?'-':' ');
        if($w==count($i)-1)$p=rtrim($p,' -');
    }
}
echo implode("\n",$t)."\n";
Matriz de datos
fuente
2

Python, 491 bytes

import zlib as z,sys,base64 as d
y=eval(z.decompress(d.b64decode('eNqlksEOwiAMhl/lv1WTkd1NdtFovLmDt7HwIOK729LJmJDY6F8SyA/0g6YPOtNhIhQKAaCOhiS1fJ+siGlGHN5Sa6N9vriKLdwcB+/r7D3NHY2fYCRI7dT50kPyiM0zUCKUCiEe/yA6DkCGrKzEu5XIVWc559Iszu5bYdvEq5UYtmLH8/fW6K3Ei/mPP1W+QTxVxCVXbtklk3RnLHtG1OqYkqOU5wsfZZmx')))
w=sys.argv[1][::-1]
x=[""]*6
v=range
u=len(w)
for j in v(6):
 for i in v(u):
  if j==5 and w[i]=='E':k="\\ "
  elif j==4 and i!=u-1:k="--"
  else:k="  "
  x[j]+=y[w[i]][j]+k
for q in x:print q

Me gusta cómo salió, a pesar de que no será un ganador.

luna
fuente
Puede cambiar if j==5...x[j]+=y[w[i]][j]+ka x[j]+=y[w[i]][j]+('\\ 'if j==5 and w[i]=='E'else'--'if j==4 and i!=u-1 else' ')para ahorrar un poco. (También puede poner una pestaña en lugar de dos espacios delante de x[j]....)
Calvin's Hobbies
1

GNU sed , 491 bytes

s/./& #/g
s:E:0S__s%1esss\\/s%2|bpef %3|Ss)%4E=@5 o-Os o-O \\\\:g
s/P/zE%3|bbbbp%4E@5ut/g
s/B/zE%3|-|-|s|s|-|-|%4E@5ut/g
s/T/z l---l %3(S )%4E@5ut/g
s:H:zlll%3\\pppppp /%4E@5ut:g
s/F/zSs %3Ss %4E@5ut/g
s/C/0S %1ssf==ss%2f=|spf=%3|bssbp%4ee=@5 ts t/g
s/z/0Ss %1Ss %2/g
s/%/s%/g
s/@/--%/g
s/u/ tss /g
s/t/os/g
s/S/ssssss/g
s/s/  /g
s/E/eef/g
s/e/ff/g
s/f/===/g
s/b/ []/g
s/p/ |/g
s/o/O-O/g
s/l/_____/g
s/^/0123456;/
:
s/([0-6])(.*;)\1([^%#]+)[%#](.*)/\1\3!\2\4/
t
s/(--!)?[1-6]/\n/g
s/[0!;]//g

Pruébalo en línea!

Explicación

Esto es básicamente un esquema de compresión personalizado súper ingenuo. La primera línea agrega a cada letra en la entrada un espacio y #, para marcar el final de cada parte:

s/./& #/g

Las siguientes 7 líneas reemplazan cada letra con una representación comprimida de la imagen ASCII correspondiente:

s:E:0S__s%1esss\\/s%2|bpef %3|Ss)%4E=@5 o-Os o-O \\\\:g
s/P/zE%3|bbbbp%4E@5ut/g
s/B/zE%3|-|-|s|s|-|-|%4E@5ut/g
s/T/z l---l %3(S )%4E@5ut/g
s:H:zlll%3\\pppppp /%4E@5ut:g
s/F/zSs %3Ss %4E@5ut/g
s/C/0S %1ssf==ss%2f=|spf=%3|bssbp%4ee=@5 ts t/g

Las siguientes 14 líneas hacen la "descompresión". Por ejemplo, un Sdescomprime a seis ses, y un sdescomprime a dos espacios, por lo que se Sconvierte en 12 espacios.

s/z/0Ss %1Ss %2/g
s/%/s%/g
s/@/--%/g
s/u/ tss /g
s/t/os/g
s/S/ssssss/g
s/s/  /g
s/E/eef/g
s/e/ff/g
s/f/===/g
s/b/ []/g
s/p/ |/g
s/o/O-O/g
s/l/_____/g

Descomprimido, las líneas de cada automóvil están precedidas por un número de línea, y cada automóvil está terminado por #. El resto del código antecede 0123456;(los números de línea y el delimitador) al espacio del patrón y luego, en un bucle, reemplaza cada dígito con la línea correspondiente de cada automóvil.

s/^/0123456;/
:
  s/([0-6])(.*;)\1([^%#]+)[%#](.*)/\1\3!\2\4/
  t

Finalmente, corta el espacio del patrón en líneas al dividir en dígitos y limpia caracteres extraños:

s/(--!)?[1-6]/\n/g
s/[0!;]//g

Aquí hay mucho margen de mejora. No fui riguroso en absoluto para encontrar un conjunto óptimo de compresiones, y usar una tabla de búsqueda en lugar de 14 s///gs separadas sería una victoria fácil. Puedo o no tallarines con esto un poco más.

Jordán
fuente
1

Python 3 , 529 bytes

a=['']*6
T,R="EPBTHFC",{'S':' '*3,'E':'='*3,'W':'[] ','U':'_'*5,'P':'| ','H':'O-O'}
A=('SSSS__  ',)+('S'*5,)*5+('SSSS ',),('EESS\/  ',)+('S'*5,)*5+('S E==S ',),('PW|EEE ','E'*5,'E'*5,' U---U ','U'*3,'S'*5,'E=|S|E='),('P SSSS)','PWWWW|','|-|-P P |-|-|','(SSSS )','\ PPPPPP/','S'*5,'PWS W|'),('E'*5+'=--',)+('E'*5+'--',)*5+('EEEE=--',),(' H-OSH-O \\\\ ',)+(' HSS HS',)*5+(' HS  HS',)
for C in input():
 for I in range(6):
  a[I]=A[I][T.index(C)]+'  '*(I<4)+a[I]
  for k in R:a[I]=a[I].replace(k,R[k])
a[4]=a[4][:-2]
[*map(print,a)]

Pruébalo en línea!

Pensé que lo publicaría porque no usa ninguna compresión, a diferencia de la mayoría de las otras respuestas aquí.

nedla2004
fuente
1

C (gcc) , 501 499 490 489 484 bytes

-2 -9 -1 -5 bytes gracias a ceilingcat .

#define A": O-Og O-O:o=:"
char*p,*q,s[80];j,k,n;main(i,a)char**a;{for(i=6;i--;puts(q))for(k=strlen(a[1]);k--;*q=0,printf("%-*s%s",j?j^6?15:13:16,s,k?i^1?!j*!i+"  ":"--":q)){j=index(p="EPBTHFC",a[1][k])-p;for(n=j*6+i,p=" O-O-Oc O-O-O \\\\:p=:|n ):| [] |i=:f=f \\/:l __"A"| [] [] [] [] |:o=::"A"|-|-|  |  |-|-|:o=::"A"(m ): e_c-e_::"A"\\ | | | | | | /:o_::"A":::: O-Oe O-O:m=:| []e [] |:d=|c |d=:d e=::";n--;)for(;*p++-58;);for(q=s;*p^58;p++)for(n=*p>96&*p<123?*p++-96:1;n--;)*q++=*p;}}

Pruébalo en línea!

gastropner
fuente
@ceilingcat ¡Salud!
Gastropner