Wydrukuj śpiewającego anioła

9

Trzymając świąteczny motyw, wydrukuj śpiewającego aniołka kolędowego z możliwie najkrótszym kodem. Anioł zbiera pieniądze dla bezdomnych, więc musi być w stanie śpiewać wszystkie trzy poniższe piosenki dostępne na życzenie. Aby zilustrować, że może je zaśpiewać, tytuł utworu należy umieścić w dymku. Tytuł utworu zostanie wprowadzony przez użytkownika. Przykłady obejmują:

  • Matka Boska
  • dzwonią dzwonki
  • Cicha noc

Wejście:

Tytuł: 1 z 3 utworów.

Wynik:

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

Wklej wynik śpiewającego anioła wraz z piosenką: „Silent Night”.

Zasady dymka:

Dymek musi zawsze mieć ramkę o długości 12 linii podkreślenia.

Tytuł utworu musi zawsze zaczynać się od drugiej linii.

Tytuł utworu musi zawsze zaczynać się 3 bąbelkami podkreślenia.

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

Przykłady poniżej:

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

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

                  ____________
(\   ___   /)    /            \
( \ (‘o‘) / )   /    Silent    \
(           )  <     Night                         
 (  ‘> <’  )    \              /
    /    \       \____________/
   /      \  
  ‘ – “ - ‘
Belfield
źródło
1
1. / i \ w spódnicy twojego anioła są asymetryczne. Czy to celowe? 2. Jaki jest cel wyświetlania wyniku, jeśli powinien być identyczny z pytaniem?
Level River St
1
Jeśli chcesz być dokładny - 9 liter, 2 słowa, ale bardziej koncentrujesz się na trzech utworach wymienionych w opisie, a nie na innych tytułach.
Belfield
1
To nie jest sztuka ASCII! „” - „nie są znakami ASCII. Ponadto, dlaczego masz różne rodzaje myślników?
Stewie Griffin,
3
@StewieGriffin Założę się, że była to niezamierzona konsekwencja wpisania lub wklejenia tekstu w edytorze z funkcją „inteligentnych cytatów / myślników”. TextEdit w OS X jest patologiczny. Regularnie otrzymujemy pytania dotyczące SO w stylu „Dlaczego nie puts “hello”działa?”
Jordania
2
Rzeczywiście jest to @Jordan ....
Belfield,

Odpowiedzi:

1

PHP, 215 bajtów

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

pobiera tytuł z dwóch pierwszych argumentów wiersza poleceń.

W systemie Windows: dodaj 1 do wszystkich długości padów po pierwszym wierszu lub zduplikuj ukośniki odwrotne przed podziałami linii i zamień wszystkie podziały linii na \n

Tytus
źródło
3

JS (ES6), 328 330 bajtów

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 funkcja pomocnicza (a otrzymuje kod znaków (jeden znak krótszy) i powtarza c razy)
  • 1 zmienna do pobierania danych wejściowych prompt()i dzielenia na tablicę
  • prawdopodobnie nadużywa tam specjalnych przypadków, ale nadal spełnia swoje zadanie
  • Zakładałem, że potrzebne są dodatkowe 21 spacji w środkowej kolumnie

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
źródło
W przypadku kodowania UTF8 jest to 344 bajty, a nie 328. Jakiego kodowania użyłeś do zliczenia bajtów?
smls,
smls jest poprawny; to 328 znaków, ale 344 bajty. Możesz uratować 14, po prostu pozbywając się String.fromCharCodei robiąc a=(b,c)=>b.repeat(c), a następnie za każdym razem
sprawdzając
@ETHproductions, naprawione.
n4melyh4xor
@ n4melyh4xor Czy można zaakceptować tytuł utworu w formie podziału wstępnego, tj. zaimplementować kod jako lambda, który przyjmuje dwa osobne parametry dla dwóch słów? Czy może tytuł utworu musi składać się z jednego ciągu, a podział należy wykonać jako część kodu? (Rozwiązania Python 3.6 robią to pierwsze, a jeśli je
zapalisz na zielono, użyję
@smls, myślę, że należy go traktować jako jeden ciąg, a następnie możesz zrobić, co chcesz.
n4melyh4xor
3

Python 3.5, 207 znaków, 226 bajtów

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

Wynik:

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

Nieznacznie nie golfista:

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]

Zastępuje cyfry taką samą liczbą spacji.

James Hollis
źródło
2

Python 3.6 - 286 241 224 bajtów

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}/
   /      \ 
  ‘ – “ - ‘""")
Wejście:
x („Cicha noc”)
Output:    
                  ____________
(\   ___   /)    /            \
( \ (‘o‘) / )   /    Silent    \
(           )  <     Night
 (  ‘> <’  )    \              /
    /    \       \____________/
   /      \ 
  ‘ – “ - ‘

Uwaga - W tej wersji wprowadzono3.6 formatowanie literału łańcuchowego . Dlatego nie będzie działać we wcześniejszych wersjach.

Gurupad Mamadapur
źródło
1

Perl 6 , 234 bajtów (218 znaków)

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

Lambda, która wprowadza nazwę utworu jako ciąg znaków i podaje kąt śniegu jako ciąg.

  • Zakłada, że ​​końcowe spacje nie są wymagane.
  • Liczba bajtów dotyczy kodowania UTF8, ponieważ w ten sposób Perl 6 oczekuje kodu źródłowego.
smls
źródło
1

Python 2.6, 391 bajtów

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

Przypadek testowy:

angel("Silent Night")
                  ____________
(\   ___   /)    /            \
( \ (‘o‘) / )   /   Silent     \
(           )  <    Night   
 (  ‘> <’  )    \              /
    /    \       \____________/
   /      \  
  ‘ – “ - ‘
Sokół
źródło
Jaka jest liczba bajtów? Możesz użyć #titlezamiast**title*
Titus
Trochę późno (OK, dużo późno), ale możesz użyć 1 spacji do wcięcia, aby zaoszczędzić wiele bajtów, i możesz powiedzieć, p=printaby skrócić swoje odciski
Stephen