歌う天使を印刷する


9

お祭りのテーマに沿って、キャロルの歌う天使を可能な限り短いコードで印刷します。天使はホームレスのためにお金を集めているので、要求に応じて利用可能な以下の3曲すべてを歌うことができなければなりません。彼女が歌えることを示すために、歌のタイトルを吹き出し内に配置する必要があります。この曲名はユーザーが入力します。例は次のとおりです。

  • マリア様
  • ジングルベル
  • 静かな夜

入力:

タイトル:3曲のうち1曲。

出力:

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

歌う天使の結果を「Silent Night」という曲と一緒に貼り付けてください。

ふきだしルール:

吹き出しのフレームの長さは、常に12アンダースコアにする必要があります。

曲のタイトルは常に2行目から始める必要があります。

曲のタイトルは、常にバブル内の3つのアンダースコアスペースで始まる必要があります。

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

以下の例:

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

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

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

1
1.天使のスカートの/と\は非対称です。これは意図的ですか?2.質問と同じである必要がある場合、出力を表示する目的は何ですか?
Level River St

1
正確にしたい場合-9文字、2語ですが、他の曲のタイトルとは対照的に、説明にリストされている3つの曲に重点が置かれています。
Belfield 2016

1
これはアスキーアートではありません!`'–“はASCII文字ではありません。また、ダッシュの種類が異なるのはなぜですか?
Stewie Griffin 2016

3
@StewieGriffinこれは、「スマートクォート/ダッシュ」機能を備えたエディターでテキストを入力または貼り付けた場合の意図しない結果だったと思います。OS X上のTextEditはこれについて病理的です。私たちは「なぜうまくいかないのputs “hello”ですか?」という言葉に沿ってSOについて定期的に質問を受けます。
ジョーダン

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

最初の2つのコマンドライン引数からタイトルを取得します。

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ヘルパー関数(aは文字コード(1文字短い)を取得し、c回繰り返す)
  • 入力を取得prompt()して配列に分割するための1つの変数
  • 間違いなくそこでは特別なケースを悪用しますが、それでも仕事をします
  • 真ん中の列に余分な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エンコーディングでは、これは328バイトではなく344バイトです。バイトをカウントするためにどのエンコーディングを使用しましたか?
smls 2016

smlsは正しいです。これは328文字ですが、344バイトです。をString.fromCharCodea=(b,c)=>b.repeat(c)
削除し

@ETHproductions、修正されました。
n4melyh4xor 2016

@ n4melyh4xor事前に分割された形式で曲のタイトルを受け入れることは許可されますか。つまり、2つの単語に対して2つの別々のパラメーターをとるラムダとしてコードを実装しますか?または、曲のタイトルを1つの文字列として入力しなければならず、分割はコードの一部として行われますか?(Python 3.6ソリューションは前者を実行します。青信号が出たら、それを使用してPerl 6ソリューションも短縮します... :))
smls

@smls、私はそれを1つの文字列として取り込む必要があると思います。そうすれば、好きなことができます。
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

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( "サイレントナイト")
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}/
  /      \\
  ‘ – “ - ‘"}

曲名を文字列として入力し、雪の角度を文字列として出力するラムダ。

  • 末尾のスペースは不要であると想定しています。
  • バイト数は、Perl 6がソースコードを想定しているUTF8エンコーディング用です。

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

少し遅い(OK、かなり遅い)が、インデントに1スペースを使用して多くのバイトを節約できp=print、印刷を短くすることができる
Stephen
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.