Imprimir un ángel cantando

9

Siguiendo con un tema festivo, imprima un ángel cantando villancicos con el código más corto posible. El ángel está recaudando dinero para las personas sin hogar, por lo que debe poder cantar las tres canciones a continuación disponibles a pedido. Para ilustrar que puede cantarlas, el título de la canción debe colocarse dentro del globo de diálogo. El título de esta canción será ingresado por el usuario. Ejemplos incluyen:

  • Madre María
  • Jingle Bells
  • Noche silenciosa

Entrada:

Título: 1 de las 3 canciones.

Salida:

                  ____________
(\   ___   /)    /            \
( \ (‘o‘) / )   /              \
(           )  <                              
 (  ‘> <’  )    \              /
    /    \       \____________/
   /      \  
  ‘ – “ - ‘

Pegue el resultado de su ángel cantante junto con la canción: "Silent Night".

Reglas de burbujas de discurso:

La burbuja de diálogo siempre debe tener un marco de 12 líneas de subrayado de longitud.

El título de la canción siempre debe comenzar en la segunda línea.

El título de la canción siempre debe comenzar con 3 espacios de subrayado dentro de la burbuja.

                  123456789...
(\   ___   /)    /            \
( \ (‘o‘) / )   /    Song      \
(           )  <     Title                     
 (  ‘> <’  )    \              /
    /    \       \____________/
   /      \  
  ‘ – “ - ‘

Ejemplos a continuación:

                  ____________
(\   ___   /)    /            \
( \ (‘o‘) / )   /    Mother    \
(           )  <     Mary                     
 (  ‘> <’  )    \              /
    /    \       \____________/
   /      \  
  ‘ – “ - ‘

                  ____________
(\   ___   /)    /            \
( \ (‘o‘) / )   /    Jingle    \
(           )  <     Bells                         
 (  ‘> <’  )    \              /
    /    \       \____________/
   /      \  
  ‘ – “ - ‘

                  ____________
(\   ___   /)    /            \
( \ (‘o‘) / )   /    Silent    \
(           )  <     Night                         
 (  ‘> <’  )    \              /
    /    \       \____________/
   /      \  
  ‘ – “ - ‘
