Примечание : Андерс Касорг предупреждает меня, что это может быть дубликатом другого предыдущего вопроса . Кажется, и мне жаль, что я не нашел этот вопрос до публикации этого. Тем не менее, на этот вопрос был получен только один ответ, и этот вопрос проще, на тот случай, если вы все захотите попробовать на этот раз. Я пойму, если этот вопрос будет помечен как дубликат.
Соревнование
Учитывая ввод, как это:
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
Как обычно, ваша программа / функция может напрямую выводить выходные данные или возвращать строку, массив строк, матрицу символов или любой другой приемлемый формат.
Полезные ссылки
Это код-гольф , поэтому может выиграть самая короткая программа / функция для каждого языка!
Бонус: попробуйте написать примеры с известными мелодиями, и пусть каждый попытается угадать, какая это мелодия!
Ответы:
SOGL V0.12 ,
178175174173172171 байтПопробуй здесь! (θ добавлено для простоты использования; чтобы работать с 171 байтом, он ожидает, что вход будет в стеке)
Насколько я могу сказать, это работает, но если вы обнаружите какие-либо проблемы, скажите мне.
Объяснение:
первая часть: создание холста
вторая часть: петля, расположение заметки
третья часть: флаги и стебли
источник
2bs
в вашем примере должна иметь ножку, направленную вниз.JavaScript (ES6),
616527 байтСпасибо @shaggy за удаление почти 90 байтов
Я понятия не имел о заметках ... до сих пор, надеюсь, я понял это правильно.
объяснение
источник
t[0]
иt[2]
, а затем просто сделайте этоq=t.length*9
s>6&&(
которого вы можете сэкономить байт. Вы также можете сохранить другой байт с помощью замены(w=q+12)
наw
,repeat(q=i.length*9)
сrepeat(w=i.length*9)
иrepeat(q)
сrepeat(w,w+=12)
.Древесный уголь ,
180171168163 байтаПопробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Распечатать посох.
Распечатать ключ.
Перебрать каждую заметку.
Найдите Y-координату заметки.
Это действительно подлый:
χ
переменная, которая предопределена до 10, что в точности соответствует X-координате случайной первой ноты, если она есть. После перехода в эту позицию к ней добавляется 9, представляющее следующую позицию ноты.Распечатайте случайное, если оно есть.
При необходимости распечатайте строки бухгалтерской книги и примечание. На самом деле линия печатается на любой четной координате Y, хотя печать ее на нотном стане, конечно, не имеет никакого эффекта.
Больше нечего делать для полубривов.
Для заметок ниже средней точки,
нарисовать стебель вверх,
и флаг для кваверов.
Для заметок выше средней точки,
нарисовать стебель вниз,
и флаг для кваверов.
источник