Быстрая музыкальная переподготовка:
Клавиатура фортепиано состоит из 88 нот. На каждую октаву есть 12 нот, C, C♯/D♭, D, D♯/E♭, E, F, F♯/G♭, G, G♯/A♭, A, A♯/B♭
и B
. Каждый раз, когда вы нажимаете «C», паттерн повторяется на октаву выше.
Нота однозначно идентифицируется 1) буквой, включая любые острые или плоские элементы, и 2) октавой, которая является числом от 0 до 8. Первые три ноты клавиатуры, A0, A♯/B♭
и B0
. После этого наступает полная хроматическая шкала на октаву 1. C1, C♯1/D♭1, D1, D♯1/E♭1, E1, F1, F♯1/G♭1, G1, G♯1/A♭1, A1, A♯1/B♭1
а B1
. После этого идет полная хроматическая шкала на октавы 2, 3, 4, 5, 6 и 7. Затем последняя нота - это C8
.
Каждая нота соответствует частоте в диапазоне 20–4100 Гц. С A0
началом ровно 27.500 герц, каждая из которых соответствует нота предыдущих времен примечания двенадцатого корень из двух, или примерно 1.059463. Более общая формула:
где n - номер банкноты, где A0 равно 1. (Более подробная информация здесь )
Соревнование
Напишите программу или функцию, которая принимает строку, представляющую заметку, и печатает или возвращает частоту этой заметки. Мы будем использовать знак фунта #
для острого символа (или хэштегом для вас, юношей) и строчную букву b
для плоского символа. Все входные данные будут выглядеть (uppercase letter) + (optional sharp or flat) + (number)
без пробелов. Если ввод находится за пределами диапазона клавиатуры (ниже, чем A0, или выше, чем C8), или имеются недопустимые, пропущенные или лишние символы, это недопустимый ввод, и вам не нужно обрабатывать его. Вы также можете с уверенностью предположить, что вы не получите никаких странных вводов, таких как E # или Cb.
точность
Поскольку бесконечная точность на самом деле невозможна, мы скажем, что все, что находится в пределах одного цента от истинного значения, является приемлемым. Не вдаваясь в лишние детали, цент - это 1200-й корень из двух, или 1.0005777895. Давайте использовать конкретный пример, чтобы сделать его более понятным. Допустим, ваш вклад был А4. Точное значение этого следует отметить 440 Гц. Однажды центовая квартира 440 / 1.0005777895 = 439.7459
. 440 * 1.0005777895 = 440.2542
Следовательно, если резкость цента , любое число, большее 439,7459, но меньшее 440,2542, является достаточно точным для подсчета.
Контрольные примеры
A0 --> 27.500
C4 --> 261.626
F#3 --> 184.997
Bb6 --> 1864.66
A#6 --> 1864.66
A4 --> 440
D9 --> Too high, invalid input.
G0 --> Too low, invalid input.
Fb5 --> Invalid input.
E --> Missing octave, invalid input
b2 --> Lowercase, invalid input
H#4 --> H is not a real note, invalid input.
Имейте в виду, что вам не нужно обрабатывать неверные данные. Если ваша программа делает вид, что они являются реальными входными данными, и выводит значение, которое является приемлемым. Если ваша программа падает, то это также приемлемо. Все, что может случиться, когда вы получаете один. Полный список входов и выходов см. На этой странице
Как обычно, это код-гольф, поэтому применяются стандартные лазейки, и выигрывает кратчайший ответ в байтах.
H
? H
значение B - AFAIK, используется только в немецкоязычных странах. (где B
, кстати, означает Bb.) То, что британцы и ирландцы называют B, называется Si или Ti в Испании и Италии, как в Do Re Mi Fa Sol La Si.
H
используется в Германии, Чехии, Словакии, Польше, Венгрии, Сербии, Дании, Норвегии, Финляндии, Эстонии и Австрии, согласно Википедии . (Я также могу подтвердить это для Финляндии.)