พิมพ์แองเจิลร้องเพลง


9

รักษารูปแบบเทศกาลพิมพ์ทูตสวรรค์ร้องเพลงแครอลด้วยรหัสที่สั้นที่สุด ทูตสวรรค์กำลังหาเงินบริจาคให้คนไร้บ้านดังนั้นจะต้องสามารถร้องเพลงทั้งสามเพลงด้านล่างได้ตามคำขอ เพื่อแสดงให้เห็นว่าเธอสามารถร้องเพลงได้พวกเขาจะต้องวางชื่อเพลงไว้ในกรอบคำพูด ชื่อเพลงนี้จะถูกป้อนโดยผู้ใช้ ตัวอย่างรวมถึง:

  • แม่แมรี่
  • ระฆังกริ๊ง
  • คืนเงียบ

การป้อนข้อมูล:

หัวข้อ: 1 จาก 3 เพลง

เอาท์พุท:

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

โปรดวางผลลัพธ์ของนางฟ้าแห่งการร้องเพลงของคุณพร้อมกับเพลง: "Silent Night"

กฎฟองคำพูด:

ฟองคำพูดจะต้องมีกรอบของขีดเส้นใต้ 12 บรรทัดเสมอ

ชื่อเพลงจะต้องเริ่มที่บรรทัดที่สองเสมอ

ชื่อของเพลงจะต้องเริ่มต้นขีดเส้นใต้ 3 ช่องภายในฟอง

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

ตัวอย่างด้านล่าง:

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

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

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

1
1. การ / และ \ ในกระโปรงของนางฟ้าของคุณไม่สมดุล มันตั้งใจหรือไม่ 2. อะไรคือวัตถุประสงค์ของการแสดงผลลัพธ์ถ้ามันควรจะเหมือนกันกับคำถาม?
เลเวลริเวอร์เซนต์

1
ถ้าคุณต้องการที่จะแน่นอน - ยาว 9 ตัวอักษร 2 คำ แต่มุ่งเน้นที่สามเพลงที่ระบุไว้ในคำอธิบายเมื่อเทียบกับชื่อเพลงอื่น ๆ
Belfield

1
นี่ไม่ใช่ ASCII-art! `'-“ ไม่ใช่อักขระ ASCII นอกจากนี้ทำไมคุณมีขีดกลางประเภทต่าง ๆ
Stewie Griffin

3
@StewieGriffin ฉันจะพนันว่านี่เป็นผลสืบเนื่องจากการพิมพ์หรือวางข้อความในโปรแกรมแก้ไขพร้อมกับคุณสมบัติ "อัญประกาศ / ขีดกลางอัจฉริยะ" TextEdit บน OS X มีพยาธิสภาพเกี่ยวกับเรื่องนี้ เราได้รับคำถามเกี่ยวกับ SO เป็นประจำ "ทำไมไม่puts “hello”ทำงาน"
จอร์แดน

2
อันที่จริงมันเป็น @Jordan ....
Belfield

คำตอบ:


1

PHP, 215 ไบต์

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

ใช้หัวเรื่องจากอาร์กิวเมนต์บรรทัดคำสั่งสองข้อแรก

สำหรับ Windows: เพิ่ม 1 ให้กับความยาวแผ่นทั้งหมดหลังจากบรรทัดแรกหรือแบ็กสแลชที่ซ้ำกันก่อนการแบ่งบรรทัดและแทนที่การขึ้นบรรทัดใหม่ด้วย \n


3

JS (ES6), 328 330 ไบต์

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 ฟังก์ชันตัวช่วย (รับ charcode (ตัวอักษรสั้นลงหนึ่งตัว) และทำซ้ำ c ครั้ง)
  • 1 ตัวแปรสำหรับการรับอินพุตผ่านprompt()และทำการแบ่งเป็นอาร์เรย์
  • เนื้อหาที่ละเมิดกรณีพิเศษมี แต่ยังคงทำงาน
  • ฉันคิดว่าจำเป็นต้องเพิ่มช่องว่าง 21 ช่องในคอลัมน์กลาง

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


ด้วยการเข้ารหัส UTF8 นี่คือ 344 ไบต์ไม่ใช่ 328 การเข้ารหัสอะไรที่คุณใช้ในการนับไบต์
smls

smls ถูกต้อง นี่คือ 328 ตัวอักษร แต่ 344 ไบต์ คุณสามารถประหยัด 14 เพียงแค่กำจัดString.fromCharCodeและทำa=(b,c)=>b.repeat(c)แล้วโทรด้วยพื้นที่จริงหรือขีดล่างทุกครั้ง
ETHproductions

@ETHproductions แก้ไขแล้ว
n4melyh4xor

@ n4melyh4xor มันเป็นเรื่องปกติไหมที่จะยอมรับชื่อเพลงในรูปแบบการแบ่งล่วงหน้าคือการใช้โค้ดเป็นแลมบ์ดาซึ่งใช้พารามิเตอร์สองตัวแยกกันสำหรับสองคำ? หรือชื่อเพลงต้องเข้ามาเป็นหนึ่งสายและการแยกจะทำในส่วนของรหัสหรือไม่ (โซลูชัน Python 3.6 ใช้วิธีก่อนหน้านี้และหากคุณเป็นมิตรกับสิ่งแวดล้อมฉันจะใช้มันเพื่อทำให้โซลูชัน Perl 6 ของฉันสั้นลงเช่นกัน ... :))
smls

@smls ฉันคิดว่ามันควรจะเป็นสายเดียวแล้วคุณสามารถทำสิ่งที่คุณต้องการ
n4melyh4xor

3

Python 3.5, 207 ตัวอักษร, 226 ไบต์

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

เอาท์พุท:

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

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]

มันจะแทนที่ตัวเลขที่เป็นตัวเลขด้วยจำนวนช่องว่างที่เท่ากัน


2

Python 3.6 - 286 241 224ไบต์

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}/
   /      \ 
  ‘ – “ - ‘""")
การป้อนข้อมูล:
x ("Silent Night")
Output:    
                  ____________
(\   ___   /)    /            \
( \ (‘o‘) / )   /    Silent    \
(           )  <     Night
 (  ‘> <’  )    \              /
    /    \       \____________/
   /      \ 
  ‘ – “ - ‘

หมายเหตุ - รุ่นเป็น3.6ที่สตริงการจัดรูปแบบตัวอักษรได้รับการแนะนำให้รู้จัก ดังนั้นสิ่งนี้จะไม่ทำงานในเวอร์ชันก่อนหน้า


1

Perl 6 , 234 ไบต์ (218 ตัวอักษร)

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

แลมบ์ดาที่ป้อนชื่อเพลงเป็นสตริงและส่งออกมุมหิมะเป็นสตริง

  • สมมติว่าไม่ต้องการช่องว่างต่อท้าย
  • จำนวนไบต์มีไว้สำหรับการเข้ารหัส UTF8 เพราะนั่นคือวิธีที่ Perl 6 คาดว่าซอร์สโค้ด

1

Python 2.6, 391 ไบต์

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

กรณีทดสอบ:

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

จำนวนไบต์คืออะไร คุณอาจต้องการใช้#titleแทน**title*
Titus

สายเล็ก ๆ น้อย ๆ (ตกลงช้าไปมาก) แต่คุณสามารถใช้ที่ว่าง 1 อันสำหรับการเยื้องเพื่อประหยัดไบต์จำนวนมากและคุณสามารถพูดp=printให้ลายนิ้วมือของคุณสั้นลง
Stephen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.