Nous sommes en 930 et l'Église grégorienne a un problème. Ils ont des milliers de pages de musique de chant, mais le problème est que toutes les partitions ont été simplement jetées sur une pile au lieu d'avoir un véritable système d'organisation:
Image de l'utilisateur gamerprinter à la Cartographers 'Guild .
L'Église a besoin d'organiser toutes les partitions, alors ils ont engagé un ingénieur logiciel médiéval pour écrire un programme pour l'organiser pour eux. Vous êtes l'ingénieur logiciel embauché. Cependant, le processus de compilation à l'époque médiévale implique que le programme soit écrit sur papier par une équipe de scribes bibliques lents. Pour réduire le temps nécessaire à l'équipe de scribes pour compiler votre code, vous devez rendre le programme aussi petit que possible.
L'Église veut que la musique de chant soit organisée en fonction de l'échelle musicale dans laquelle ils sont écrits. Toute la musique de chant de l'Église est écrite en échelles doriennes . Étant donné les notes d'un certain morceau de musique, votre programme affichera l'échelle dorienne dans laquelle il se trouve. Ici, je vais expliquer exactement ce qu'est une échelle dorienne. Si vous le savez déjà, vous pouvez ignorer cette section.
Il y a 12 notes possibles dans n'importe quelle mélodie. Les voici dans l'ordre:
C C# D D# E F F# G G# A A# B
Un demi-ton (représenté à l'aide de a S
) incrémente d'un pas vers la droite, s'enchaînant (donc un demi-ton à partir de B serait de retour à C). Un ton (représenté par un T
) est deux demi-tons. Par exemple, un demi-ton de F # serait G. Un ton de F # serait G #.
Pour créer une échelle dorienne, nous partons de n'importe quelle note de la liste, puis montons dans le modèle suivant, en listant les notes que nous rencontrons:
T, S, T, T, T, S
Un exemple. Je pars de A. Les notes de ma gamme Dorian deviennent:
A
B (up a tone)
C (up a semitone)
D (up a tone)
E (up a tone)
F# (up a tone)
G (up a semitone)
L'échelle a les notes A, B, C, D, E, F # et G. Parce que je partais de A, nous appellerons cela l' échelle Dorian en A . Il y a donc 12 échelles doriennes différentes, chacune nommée d'après la note à partir de laquelle elle est partie. Chacun d'eux utilise le même modèle de tons et de demi-tons, en commençant simplement par une position différente. Si mon explication n'est pas cohérente, vous pouvez également consulter Wikipedia .
L'entrée du programme peut être donnée à partir de ce qui est approprié pour votre programme (par exemple STDIN, argument de ligne de commande, raw_input()
). Il peut ne pas être pré-initialisé dans une variable. L'entrée sera une liste de notes séparées par des virgules, représentant la mélodie de la pièce. Il peut y avoir des notes répétées. Il y aura toujours suffisamment de notes différentes dans l'entrée pour pouvoir déduire de manière décisive l'échelle de la pièce. Un exemple d'entrée:
B,B,D,E,D,B,A,G#,A,G#,E,D,F#,E,F#,E,F#,G#,A
La sortie du programme doit être la chaîne Dorian scale in X
, où X est la note de départ de la gamme. La sortie de l'exemple d'entrée:
Dorian scale in B
En comparant cela avec l'échelle dorienne en B ( B C# D E F# G# A
), nous voyons que toutes les notes de la mélodie sont dans cette échelle. La note C # n'est pas utilisée dans ce cas. Cependant, il y a suffisamment de notes pour identifier sans ambiguïté B Dorian comme la clé correcte. Aucune autre gamme dorienne ne convient, car quelle que soit la gamme que nous essayons, il y a toujours au moins une note de la mélodie qui n'appartient pas à la gamme.
Il s'agit du code golf, donc l'entrée avec le plus petit nombre de caractères l'emporte. Demandez dans les commentaires si vous avez des questions.