Методические рекомендации
задача
Учитывая две ноты, введенные в виде строк или списков / массивов, вычислите, сколько между ними полутонов (включая сами ноты), и выведите их в виде числа.
Объяснение полутона:
Полутон - это один шаг вверх или вниз по клавиатуре. Примером является C на C #. Как вы можете видеть ниже, нота C находится на белой ноте, а C # - черная нота, только одна над ней. Полутона - это скачки от черной ноты к следующей белой ноте, вверх или вниз, за исключением:
- От B до C
- С на Б
- От E до F
- От F до E
Примеры
'A, C' -> 4
'G, G#' -> 2
'F#, B' -> 6
'Bb, Bb' -> 13
правила
- Наибольшее расстояние между двумя нотами составляет 13 полутонов.
- Вторая введенная заметка всегда будет выше первой введенной заметки.
- Вы можете принимать входные данные либо как строку, либо как массив / список. Если вы возьмете его за строку, заметки будут разделены запятыми (например
String -> 'A, F'
,Array -> ['A', 'F']
). - Вы можете предположить, что вам всегда будут предоставлены две действительные заметки.
- Шарпы будут обозначаться как,
#
а квартиры будут обозначаться какb
- Ваш код должен поддерживать энгармонические эквиваленты (например, он должен поддерживать как F #, так и Gb)
- Ваш код не должен поддерживать заметки, которые названы с помощью, но могут быть названы без резких или плоских (т.е. вам не нужно поддерживать E # или Cb). Бонусные баллы, если ваш код поддерживает это все же.
- Ваш код не должен поддерживать двойные острые или двойные квартиры.
- Вы можете предположить, что если вы получаете одинаковые ноты или одинаковую высоту звука (например, «Gb, Gb» или «A #, Bb»), вторая не будет точно на одну октаву выше первой.
- Это код гольф, поэтому ответ с наименьшим количеством байтов выигрывает.
Cb
или E#
? А как насчет двойных острых предметов / квартир?
(X, Y]
так, что C к C # - 1 полутон, и C к C - 12 полутонов.
G -> G#
потому что они оба включены.