Распечатать поющего ангела


9

Продолжая праздничную тему, напечатайте колядного поющего ангела с кратчайшим кодом. Ангел собирает деньги для бездомных, поэтому должен уметь петь все три песни, представленные ниже по запросу. Чтобы проиллюстрировать, что она может петь их, название песни должно быть помещено в речевой пузырь. Это название песни будет введено пользователем. Примеры включают в себя:

  • Мать Мэри
  • колокольчики
  • Тихая ночь

Входные данные:

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

Вывод:

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

Пожалуйста, вставьте результат вашего поющего ангела вместе с песней: «Тихая ночь».

Правила речевого пузыря:

Речевой пузырь всегда должен иметь рамку из 12 линий подчеркивания.

Название песни всегда должно начинаться со второй строки.

Название песни всегда должно начинаться с 3-х знаков подчеркивания внутри пузыря.

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

Примеры ниже:

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

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

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

1
1. / и \ в юбке вашего ангела асимметричны. Это намеренно? 2. Какова цель показа результата, если он должен совпадать с вопросом?
Уровень Река St

1
Если вы хотите быть точным - 9 букв в длину, 2 слова, но больше внимания уделяется трем песням, перечисленным в описании, а не другим названиям песен.
Белфилд

1
Это не ASCII-арт! `'-“ не являются ASCII-символами. Кроме того, почему у вас есть различные виды тире?
Стьюи Гриффин

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 вспомогательная функция (a получает код (один символ короче) и повторяется 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 делают первое, и, если вы
подсвечиваете

@ Смлс, я думаю, это должно быть воспринято как одна строка, и тогда ты сможешь делать все, что захочешь
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}/
   /      \ 
  ‘ – “ - ‘""")
Входные данные:
х («Тихая ночь»)
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чтобы сократить ваши отпечатки
Стивен
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.