Drucken Sie einen singenden Engel

9

Drucken Sie einen Weihnachtslied-Gesangsengel mit dem kürzestmöglichen Code. Der Engel sammelt Geld für Obdachlose und muss daher in der Lage sein, alle drei der unten aufgeführten Lieder auf Anfrage zu singen. Um zu veranschaulichen, dass sie sie singen kann, muss der Titel des Liedes in die Sprechblase eingefügt werden. Dieser Songtitel wird vom Benutzer eingegeben. Beispiele beinhalten:

  • Mutter Maria
  • Klingelglocken
  • Stille Nacht

Eingang:

Titel: 1 der 3 Songs.

Ausgabe:

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

Bitte fügen Sie das Ergebnis Ihres singenden Engels zusammen mit dem Lied "Stille Nacht" ein.

Regeln für Sprechblasen:

Die Sprechblase muss immer einen Rahmen von 12 Unterstrichzeilen haben.

Der Titel des Songs muss immer in der zweiten Zeile beginnen.

Der Titel des Songs muss immer mit 3 Unterstrichen in der Blase beginnen.

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

Beispiele unten:

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

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

                  ____________
(\   ___   /)    /            \
( \ (‘o‘) / )   /    Silent    \
(           )  <     Night                         
 (  ‘> <’  )    \              /
    /    \       \____________/
   /      \  
  ‘ – “ - ‘
Belfield
quelle
1
1. Das / und \ im Rock deines Engels sind asymmetrisch. Ist das beabsichtigt? 2. Was ist der Zweck der Anzeige der Ausgabe, wenn sie mit der Frage identisch sein sollte?
Level River St
1
Wenn Sie genau sein möchten - 9 Buchstaben lang, 2 Wörter, aber der Fokus liegt mehr auf den drei in der Beschreibung aufgeführten Songs als auf anderen Songtiteln.
Belfield
1
Dies ist keine ASCII-Kunst! `'-' sind keine ASCII-Zeichen. Warum haben Sie verschiedene Arten von Strichen?
Stewie Griffin
3
@StewieGriffin Ich wette, dies war eine unbeabsichtigte Folge des Eingebens oder Einfügens des Textes in einen Editor mit der Funktion "Intelligente Anführungszeichen / Bindestriche". TextEdit unter OS X ist diesbezüglich pathologisch. Wir bekommen regelmäßig Fragen zu SO wie: "Warum funktioniert das nicht puts “hello”?"
Jordanien
2
In der Tat ist es @Jordan ....
Belfield

Antworten:

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

Übernimmt den Titel aus den ersten beiden Befehlszeilenargumenten.

Für Windows: Fügen Sie nach der ersten Zeile 1 zu allen Pad-Längen hinzu oder duplizieren Sie Backslashes vor Zeilenumbrüchen und ersetzen Sie alle Zeilenumbrüche durch \n

Titus
quelle
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 Hilfsfunktion (a erhält Zeichencode (ein Zeichen kürzer) und wiederholt c-mal)
  • 1 Variable zum Abrufen von Eingaben über prompt()und zum Aufteilen auf ein Array
  • missbraucht wohl die Sonderfälle dort, macht aber trotzdem den Job
  • Ich nahm an, dass die zusätzlichen 21 Leerzeichen in der mittleren Spalte benötigt wurden

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
quelle
Bei der UTF8-Codierung sind dies 344 Bytes, nicht 328. Mit welcher Codierung haben Sie die Bytes gezählt?
smls
smls ist richtig; Das sind 328 Zeichen, aber 344 Bytes. Sie können 14 sparen, indem Sie sie einfach loswerden String.fromCharCodeund a=(b,c)=>b.repeat(c)dann jedes Mal mit einem Leerzeichen oder einem Unterstrich
anrufen
@ETHproductions, behoben.
n4melyh4xor
@ n4melyh4xor Ist es in Ordnung, den Songtitel in vorgeteilter Form zu akzeptieren, dh den Code als Lambda zu implementieren, das zwei separate Parameter für die beiden Wörter verwendet? Oder muss der Songtitel als eine Zeichenfolge eingegeben werden und die Aufteilung muss als Teil des Codes erfolgen? (Die Python 3.6-Lösungen machen das erstere, und wenn Sie grünes Licht geben, werde ich es auch verwenden, um meine Perl 6-Lösung zu verkürzen ... :))
smls
@smls, ich denke, es sollte als eine Zeichenfolge aufgenommen werden und dann können Sie tun, was Sie wollen.
n4melyh4xor
3

Python 3.5, 207 Zeichen, 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‘ – “ - ‘"]

Ausgabe:

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

Leicht ungolfed:

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]

Es ersetzt numerische Ziffern durch die gleiche Anzahl von Leerzeichen.

James Hollis
quelle
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}/
   /      \ 
  ‘ – “ - ‘""")
Eingang:
x ("Stille Nacht")
Output:    
                  ____________
(\   ___   /)    /            \
( \ (‘o‘) / )   /    Silent    \
(           )  <     Night
 (  ‘> <’  )    \              /
    /    \       \____________/
   /      \ 
  ‘ – “ - ‘

Hinweis - In der Version wurde die 3.6Formatierung von Zeichenfolgenliteralen eingeführt . Daher funktioniert dies in früheren Versionen nicht.

Gurupad Mamadapur
quelle
1

Perl 6 , 234 Bytes (218 Zeichen)

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

Ein Lambda, das den Songnamen als Zeichenfolge und den Schneewinkel als Zeichenfolge ausgibt.

  • Es wird davon ausgegangen, dass keine nachgestellten Leerzeichen erforderlich sind.
  • Die Anzahl der Bytes gilt für die UTF8-Codierung, da Perl 6 auf diese Weise den Quellcode erwartet.
smls
quelle
1

Python 2.6, 391 Bytes

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

Testfall:

angel("Silent Night")
                  ____________
(\   ___   /)    /            \
( \ (‘o‘) / )   /   Silent     \
(           )  <    Night   
 (  ‘> <’  )    \              /
    /    \       \____________/
   /      \  
  ‘ – “ - ‘
Falke
quelle
Was ist die Byteanzahl? Sie können #titleanstelle von**title*
Titus
Etwas spät (OK, viel zu spät), aber Sie können 1 Leerzeichen zum Einrücken verwenden, um viele Bytes zu sparen, und Sie können sagen p=print, dass Sie Ihre Ausdrucke verkürzen möchten
Stephen