Примечание : Андерс Касорг предупреждает меня, что это может быть дубликатом другого предыдущего вопроса . Кажется, и мне жаль, что я не нашел этот вопрос до публикации этого. Тем не менее, на этот вопрос был получен только один ответ, и этот вопрос проще, на тот случай, если вы все захотите попробовать на этот раз. Я пойму, если этот вопрос будет помечен как дубликат.
Соревнование
Учитывая ввод, как это:
8g 8Df 4cs 2C 1A
Напишите самую короткую программу / функцию, которая производит вывод, подобный этому:
/\ -o-
| |
---|-|---------------------------------------------------|-|
|/ | |
---/|--------|\----b-*-----------------------------------|-|
/ | | | | o | |
-|--|--------|------|-----------------|------------------|-|
| (| \ | | | | | |
-|--|--)----*-------|/---------|------|------------------|-|
\ | / | | | |
-----|-------------------------|-------------------------|-|
| |
*_/ #-*-
правила
Выходные данные должны состоять из пятистрочного персонала, начинающегося с рисунка G-ключа в точности так, как показано выше, выровненного по левому краю персонала и оставляющего один столбец после запуска персонала.
/\
| |
---|-|--
|/
---/|---
/ |
-|--|---
| (| \
-|--|--)
\ | /
-----|--
|
*_/
^
Single column
Примечания должны начинаться с *
или с o
символа в зависимости от его типа.
Должно быть ровно восемь столбцов разделения каждого *
или o
символа:
/\ -o-
| |
---|-|---------------------------------------------------|-|
|/ | |
---/|--------|\----b-*-----------------------------------|-|
/ | | | | o | |
-|--|--------|------|-----------------|------------------|-|
| (| \ | | | | | |
-|--|--)----*-------|/---------|------|------------------|-|
\ | / | | | |
-----|-------------------------|-------------------------|-|
| |
*_/ #-*-
↑ ↑ ↑ ↑ ↑ ↑ ↑
8 columns of separation
Персонал должен заканчиваться выравниванием терминатора вправо, как показано в примере. Левая полоса терминатора должна быть отделена на 8 столбцов от последней ноты.
В качестве входных данных будет использоваться одна строка, содержащая заметки (по крайней мере, одна, без пустых входных данных), каждая из которых разделена пробелами (можно считать, что каждая заметка будет правильной, поэтому нет необходимости проверять наличие ошибок). Вы также можете принять входные данные в виде массива строк с примечанием для каждого элемента в массиве. Для каждой ноты первый символ будет знаменателем длины ноты ( 1
для всей ноты / полувывода начинается с o
; 2
для половины ноты / минимума начинается с o
; 4
для четвертной ноты / карабина начинается с *
; и 8
для восьмой примечание / квавер , начинается с*
). Вторым символом будет примечание (см. Следующую таблицу), а третьим необязательным символом будет f
либо F
для плоских нот, s
либо S
для острых нот.
--- A (ledger line)
G
-------- F
E
-------- D
C
-------- b
a
-------- g
f
-------- e
d
--- c (ledger line)
Очевидно, что вход должен уважать случай для нот, но вы можете выбрать случай из f
и s
модификаторов.
Примечания c
и A
должны добавить две -
(строки бухгалтерской книги), по одной на каждой стороне, так как они должны расширить персонал. Заметки d
и G
находятся вне персонала, но не нуждаются в регистрационных линиях.
Выровняйте или заостренные заметки должны добавить b
или #
две позиции слева от заметки.
Стебли (если есть) должны быть нарисованы с помощью 4 вертикальных полос. Ноты b
сверху и снизу должны рисовать стебель вниз и с левой стороны банкноты. Ноты сверху a
и снизу должны нарисовать стебель вверх и с правой стороны банкноты. Quavers должен добавить флаг, всегда направо и точно так, как показано, и не должен быть передан, если их несколько в ряду.
--------------------------
-----|\----b-*------------
| | |
-----|------|-------------
| | |
----*-------|/---------|--
↑↑ |
----||------↑↑---------|--
|| || |
|| || #-*-
|\ |\ ↑↑
| Stem | Note | Stem
Note Stem Note
Как обычно, ваша программа / функция может напрямую выводить выходные данные или возвращать строку, массив строк, матрицу символов или любой другой приемлемый формат.
Полезные ссылки
Это код-гольф , поэтому может выиграть самая короткая программа / функция для каждого языка!
Бонус: попробуйте написать примеры с известными мелодиями, и пусть каждый попытается угадать, какая это мелодия!