Imprimer un ange chanteur

9

En gardant un thème festif, imprimez un ange chantant carol avec le code le plus court possible. L'ange recueille de l'argent pour les sans-abri, il doit donc être en mesure de chanter les trois chansons ci-dessous disponibles sur demande. Pour illustrer qu'elle peut les chanter, le titre de la chanson doit être placé dans la bulle de dialogue. Ce titre de chanson sera entré par l'utilisateur. Les exemples comprennent:

  • Mère Marie
  • vive le vent
  • Nuit silencieuse

Contribution:

Titre: 1 des 3 chansons.

Production:

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

Veuillez coller le résultat de votre ange chanteur avec la chanson: "Silent Night".

Règles de la bulle vocale:

La bulle doit toujours avoir une trame de 12 lignes de soulignement.

Le titre de la chanson doit toujours commencer sur la deuxième ligne.

Le titre de la chanson doit toujours commencer par 3 espaces de soulignement à l'intérieur de la bulle.

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

Exemples ci-dessous:

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

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

                  ____________
(\   ___   /)    /            \
( \ (‘o‘) / )   /    Silent    \
(           )  <     Night                         
 (  ‘> <’  )    \              /
    /    \       \____________/
   /      \  
  ‘ – “ - ‘
Belfield
la source
1
1. Le / et le \ dans la jupe de votre ange sont asymétriques. Est-ce intentionnel? 2. Quel est le but de montrer la sortie, si elle doit être identique à la question?
Level River St
1
Si vous voulez être exact - 9 lettres de long, 2 mots, mais l'accent est mis davantage sur les trois chansons répertoriées dans la description, par opposition aux autres titres de chansons.
Belfield
1
Ce n'est pas de l'art ASCII! `` - '' ne sont pas des caractères ASCII. Aussi, pourquoi avez-vous différents types de tirets?
Stewie Griffin
3
@StewieGriffin Je parierais que c'était une conséquence involontaire de la saisie ou du collage du texte dans un éditeur avec une fonction "citations / tirets intelligents". TextEdit sur OS X est pathologique à ce sujet. Nous recevons régulièrement des questions sur SO dans le sens de "Pourquoi ne puts “hello”fonctionne pas ?"
Jordanie
2
En effet c'est @Jordan ....
Belfield

Réponses:

1

PHP, 215 octets

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

prend le titre des deux premiers arguments de ligne de commande.

Pour Windows: ajoutez 1 à toutes les longueurs de tampon après la première ligne ou dupliquez des barres obliques inverses avant les sauts de ligne et remplacez tous les sauts de ligne par \n

Titus
la source
3

JS (ES6), 328 330 octets

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 fonction d'assistance (un obtient le code de caractère (un caractère plus court) et répète c fois)
  • 1 variable pour obtenir une entrée via prompt()et effectuer un fractionnement dans un tableau
  • abuse sans doute des cas spéciaux là-bas, mais fait toujours le travail
  • J'ai supposé que les 21 espaces supplémentaires dans la colonne du milieu étaient nécessaires

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
la source
Avec l'encodage UTF8, c'est 344 octets, pas 328. Quel encodage avez-vous utilisé pour compter les octets?
smls
smls est correct; c'est 328 car, mais 344 octets. Vous pouvez économiser 14 simplement en vous débarrassant String.fromCharCodeet en faisant a=(b,c)=>b.repeat(c), puis en appelant avec un espace réel ou en soulignant à chaque fois
ETHproductions
@ETHproductions, fixe.
n4melyh4xor
@ n4melyh4xor Est-il acceptable d'accepter le titre du morceau sous une forme pré-scindée, c'est-à-dire d'implémenter le code comme un lambda qui prend deux paramètres distincts pour les deux mots? Ou le titre de la chanson doit-il être entré en une seule chaîne et le fractionnement doit-il être effectué dans le cadre du code? (Les solutions Python 3.6 font la première, et si vous la donnez le feu vert, je vais l'utiliser pour raccourcir ma solution Perl 6 aussi ... :))
smls
@smls, je pense qu'il devrait être pris en une seule chaîne et ensuite vous pouvez faire ce que vous voulez.
n4melyh4xor
3

Python 3.5, 207 caractères, 226 octets

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

Production:

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

Légèrement non golfé:

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]

Il remplace les chiffres numériques par le même nombre d'espaces.

James Hollis
la source
2

Python 3,6 - 286 241 224 octets

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

Remarque - La version est l' 3.6endroit où le formatage littéral de chaîne a été introduit . Par conséquent, cela ne fonctionnera pas dans les versions antérieures.

Gurupad Mamadapur
la source
1

Perl 6 , 234 octets (218 caractères)

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

Un lambda qui entre le nom du morceau sous forme de chaîne et génère l'angle de neige sous forme de chaîne.

  • Suppose que les espaces de fin ne sont pas requis.
  • Le nombre d'octets est pour le codage UTF8, car c'est ainsi que Perl 6 attend le code source.
smls
la source
1

Python 2.6, 391 octets

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

Cas de test:

angel("Silent Night")
                  ____________
(\   ___   /)    /            \
( \ (‘o‘) / )   /   Silent     \
(           )  <    Night   
 (  ‘> <’  )    \              /
    /    \       \____________/
   /      \  
  ‘ – “ - ‘
Faucon
la source
Quel est le nombre d'octets? Vous voudrez peut-être utiliser à la #titleplace de**title*
Titus
Peu en retard (OK, beaucoup en retard) mais vous pouvez utiliser 1 espace d'indentation pour économiser beaucoup d'octets, et vous pouvez dire p=printde raccourcir vos impressions
Stephen