Belfield
fuente
1
1. La / y \ en la falda de tu ángel son asimétricas. ¿Es esto intencional? 2. ¿Cuál es el propósito de mostrar el resultado, si debe ser idéntico a la pregunta?
Level River St
1
Si quieres ser exacto: 9 letras de largo, 2 palabras, pero el enfoque está más en las tres canciones enumeradas en la descripción en lugar de otros títulos de canciones.
Belfield
1
¡Esto no es arte ASCII! `'-“ no son caracteres ASCII. Además, ¿por qué tienes diferentes tipos de guiones?
Stewie Griffin
3
@StewieGriffin Apuesto a que esto fue una consecuencia involuntaria de escribir o pegar el texto en un editor con una función de "comillas / guiones inteligentes". TextEdit en OS X es patológico al respecto. Regularmente recibimos preguntas sobre SO en la línea de "¿Por qué no puts “hello”funciona?"
Jordan
2
De hecho, es @Jordan ....
Belfield

Respuestas:

1

PHP, 215 bytes

<?=($p=str_pad)($p($s=" ".$t="   ",18),30,_),$p("
(\   ___$t/)$s/",31),$p("\
( \ (‘o‘) / )$t/$t$argv[1]",37),"\
($s$s$t)  <$s$argv[2]",$p("
 (  ‘> <’  )$s\\",36),$p("/
$s/$s\\$s$t\\",32,_),"/
$t/$t$t\
  ‘ – “ - ‘";

toma el título de los dos primeros argumentos de la línea de comandos.

Para Windows: agregue 1 a todas las longitudes de almohadilla después de la primera línea, o duplique las barras invertidas antes de los saltos de línea y reemplace todos los saltos de línea con \n

Tito
fuente
3

JS (ES6), 328 330 bytes

a=(b,c)=>b.repeat(c);f=prompt().split(" ");if(f[1].length<5)f[1]+=" ";console.log(a(" ",18)+a("_",12)+`
(\\   ___   /)    /`+a(" ",12)+`\\
( \\ (‘o‘) / )   /    `+f[0]+`    \\
(`+a(" ",11)+`)  <     `+f[1]+a(" ",21)+`
 (  ‘> <’  )    \\`+a(" ",14)+`/
    /    \\       \\`+a("_",12)+`/
   /      \\  
  ‘ – “ - ‘`)
  • 1 función auxiliar (a obtiene charcode (un carácter más corto) y se repite c veces)
  • 1 variable para obtener entrada a través de prompt()y dividir en matriz
  • posiblemente abusa de los casos especiales allí, pero todavía hace el trabajo
  • Supuse que se necesitaban 21 espacios adicionales en la columna del medio

a=(b,c)=>b.repeat(c);f=prompt().split(" ");if(f[1].length<5)f[1]+=" ";console.log(a(" ",18)+a("_",12)+`
(\\   ___   /)    /`+a(" ",12)+`\\
( \\ (‘o‘) / )   /    `+f[0]+`    \\
(`+a(" ",11)+`)  <     `+f[1]+a(" ",21)+`
 (  ‘> <’  )    \\`+a(" ",14)+`/
    /    \\       \\`+a("_",12)+`/
   /      \\  
     - ‘`)

n4melyh4xor
fuente
Con la codificación UTF8, esto es 344 bytes, no 328. ¿Qué codificación usó para contar los bytes?
smls
smls es correcto; Esto es 328 caracteres, pero 344 bytes. Puede ahorrar 14 simplemente deshaciéndose String.fromCharCodey haciendo a=(b,c)=>b.repeat(c), luego llamando con un espacio real o subrayado cada vez
ETHproductions
@ETHproductions, fijo.
n4melyh4xor
@ n4melyh4xor ¿Está bien aceptar el título de la canción en forma pre-dividida, es decir, implementar el código como una lambda que toma dos parámetros separados para las dos palabras? ¿O el título de la canción tiene que venir como una cadena y la división se debe hacer como parte del código? (Las soluciones Python 3.6 hacen lo primero, y si lo haces con luz verde, también lo
usaré
@smls, creo que debería tomarse como una cadena y luego puedes hacer lo que quieras.
n4melyh4xor
3

Python 3.5, 207 caracteres, 226 bytes

def f(s):a,b=s.split();u='_'*12;[print(' '*int(x)if x.isdigit()else x,end='')for x in"99"+u+"\n(\\3___3/)4/66\\\n( \\ (‘o‘) / )3/4"+a+"4\\\n(92)2<5"+b+"\n (2‘> <’2)4\\95/\n4/4\\7\\"+u+"/\n3/6\\\n2‘ – “ - ‘"]

Salida:

                  ____________
(\   ___   /)    /            \
( \ (‘o‘) / )   /    Jingle    \
(           )  <     Bells
 (  ‘> <’  )    \              /
    /    \       \____________/
   /      \
  ‘ – “ - ‘

Ligeramente incólume:

def angel(s):
    a, b = s.split()
    u = '_' * 12;
    out = "99" + u + "\n"
    out += "(\\3___3/)4/66\\\n"
    out += "( \\ (‘o‘) / )3/4" + a + "4\\\n"
    out += "(92)2<5" + b + "\n"
    out += " (2‘> <’2)4\\95/\n"
    out += "4/4\\7\\" + u + "/\n"
    out += "3/6\\\n"
    out += "2‘ – “ - ‘"
    [print(' '*int(x) if x.isdigit() else x, end='') for x in out]

Reemplaza los dígitos numéricos con el mismo número de espacios.

James Hollis
fuente
2

Python 3.6 - 286 241 224 bytes

def x(L):X,Y=L.split();E,D=' '*11,'_'*12;print(f"""{' '*18}{D} 
(\   ___   /)    /{E} \\
( \ (‘o‘) / )   /    {X+' '*(10-len(X))}\\
({E})  <     {Y}
 (  ‘> <’  )    \{E}   /
    /    \       \{D}/
   /      \ 
  ‘ – “ - ‘""")
Entrada:
x ("Noche de silencio")
Output:    
                  ____________
(\   ___   /)    /            \
( \ (‘o‘) / )   /    Silent    \
(           )  <     Night
 (  ‘> <’  )    \              /
    /    \       \____________/
   /      \ 
  ‘ – “ - ‘

Nota : la versión es 3.6donde se introdujo el formato literal de cadena . Por lo tanto, esto no funcionará en versiones anteriores.

Gurupad Mamadapur
fuente
1

Perl 6 , 234 bytes (218 caracteres)

{"{' 'x 18}{'_'x 12}
(\\   ___   /)    /{' 'x 12}\\
( \\ (‘o‘) / )   /    {.words[0].fmt('%-9s')} \\
({' 'x 11})  <     {.words[1]}
(  ‘> <’  )    \\{' 'x 14}/
    /    \\       \\{'_'x 12}/
  /      \\
  ‘ – “ - ‘"}

Una lambda que ingresa el nombre de la canción como una cadena y genera el ángulo de nieve como una cadena.

  • Asume que no se requieren espacios finales.
  • El recuento de bytes es para la codificación UTF8, porque así es como Perl 6 espera el código fuente.
smls
fuente
1

Python 2.6, 391 bytes

def angel(a):
    X,Y=a.split()
    print("                  ____________")
    print"(\   ___   /)    /            \\"
    print"( \ (‘o‘) / )   /  ",  X,  "    \\"
    print"(           )  <   ", Y,        "  "
    print" (  ‘> <’  )    \              /"
    print"    /    \       \____________/"
    print("   /      \  ")
    print"  ‘ – 

Caso de prueba:

angel("Silent Night")
                  ____________
(\   ___   /)    /            \
( \ (‘o‘) / )   /   Silent     \
(           )  <    Night   
 (  ‘> <’  )    \              /
    /    \       \____________/
   /      \  
  ‘ – “ - ‘
Halcón
fuente
¿Cuál es el recuento de bytes? Es posible que desee utilizar en #titlelugar de**title*
Titus
Un poco tarde (OK, mucho tarde) pero puede usar 1 espacio para la sangría para ahorrar muchos bytes, y puede decir p=printque acorte sus impresiones
Stephen