Imprimir um anjo cantando

9

Mantendo um tema festivo, imprima um anjo cantando canções de Natal com o menor código possível. O anjo está arrecadando dinheiro para os sem-teto, então deve poder cantar as três músicas abaixo, disponíveis mediante solicitação. Para ilustrar que ela pode cantá-las, o título da música deve ser colocado dentro do balão. Este título da música será inserido pelo usuário. Exemplos incluem:

  • Mãe Maria
  • os sinos de tinir
  • Noite silenciosa

Entrada:

Título: 1 das 3 músicas.

Resultado:

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

Por favor, cole o resultado do seu anjo cantador junto com a música: "Silent Night".

Regras da bolha do discurso:

O balão de fala sempre deve ter um quadro de 12 linhas de sublinhado.

O título da música deve sempre começar na segunda linha.

O título da música deve sempre iniciar 3 espaços sublinhados dentro da bolha.

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

Exemplos abaixo:

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

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

                  ____________
(\   ___   /)    /            \
( \ (‘o‘) / )   /    Silent    \
(           )  <     Night                         
 (  ‘> <’  )    \              /
    /    \       \____________/
   /      \  
  ‘ – “ - ‘
Belfield
fonte
11
1. O / e \ na saia do seu anjo são assimétricos. Isso é intencional? 2. Qual é o objetivo de mostrar a saída, se for idêntica à pergunta?
Level River St
11
Se você quiser ser exato - 9 letras, 2 palavras, mas o foco é mais nas três músicas listadas na descrição, em oposição a outros títulos de músicas.
Belfield
11
Isso não é arte ASCII! '' - “não são caracteres ASCII. Além disso, por que você tem diferentes tipos de traços?
Stewie Griffin
3
@StewieGriffin Aposto que isso foi uma consequência não intencional de digitar ou colar o texto em um editor com o recurso "aspas / traços inteligentes". O TextEdit no OS X é patológico sobre isso. Recebemos regularmente perguntas sobre o SO de acordo com as linhas "Por que não puts “hello”funciona?"
Jordan
2
Na verdade, é @Jordan ....
Belfield

Respostas:

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 o título dos dois primeiros argumentos da linha de comando.

Para Windows: adicione 1 a todos os comprimentos de almofada após a primeira linha ou duplique as barras invertidas antes das quebras de linha e substitua todas as quebras de linha por \n

Titus
fonte
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 função auxiliar (a obtém o código de caractere (um caractere mais curto) e repete c vezes)
  • 1 variável para obter entrada prompt()e fazer uma divisão na matriz
  • sem dúvida abusa dos casos especiais lá, mas ainda faz o trabalho
  • Presumi que os 21 espaços extras na coluna do meio eram necessários

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
fonte
Com a codificação UTF8, são 344 bytes, não 328. Qual codificação você usou para contar os bytes?
SMLS
smls está correto; são 328 caracteres, mas 344 bytes. Você pode salvar 14 apenas se livrando String.fromCharCodee fazendo a=(b,c)=>b.repeat(c), e depois ligando com um espaço real ou com sublinhado de cada vez #
ETHproductions
@ETHproductions, fixo.
N4melyh4xor
@ n4melyh4xor É aceitável aceitar o título da música na forma pré-dividida, ou seja, implementar o código como um lambda que requer dois parâmetros separados para as duas palavras? Ou o título da música precisa aparecer como uma sequência e a divisão como parte do código? (As soluções Python 3.6 faz o primeiro, e se você verde-claro que eu vou usá-lo para encurtar a minha solução Perl 6, também ... :))
SMLS
@ mls, acho que deve ser tomado como uma string e então você pode fazer o que quiser.
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‘ – “ - ‘"]

Resultado:

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

Ligeiramente não destruído:

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]

Ele substitui dígitos numéricos pelo mesmo número de espaços.

James Hollis
fonte
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 ("noite silenciosa")
Output:    
                  ____________
(\   ___   /)    /            \
( \ (‘o‘) / )   /    Silent    \
(           )  <     Night
 (  ‘> <’  )    \              /
    /    \       \____________/
   /      \ 
  ‘ – “ - ‘

Nota - A versão é 3.6onde a formatação literal da string foi introduzida . Portanto, isso não funcionará em versões anteriores.

Gurupad Mamadapur
fonte
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}/
  /      \\
  ‘ – “ - ‘"}

Um lambda que insere o nome da música como uma sequência e gera o ângulo de neve como uma sequência.

  • Assume que espaços à direita não são necessários.
  • A contagem de bytes é para codificação UTF8, porque é assim que o Perl 6 espera o código fonte.
smls
fonte
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 teste:

angel("Silent Night")
                  ____________
(\   ___   /)    /            \
( \ (‘o‘) / )   /   Silent     \
(           )  <    Night   
 (  ‘> <’  )    \              /
    /    \       \____________/
   /      \  
  ‘ – “ - ‘
Falcão
fonte
Qual é a contagem de bytes? Você pode querer usar em #titlevez de**title*
Titus
Pouco tarde (OK, muito tarde), mas você pode usar um espaço para recuo de guardar um monte de bytes, e você pode dizer p=printpara encurtar suas impressões
Stephen