Avec deux noms de notes, vous devez écrire un programme qui détermine si l’intervalle formé par ces deux notes est consonant ou dissonant.
introduction
Dans la musique occidentale, il n'y a que 12 tonalités "différentes". Leurs noms, classés du plus bas au plus élevé, sont les suivants C, C#, D, D#, E, F, F#, G, G#, A, A#, B
:. La séquence est cyclique, c’est-à-dire qu’elle continue avec une autre C
après le B
, infiniment.
La distance entre deux tons est appelée un intervalle . L’intervalle entre deux notes adjacentes dans la série ci-dessus (par exemple C — C#
ou E — F
) est appelé un demi - ton . L'intervalle entre les notes les plus distantes est défini comme le nombre de demi-tons nécessaires pour aller du premier au second (tout en encerclant éventuellement la séquence). Quelques exemples: D to E
= 2 demi-tons, C to G
= 7 demi-tons, B to D#
= 4 demi-tons (ceci encapsule la séquence). 1
Maintenant, ces intervalles sont divisés en deux catégories: consonne (qui sonne agréablement si vous jouez les deux notes en même temps) et dissonante (pas tellement).
Définissons les intervalles de consonne comme suit: 0, 3, 4, 5, 7, 8 et 9 demi-tons.
Le reste est dissonant, à savoir: 1, 2, 6, 10 et 11 demi-tons.
Le défi
Ecrivez un "programme" (au sens large du terme: une fonction est parfaitement OK) pour effectuer les opérations suivantes:
Prenez deux noms de notes (des chaînes de la séquence ci-dessus) comme entrée. Vous pouvez les prendre à votre guise (depuis stdin, comme arguments, séparés par tout ce que vous voulez, vous pouvez même les prendre comme une liste de caractères (par exemple
["C","#"]
). Cependant, vous ne pouvez attribuer aucun autre nom aux notes (en particulier vous. peut ne pas les numéroter de 0 à 11 et utiliser les chiffres).Pour vous les geeks de la musique, les notes seront spécifiées sans l'octave. Dans ce cas également, l’ordre dans lequel les notes arrivent et les notes les plus basses et les plus importantes importe peu. Enfin, vous n'avez pas besoin de gérer des noms qui ne figurent pas dans la liste ci-dessus. Aucune autre harmonie comme
E#
, pas de bémol, de double altération, etc.Choisissez deux valeurs différentes. Votre programme doit sortir l’une d’entre elles chaque fois que l’intervalle formé par les deux notes de l’entrée est consonne, et l’autre si elles ne le sont pas. (Pourrait être
True
etFalse
, mais même π et e si vous voulez :))Ceci est un code-golf. Le programme le plus court en octets dans chaque langue gagne. S'amuser!
Exemples et cas de test
Note 1 Note 2 Output Interval [semitones]
C D Dissonant 2
A# A# Consonant 0
G D Consonant 7 (wraparound)
D# A Dissonant 6
F E Dissonant 11
A C Consonant 3
Je n'en ajoute pas davantage car il n'y a pas de cas particulièrement perfides dans ce domaine.
C'est un de mes premiers défis, toute critique constructive est donc la bienvenue :—). Si vous trouvez l'explication théorique bâclée, n'hésitez pas à poser des questions. Enfin, s'il vous plaît, ne me dites pas que c'est dupe de ceci ou de ceci . J'ai fait en sorte que ce ne soit pas. (Ce dernier est assez similaire mais plus complexe. Je pensais que relever un défi un peu plus simple faciliterait l'adhésion des gens.)
1 : J'ai essayé de simplifier cette explication dans la mesure du possible. Il y a beaucoup plus de théorie autour des intervalles. S'il vous plaît ne me reproche pas de l'avoir laissé.