打印一个唱歌的天使


9

保持节日主题不变,以尽可能短的代码打印颂歌天使。天使为无家可归的人筹集资金,因此必须能够按要求演唱以下所有三首歌。为了说明她可以唱歌,歌曲的标题必须放在气泡中。该歌曲标题将由用户输入。示例包括:

  • 圣母玛丽
  • 铃儿响叮当
  • 平安夜

输入:

标题:3首歌曲中的1首。

输出:

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

请粘贴您演唱天使的结果以及歌曲“ Silent Night”。

语音气泡规则:

对话气泡必须始终具有12个下划线行的框架。

歌曲的标题必须始终从第二行开始。

歌曲的标题必须始终在气泡内的3个下划线空格开头。

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

以下示例:

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

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

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

1
1.天使裙中的/和\是不对称的。这是故意的吗?2.显示输出的目的是什么(如果输出应与问题相同)?
水平河圣

1
如果要精确-9个字母长,2个单词,但重点更多地放在说明中列出的三首歌曲上,而不是其他歌曲名称。
贝尔菲尔德

1
这不是ASCII艺术!“'–”不是ASCII字符。另外,为什么会有不同类型的破折号?
Stewie Griffin

3
@StewieGriffin我敢打赌,这是在具有“智能引号/破折号”功能的编辑器中键入或粘贴文本的意外结果。OS X上的TextEdit对此是病态的。我们经常会按照“为什么不起作用puts “hello”?”这样的方式对SO提出问题。
约旦

2
事实上,这是@Jordan ....
贝尔菲尔德

Answers:


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个辅助函数(一个获取字符码(缩短一个字符)并重复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个字节。您只需删除String.fromCharCode并执行操作a=(b,c)=>b.repeat(c),然后每次调用一个实际空格或下划线,就可以节省14个
ETHproductions

@ETHproductions,已修复。
n4melyh4xor或2016年

@ n4melyh4xor是否可以接受预拆分形式的歌曲标题,即将代码实现为lambda并为两个单词使用两个单独的参数?还是歌曲标题必须作为一个字符串输入,并且拆分作为代码的一部分进行?(Python 3.6解决方案做了前者,如果您开绿灯,我也会用它来缩短我的Perl 6解决方案... :))
smls

@smls,我认为应该将其作为一个字符串接收,然后您可以做任何您想做的事情。
n4melyh4xor或2016年

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
 (  ‘> <’  )    \              /
    /    \       \____________/
   /      \
  ‘ – “ - ‘

稍微松了一下:

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

蟒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(“寂静的夜晚”)
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}/
  /      \\
  ‘ – “ - ‘"}

一个lambda,它以字符串形式输入歌曲名称,并以字符串形式输出下雪角。

  • 假定不需要尾随空格。
  • 字节数用于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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.