Cetak Malaikat Bernyanyi

9

Sesuai dengan tema yang meriah, cetak malaikat bernyanyi carol dengan kode sesingkat mungkin. Malaikat mengumpulkan uang untuk para tunawisma, sehingga harus dapat menyanyikan ketiga lagu di bawah ini yang tersedia atas permintaan. Untuk mengilustrasikan dia bisa menyanyikannya, judul lagu harus ditempatkan di dalam gelembung ucapan. Judul lagu ini akan diinput oleh pengguna. Contohnya termasuk:

  • Ibu Mary
  • Jingle Bells
  • Malam sunyi

Memasukkan:

Judul: 1 dari 3 lagu.

Keluaran:

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

Silakan tempelkan hasil nyanyian malaikat Anda bersama dengan lagu: "Silent Night".

Aturan Gelembung Pidato:

Gelembung ucapan harus selalu memiliki bingkai 12 garis garis bawah.

Judul lagu harus selalu dimulai pada baris kedua.

Judul lagu harus selalu dimulai 3 spasi garis bawah di dalam gelembung.

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

Contoh di bawah ini:

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

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

                  ____________
(\   ___   /)    /            \
( \ (‘o‘) / )   /    Silent    \
(           )  <     Night                         
 (  ‘> <’  )    \              /
    /    \       \____________/
   /      \  
  ‘ – “ - ‘
Belfield
sumber
1
1. Tanda / dan \ di rok malaikat Anda asimetris. Apakah ini disengaja? 2. Apa tujuan menunjukkan output, jika harus identik dengan pertanyaan?
Level River St
1
Jika Anda ingin tepat - panjang 9 huruf, 2 kata, tetapi fokusnya lebih pada tiga lagu yang tercantum dalam deskripsi dibandingkan dengan judul lagu lainnya.
Belfield
1
Ini bukan ASCII-art! `'-“ bukan karakter ASCII. Juga, mengapa Anda memiliki berbagai jenis tanda hubung?
Stewie Griffin
3
@StewieGriffin Saya berani bertaruh ini adalah konsekuensi yang tidak diinginkan dari mengetik atau menempelkan teks dalam editor dengan fitur "kutipan pintar / putus-putus". TextEdit pada OS X adalah patologis tentang ini. Kami secara teratur mendapatkan pertanyaan tentang SO di sepanjang baris, "Mengapa tidak puts “hello”berhasil?"
Jordan
2
Memang itu @Jordan ....
Belfield

Jawaban:

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

mengambil judul dari dua argumen baris perintah pertama.

Untuk Windows: tambahkan 1 untuk semua panjang papan setelah baris pertama, atau duplikat garis miring terbalik sebelum jeda baris dan ganti semua jeda baris dengan \n

Titus
sumber
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 fungsi pembantu (mendapat kode sandi (satu karakter lebih pendek) dan mengulangi c kali)
  • 1 variabel untuk mendapatkan input melalui prompt()dan melakukan split to array
  • bisa dibilang menyalahgunakan kasus khusus di sana tetapi masih melakukan pekerjaan
  • Saya berasumsi 21 ruang tambahan di kolom tengah diperlukan

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
sumber
Dengan pengkodean UTF8, ini adalah 344 byte, bukan 328. Pengodean apa yang Anda gunakan untuk menghitung byte?
smls
seseorang benar; ini adalah 328 karakter, tetapi 344 byte. Anda dapat menyimpan 14 hanya dengan menyingkirkan String.fromCharCodedan melakukan a=(b,c)=>b.repeat(c), lalu menelepon dengan ruang aktual atau menggarisbawahi setiap kali
ETHproduksi
@ ETHproduksi, diperbaiki.
n4melyh4xor atau
@ n4melyh4xor Apakah saya tetap bisa menerima judul lagu dalam bentuk pra-split, yaitu untuk mengimplementasikan kode sebagai lambda yang mengambil dua parameter terpisah untuk dua kata? Atau apakah judul lagu harus masuk sebagai satu string, dan pemisahan dilakukan sebagai bagian dari kode? (Solusi Python 3.6 melakukan yang pertama, dan jika Anda menyalakannya hijau, saya akan menggunakannya untuk mempersingkat solusi Perl 6 saya juga ... :))
smls
@ mls, saya pikir itu harus diambil sebagai satu string dan kemudian Anda dapat melakukan apapun yang Anda inginkan.
n4melyh4xor
3

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

Keluaran:

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

Sedikit tidak berbulu:

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]

Ini menggantikan angka numerik dengan jumlah ruang yang sama.

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

Catatan - Versi ini adalah 3.6tempat pemformatan string literal diperkenalkan . Karenanya, ini tidak akan berfungsi di versi sebelumnya.

Gurupad Mamadapur
sumber
1

Perl 6 , 234 byte (218 karakter)

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

Sebuah lambda yang memasukkan nama lagu sebagai string, dan menampilkan sudut salju sebagai string.

  • Diasumsikan bahwa spasi tambahan tidak diperlukan.
  • Hitungan byte untuk pengkodean UTF8, karena itulah cara Perl 6 mengharapkan kode sumber.
seseorang
sumber
1

Python 2.6, 391 byte

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

Kasus cobaan:

angel("Silent Night")
                  ____________
(\   ___   /)    /            \
( \ (‘o‘) / )   /   Silent     \
(           )  <    Night   
 (  ‘> <’  )    \              /
    /    \       \____________/
   /      \  
  ‘ – “ - ‘
Elang
sumber
Berapa jumlah byte? Anda mungkin ingin menggunakan #titlesebagai ganti**title*
Titus
Agak terlambat (OK, sangat terlambat) tetapi Anda dapat menggunakan 1 ruang untuk lekukan untuk menghemat banyak byte, dan Anda dapat mengatakan p=printuntuk mempersingkat cetakan Anda
Stephen