При вводе ноты выведите ASCII-чертеж соответствующей мажорной клавиши на скрипичном ключе.
Вот все основные ключи (которые не включают двойные острые или двойные квартиры) и соответствующие им подписи ключей:
Круг пятых делюкс 4 от пользователя из Википедии Просто Билл, авторское право CC BY-SA 3.0
Если в качестве ввода используется клавиша с острыми краями, нарисуйте следующую иллюстрацию ASCII с соответствующим количеством острых предметов:
#
-#-------
#
----#----
#
-------#-
#
---------
---------
И если на входе есть ключ с квартирами:
---------
b
----b----
b
-b-------
b
-----b---
b
---------
Вот краткое резюме возможных входных данных, а также сколько острых предметов или квартир они используют:
0 1 2 3 4 5 6 7
# C G D A E B F# C#
b C F Bb Eb Ab Db Gb Cb
Все пять линий штрихов всегда должны быть нарисованы, но в каждой строке может быть любое количество штрихов, так что у диезов или плоскостей должен быть хотя бы один столбец заполнения с каждой стороны, при условии, что каждая линия штрихов имеет одинаковую длину. Например, все это также приемлемые выходы для ввода Ab
:
--------- ------ --------- ----------------
b b b b
----b---- ----b- -------b- ------b---------
-b------- -b---- ----b---- ---b------------
b b b b
--------- ------ --------- ----------------
--------- ------ --------- ----------------
В случае до мажор, в котором нет ни острых предметов, ни плоских линий, допустимо любое положительное число штрихов в строке (даже одного).
Любое количество начальных или конечных пробелов хорошо, как и пробелы в каждой строке. С дополнительными ведущими пробелами все в порядке, если в каждой строке одинаковое число.
Вы можете взять ввод в нижнем регистре или требовать, чтобы входы без резкого или плоского концевого пробела, если вы того пожелаете.
Поскольку это код-гольф , победит самое короткое решение в байтах.
источник
Ответы:
Python 2 ,
206 197 178 175 168161 байтСпасибо мистеру Xcoder за -12 байтов!
Это функция, которая возвращает результат в виде двухмерного списка символов. Если на входе нет резкого / плоского, он должен быть дополнен пробелом.
Попробуйте онлайн!
источник
"FCGDAEB".find(k[0])-1
картыF
в-1
и других их индекс - 1, так что я думаю , чтоn="CGDAEB".find(k[0])+7*('#'in k)-7*('b'in k)
будет работать вместо этого. ( 175 байт? )Древесный уголь , 60 байт
Попробуйте онлайн! Ссылка на подробную версию кода. Объяснение:
Подсчитайте количество острых предметов в ключе подписи.
Напечатайте штырь, но на один квадрат слева от начала координат, чтобы первый резкий / плоский был в нулевом столбце
Переверните все острые предметы.
Рассчитайте ряд острых и распечатайте его.
Обведите все квартиры.
Рассчитайте ряд квартиры и распечатайте его.
источник
Befunge, 139 байтов
Попробуйте онлайн!
Обратите внимание, что ввод должен завершаться переводом строки, как это обычно происходит при интерактивном запуске программы.
объяснение
Мы начинаем с чтения двух символов из stdin - основной ноты, n и случайного a (который может быть переводом строки, если нет случайного). Используя эти значения, мы вычисляем номер ключевой подписи signum следующим образом:
Это возвращает значение в диапазоне от -7 до 7, где знак говорит нам, нужны ли нам острые или плоские (положительные или отрицательные), а абсолютное значение дает нам необходимое количество острых или плоских. Поэтому для дальнейшего использования мы извлекаем знак s и случайный счет cnt :
Затем у нас есть два вложенных цикла, итерируя номер строки, r от 9 до 0 и номер столбца c от 0 до 8. Для конкретной строки и столбца мы вычисляем, должен ли случайный объект быть видимым при этом. указать с:
Если это не случайно, нам нужно вывести строку или пробел в зависимости от того, строка или r нечетной или четной. И если это случайно, нам нужно вывести резкое или плоское в зависимости от знака s . Поэтому мы оцениваем следующую формулу:
Что дает нам индекс в диапазоне от 0 до 3, представляющий либо линию, либо пробел, либо плоскую, либо резкую. Мы просто используем этот индекс для поиска необходимого выходного символа в таблице, которую вы можете видеть встроенной в начале второй строки кода.
источник