Schnelle musikalische Auffrischung:
Die Klaviertastatur besteht aus 88 Noten. Zu jeder Oktave gibt es 12 Töne C, C♯/D♭, D, D♯/E♭, E, F, F♯/G♭, G, G♯/A♭, A, A♯/B♭
und B
. Jedes Mal, wenn Sie ein 'C' drücken, wird das Pattern eine Oktave höher wiederholt.
Eine Note wird eindeutig identifiziert durch 1) den Buchstaben, einschließlich aller scharfen oder flachen Stellen, und 2) die Oktave, die eine Zahl von 0 bis 8 ist. Die ersten drei Noten der Tastatur sind A0, A♯/B♭
und B0
. Danach folgt die volle chromatische Skala auf Oktave 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
und B1
. Danach folgt eine volle chromatische Tonleiter auf den Oktaven 2, 3, 4, 5, 6 und 7. Dann ist die letzte Note a C8
.
Jede Note entspricht einer Frequenz im Bereich von 20-4100 Hz. Mit A0
genau 27.500 Hertz ist jede entsprechende Note die vorherige Note mal die zwölfte Wurzel von zwei oder ungefähr 1,059463. Eine allgemeinere Formel lautet:
Dabei ist n die Nummer der Note, wobei A0 1 ist. (Weitere Informationen hier )
Die Herausforderung
Schreiben Sie ein Programm oder eine Funktion, die eine Zeichenfolge für eine Note aufnimmt und die Häufigkeit dieser Note ausgibt oder zurückgibt. Wir verwenden ein #
Pfundzeichen für das scharfe Symbol (oder ein Hashtag für Ihre Youngins) und ein Kleinbuchstaben b
für das flache Symbol. Alle Eingaben werden (uppercase letter) + (optional sharp or flat) + (number)
ohne Leerzeichen aussehen . Wenn die Eingabe außerhalb des Tastaturbereichs liegt (niedriger als A0 oder höher als C8) oder ungültige, fehlende oder zusätzliche Zeichen vorhanden sind, handelt es sich um eine ungültige Eingabe, die Sie nicht verarbeiten müssen. Sie können auch davon ausgehen, dass Sie keine seltsamen Eingaben wie E # oder Cb erhalten.
Präzision
Da unendliche Präzision nicht wirklich möglich ist, werden wir sagen, dass alles innerhalb eines Cent des wahren Wertes akzeptabel ist. Ohne ins Detail zu gehen, ist ein Cent die 1200. Wurzel von zwei oder 1.0005777895. Lassen Sie uns ein konkretes Beispiel verwenden, um es klarer zu machen. Angenommen, Ihre Eingabe war A4. Der genaue Wert dieser Note beträgt 440 Hz. Einmal Cent Flat ist 440 / 1.0005777895 = 439.7459
. Sobald Cent 440 * 1.0005777895 = 440.2542
Sharp ist, ist jede Zahl größer als 439,7459, aber kleiner als 440,2542 genau genug, um zu zählen.
Testfälle
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.
Denken Sie daran, dass Sie nicht mit ungültigen Eingaben umgehen müssen. Wenn Ihr Programm vorgibt, echte Eingaben zu sein, und einen Wert ausgibt, ist dies akzeptabel. Wenn dein Programm abstürzt, ist das auch akzeptabel. Alles kann passieren, wenn du eins bekommst. Eine vollständige Liste der Ein- und Ausgänge finden Sie auf dieser Seite
Wie üblich ist dies Codegolf, so dass Standardlücken gelten und die kürzeste Antwort in Bytes gewinnt.
H
? H
Bedeutung B ist AFAIK nur im deutschsprachigen Raum verwendet. (Wo B
übrigens Bb bedeutet.) Was die Briten und Iren B nennen, heißt in Spanien und Italien Si oder Ti, wie in Do Re Mi Fa Sol La Si.
H
wird laut Wikipedia in Deutschland, Tschechien, der Slowakei, Polen, Ungarn, Serbien, Dänemark, Norwegen, Finnland, Estland und Österreich verwendet . (Ich kann es auch für Finnland selbst bestätigen.)