Stampa un angelo che canta


9

Mantenendo un tema festivo, stampa un angelo che canta il canto con il codice più breve possibile. L'angelo sta raccogliendo fondi per i senzatetto, quindi deve essere in grado di cantare tutte e tre le canzoni sottostanti disponibili su richiesta. Per illustrare che può cantarli, il titolo della canzone deve essere inserito nel fumetto. Questo titolo del brano verrà inserito dall'utente. Esempi inclusi:

  • Mamma Maria
  • Jingle Bells
  • Notte silenziosa

Ingresso:

Titolo: 1 delle 3 canzoni.

Produzione:

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

Per favore, incolla il risultato del tuo angelo cantante insieme alla canzone: "Silent Night".

Regole del fumetto:

Il fumetto deve sempre avere una cornice di 12 righe di sottolineatura lunghe.

Il titolo del brano deve sempre iniziare sulla seconda riga.

Il titolo del brano deve sempre iniziare con 3 spazi di sottolineatura all'interno della bolla.

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

Esempi di seguito:

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

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

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

1
1. I / e \ nella gonna del tuo angelo sono asimmetrici. È intenzionale? 2. Qual è lo scopo di mostrare l'output, se dovrebbe essere identico alla domanda?
Level River St,

1
Se vuoi essere esatto - 9 lettere lunghe, 2 parole, ma il focus è più sulle tre canzoni elencate nella descrizione rispetto ad altri titoli di canzoni.
Belfield,

1
Questa non è arte ASCII! `'-“ non sono caratteri ASCII. Inoltre, perché hai diversi tipi di trattini?
Stewie Griffin,

3
@StewieGriffin Scommetto che questa è stata una conseguenza non intenzionale della digitazione o incolla del testo in un editor con una funzione "virgolette / trattini intelligenti". TextEdit su OS X è patologico al riguardo. Riceviamo regolarmente domande su SO in linea con "Perché non puts “hello”funziona?"
Giordania,

2
In effetti è @Jordan ....
Belfield il

Risposte:


1

PHP, 215 byte

<?=($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\
  ‘ – “ - ‘";

prende il titolo dai primi due argomenti della riga di comando.

Per Windows: aggiungi 1 a tutte le lunghezze dei pad dopo la prima riga o duplica barre rovesciate prima delle interruzioni di riga e sostituisci tutte le interruzioni di riga con \n


3

JS (ES6), 328 330 byte

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 funzione di supporto (a ottiene charcode (un carattere più breve) e ripete c volte)
  • 1 variabile per ottenere input tramite prompt()e fare una divisione in array
  • abusa discutibilmente dei casi speciali lì, ma fa ancora il lavoro
  • Supponevo che fossero necessari 21 spazi extra nella colonna centrale

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)+`/
   /      \\  
     - ‘`)


Con la codifica UTF8, questo è 344 byte, non 328. Quale codifica hai usato per contare i byte?
smls

smls è corretto; questo è 328 caratteri, ma 344 byte. Puoi salvare 14 semplicemente sbarazzandoti String.fromCharCodee facendo a=(b,c)=>b.repeat(c), quindi chiamando ogni volta con uno spazio reale o sottolineatura
ETHproductions

@ETHproductions, fixed.
n4melyh4xor

@ n4melyh4xor Va bene accettare il titolo del brano in forma pre-divisa, ovvero implementare il codice come lambda che accetta due parametri separati per le due parole? O il titolo del brano deve essere inserito come una stringa e la divisione deve essere eseguita come parte del codice? (Le soluzioni Python 3.6 fanno la prima, e se accendi il verde la userò anche per abbreviare anche la mia soluzione Perl 6 ... :))
smls

@smls, penso che dovrebbe essere preso come una stringa e quindi puoi fare quello che vuoi.
n4melyh4xor

3

Python 3.5, 207 caratteri, 226 byte

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‘ – “ - ‘"]

Produzione:

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

Leggermente non golfato:

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]

Sostituisce le cifre numeriche con lo stesso numero di spazi.


2

Python 3.6 - 286 241 224 byte

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}/
   /      \ 
  ‘ – “ - ‘""")
Ingresso:
x ("Notte silenziosa")
Output:    
                  ____________
(\   ___   /)    /            \
( \ (‘o‘) / )   /    Silent    \
(           )  <     Night
 (  ‘> <’  )    \              /
    /    \       \____________/
   /      \ 
  ‘ – “ - ‘

Nota : la versione è 3.6dove è stata introdotta la formattazione letterale delle stringhe . Quindi, questo non funzionerà nelle versioni precedenti.


1

Perl 6 , 234 byte (218 caratteri)

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

Una lambda che inserisce il nome del brano come stringa e genera l'angolo di neve come stringa.

  • Presuppone che non siano richiesti spazi finali.
  • Il conteggio dei byte è per la codifica UTF8, perché è così che Perl 6 si aspetta il codice sorgente.

1

Python 2.6, 391 byte

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

Caso di prova:

angel("Silent Night")
                  ____________
(\   ___   /)    /            \
( \ (‘o‘) / )   /   Silent     \
(           )  <    Night   
 (  ‘> <’  )    \              /
    /    \       \____________/
   /      \  
  ‘ – “ - ‘

Qual è il numero di byte? Si consiglia di utilizzare #titleinvece di**title*
Titus

Poco in ritardo (OK, molto in ritardo) ma puoi usare 1 spazio per il rientro per salvare molti byte, e puoi dire p=printper abbreviare le tue stampe
Stephen
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.