Rafraîchissement musical rapide:
Le clavier de piano se compose de 88 notes. Sur chaque octave, il y a 12 notes, C, C♯/D♭, D, D♯/E♭, E, F, F♯/G♭, G, G♯/A♭, A, A♯/B♭
et B
. Chaque fois que vous frappez un «C», le motif se répète une octave plus haut.
Une note est identifiée de manière unique par 1) la lettre, y compris les aigus ou plats, et 2) l'octave, qui est un nombre compris entre 0 et 8. Les trois premières notes du clavier sont A0, A♯/B♭
et B0
. Après cela vient la pleine échelle chromatique sur les octaves 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
et B1
. Après cela vient une gamme chromatique complète sur les octaves 2, 3, 4, 5, 6 et 7. Ensuite, la dernière note est a C8
.
Chaque note correspond à une fréquence dans la gamme 20-4100 Hz. Avec un A0
démarrage à exactement 27,500 hertz, chaque note correspondante est la note précédente multipliée par la douzième racine de deux, soit environ 1,059463. Une formule plus générale est la suivante:
où n est le numéro de la note, A0 étant 1. (Plus d'informations ici )
Le défi
Écrivez un programme ou une fonction qui prend une chaîne représentant une note et imprime ou renvoie la fréquence de cette note. Nous utiliserons un signe #
dièse pour le symbole pointu (ou un hashtag pour vous les jeunes) et un minuscule b
pour le symbole plat. Toutes les entrées ressembleront (uppercase letter) + (optional sharp or flat) + (number)
sans espace blanc. Si l'entrée est en dehors de la plage du clavier (inférieure à A0 ou supérieure à C8), ou s'il y a des caractères non valides, manquants ou supplémentaires, il s'agit d'une entrée non valide et vous n'avez pas à la gérer. Vous pouvez également supposer en toute sécurité que vous n'obtiendrez pas d'entrées étranges telles que E # ou Cb.
Précision
Comme une précision infinie n'est pas vraiment possible, nous dirons que tout ce qui se trouve à moins d' un cent de la valeur réelle est acceptable. Sans entrer dans les détails, un cent est la 1200e racine de deux, ou 1.0005777895. Prenons un exemple concret pour le rendre plus clair. Disons que votre entrée était A4. La valeur exacte de cette note est de 440 Hz. Une fois que cent est plat 440 / 1.0005777895 = 439.7459
. Une fois que cent est net 440 * 1.0005777895 = 440.2542
, tout nombre supérieur à 439.7459 mais inférieur à 440.2542 est suffisamment précis pour compter.
Cas de test
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.
Gardez à l'esprit que vous n'avez pas à gérer les entrées non valides. Si votre programme prétend qu'il s'agit de véritables entrées et affiche une valeur, cela est acceptable. Si votre programme plante, c'est également acceptable. Tout peut arriver quand vous en avez un. Pour la liste complète des entrées et sorties, voir cette page
Comme d'habitude, il s'agit de code-golf, donc les lacunes standard s'appliquent et la réponse la plus courte en octets l'emporte.
H
? H
ce qui signifie que B est AFAIK uniquement utilisé dans les pays germanophones. (où B
signifie Bb au fait.) Ce que les Britanniques et les Irlandais appellent B est appelé Si ou Ti en Espagne et en Italie, comme dans Do Re Mi Fa Sol La Si.
H
est utilisé en Allemagne, en République tchèque, en Slovaquie, en Pologne, en Hongrie, en Serbie, au Danemark, en Norvège, en Finlande, en Estonie et en Autriche, selon Wikipedia . (Je peux également le confirmer pour la Finlande moi-même.)