Szybkie odświeżanie muzyki:
Klawiatura fortepianowa składa się z 88 nut. W każdej oktawie jest 12 nut C, C♯/D♭, D, D♯/E♭, E, F, F♯/G♭, G, G♯/A♭, A, A♯/B♭
i B
. Za każdym razem, gdy naciśniesz „C”, wzór powtarza się o oktawę wyżej.
Nuta jest jednoznacznie identyfikowana przez 1) literę, w tym wszelkie ostre i płaskie, oraz 2) oktawę, która jest liczbą od 0 do 8. Pierwsze trzy nuty klawiatury to A0, A♯/B♭
i B0
. Potem pojawia się pełna skala chromatyczna na oktawie 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
i B1
. Potem pojawia się pełna skala chromatyczna na oktawach 2, 3, 4, 5, 6 i 7. Następnie ostatnia nuta to C8
.
Każda nuta odpowiada częstotliwości w zakresie 20–4100 Hz. Z A0
rozpoczęciem dokładnie 27.500 herców, z których każda odpowiada nuta jest wcześniejsze czasy note dwunasty pierwiastek z dwóch, lub około 1.059463. Bardziej ogólna formuła to:
gdzie n jest numerem nuty, przy czym A0 to 1. (Więcej informacji tutaj )
Wyzwanie
Napisz program lub funkcję, która pobiera ciąg reprezentujący notatkę i wypisuje lub zwraca częstotliwość tej notatki. Użyjemy znaku funta #
dla ostrego symbolu (lub hashtagu dla was młodych) i małych liter b
dla płaskiego symbolu. Wszystkie dane wejściowe będą wyglądały jak (uppercase letter) + (optional sharp or flat) + (number)
bez białych znaków. Jeśli dane wejściowe znajdują się poza zakresem klawiatury (niższe niż A0 lub wyższe niż C8) lub występują nieprawidłowe, brakujące lub dodatkowe znaki, jest to nieprawidłowe wejście i nie trzeba go obsługiwać. Możesz również bezpiecznie założyć, że nie otrzymasz żadnych dziwnych danych wejściowych, takich jak E # lub Cb.
Precyzja
Ponieważ nieskończona precyzja nie jest tak naprawdę możliwa, powiemy, że wszystko w granicach jednego centa prawdziwej wartości jest dopuszczalne. Bez wchodzenia w szczegóły, cent jest 1200-tym pierwiastkiem z dwóch lub 1.0005777895. Użyjmy konkretnego przykładu, aby był bardziej przejrzysty. Powiedzmy, że twój wkład to A4. Dokładna wartość tej noty wynosi 440 Hz. Kiedy cent jest płaski 440 / 1.0005777895 = 439.7459
. Gdy więc cent jest ostry 440 * 1.0005777895 = 440.2542
, każda liczba większa niż 439,7459, ale mniejsza niż 440,2542, jest wystarczająco precyzyjna, aby liczyć.
Przypadki testowe
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.
Pamiętaj, że nie musisz obsługiwać nieprawidłowych danych wejściowych. Jeśli twój program udaje, że są rzeczywistymi danymi wejściowymi i wypisuje wartość, jest to do przyjęcia. Jeśli Twój program ulegnie awarii, jest to również dopuszczalne. Wszystko może się zdarzyć, gdy je dostaniesz. Pełna lista wejść i wyjść znajduje się na tej stronie
Jak zwykle jest to gra w golfa, więc obowiązują standardowe luki i wygrywa najkrótsza odpowiedź w bajtach.
H
? H
co oznacza, że B jest AFAIK używanym tylko w krajach niemieckojęzycznych. (gdzie przy okazji B
oznacza Bb.) To, co Brytyjczycy i Irlandczycy nazywają B, nazywa się Si lub Ti w Hiszpanii i we Włoszech, jak w Do Re Mi Fa Sol La Si.
H
jest używany w Niemczech, Czechach, Słowacji, Polsce, na Węgrzech, w Serbii, Danii, Norwegii, Finlandii, Estonii i Austrii, zgodnie z Wikipedią . (Mogę to również potwierdzić dla Finlandii.)