Надрукувати Співаючого Ангела


9

Виконуючи святкову тему, надрукуйте ангельського співочого ангела з найкоротшим можливим кодом. Ангел збирає гроші для бездомних, тому повинен мати можливість заспівати всі три пісні нижче, доступні за бажанням. Щоб проілюструвати, що вона може їх заспівати, назва пісні повинна бути розміщена в мовленнєвій міхурі. Цю назву пісні введе користувач. Приклади включають:

  • Мати Марія
  • дзвіночки
  • Тиха ніч

Вхід:

Назва: 1 з 3 пісень.

Вихід:

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

Будь ласка, вставте результат свого співочого ангела разом із піснею: "Тиха ніч".

Правила міхура:

Мовна бульбашка завжди повинна мати рамку з 12 підкреслювальних ліній завдовжки.

Назва пісні завжди повинна починатися з другого рядка.

Назва пісні завжди повинна містити 3 пробіли підкреслення всередині бульбашки.

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

Приклади нижче:

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

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

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

1
1. / і \ у спідниці вашого ангела асиметричні. Це навмисно? 2. Яка мета показу результату, якщо він повинен бути тотожним питанню?
Рівень р. Св.

1
Якщо ви хочете бути точними - 9 літер завдовжки, 2 слова, але акцент робиться більше на трьох піснях, перелічених в описі, на відміну від інших назв пісень.
Белфілд

1
Це не ASCII-мистецтво! `" - "не є символами ASCII. Крім того, чому у вас різні тире?
Стюі Гріффін

3
@StewieGriffin Я б сказав, що це було ненавмисним наслідком введення або вставлення тексту в редактор з функцією "розумні цитати / тире". TextEdit в ОС 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 допоміжна функція (a отримує charcode (один char коротший) і повторюється 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
 (  ‘> <’  )    \              /
    /    \       \____________/
   /      \
  ‘ – “ - ‘

Трохи незворушений:

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

Лямбда, яка вводить назву пісні у вигляді рядка, а кут снігу виводиться як струна.

  • Припускає, що пробіли не потрібні.
  • Кількість байтів призначена для кодування 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*
Тит

Трохи пізно (гаразд, дуже пізно), але ви можете використовувати 1 пробіл для відступу, щоб зберегти багато байт, і ви можете сказати, p=printщоб скоротити відбитки
Стівен
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.