노래하는 천사 인쇄


9

축제 테마를 유지하면서 가능한 가장 짧은 코드로 캐롤 노래 천사를 인쇄하십시오. 천사는 노숙자를 위해 돈을 모으고 있으므로 요청에 따라 아래 3 곡을 모두 부를 수 있어야합니다. 그녀가 노래를 부를 수 있음을 설명하기 위해 노래 제목을 말풍선 안에 배치해야합니다. 이 노래 제목은 사용자가 입력합니다. 예를 들면 다음과 같습니다.

  • 어머니 마리아
  • 징글 벨
  • 고요한 밤

입력:

제목 : 3 곡 중 1 곡.

산출:

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

노래하는 천사의 결과를 노래와 함께 "Silent Night"과 함께 붙여 넣으십시오.

말풍선 규칙 :

말풍선은 항상 12 밑줄의 프레임 길이를 가져야합니다.

노래 제목은 항상 두 번째 줄에서 시작해야합니다.

노래 제목은 항상 버블 내부에서 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

1
이것은 ASCII 예술이 아닙니다! ` '–“는 ASCII 문자가 아닙니다. 또한 왜 다른 유형의 대시가 있습니까?
Stewie Griffin

3
@StewieGriffin "스마트 따옴표 / 대시"기능을 사용하여 편집기에서 텍스트를 입력하거나 붙여 넣은 경우 의도하지 않은 결과 일 것입니다. OS X의 TextEdit는 이에 대한 병리학입니다. "왜 작동하지 puts “hello”않습니까?"라는 문구에 따라 SO에 대한 질문을 정기적으로받습니다.
Jordan

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 헬퍼 기능
  • 입력을 통해 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

smls가 정확합니다. 이것은 328 자이지만 344 바이트입니다. 을 제거 String.fromCharCode하고 수행 a=(b,c)=>b.repeat(c)한 다음 매번 실제 공간이나 밑줄로 호출하여 14를 절약 할 수 있습니다.
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
 (  ‘> <’  )    \              /
    /    \       \____________/
   /      \
  ‘ – “ - ‘

약간 골퍼되지 않음 :

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

노래 이름을 문자열로 입력하고 눈 각도를 문자열로 출력하는 람다.

  • 후행 공백이 필요하지 않다고 가정합니다.
  • 바이트 수는 UTF8 인코딩에 대한 것입니다. Perl 6이 소스 코드를 예상하는 방식이기 때문입니다.

1

파이썬 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.