Contexte
Dans la musique occidentale, chaque note de musique a un nom attribué. Dans chaque octave, il y a douze notes uniques dans l'ordre suivant: "CC # / Db DD # / Eb EFF # / Gb GG # / Ab AA # / Bb B C", où le do final est une octave au-dessus de la première.
Pour faire la différence entre les notes d'octaves différentes, un numéro (pour ce défi limité à un seul chiffre) est ajouté à la fin du nom de la note. Ainsi, C5 est la note qui est une octave au-dessus de C4. Bb6 est supérieur à B5.
Un fait important est que B5 et C6 sont des notes qui sont côte à côte et que C0 et B9 sont les notes les plus basses et les plus hautes.
Entre deux notes, il y a une distance qui est le nombre de demi-tons entre elles. Bb4 est un demi-ton en dessous de B4, qui est lui-même un demi-ton en dessous de C5. Il y a douze demi-tons dans une octave, donc Bb4 est à une distance de 12 de A # 3 car c'est une octave au-dessus (remarquez comment une seule note peut avoir jusqu'à deux noms).
Le défi
Votre défi est d'écrire le programme le plus court possible qui peut prendre une liste de notes de musique de STDIN et imprimer la liste des changements d'intervalle dans STDOUT.
L'entrée sera une liste de notes de musique séparées par des espaces. Chaque note se compose d'une lettre majuscule AG, d'un signe b ou # facultatif et d'un numéro à un chiffre. Vous n'aurez pas à gérer E # / Fb ou B # / Cb. Exemple d'entrée:
C4 D4 E4 F4 G4 A4 B4 C5 C4
La sortie sera une liste d'entiers séparés par des espaces qui représentent la distance entre chaque note successive, toujours préfixée par un + ou - pour montrer si la note était ascendante ou descendante par rapport à la précédente. Il y aura toujours un nombre de moins émis que les notes entrées. Exemple de sortie pour l'entrée ci-dessus:
+2 +2 +1 +2 +2 +2 +1 -12
Quelques exemples d'entrées supplémentaires:
E5 D#5 E5 B4 E5 F#5 E5 B4
C0 B0 Bb1 A2 G#3 G4 F#5 F6
G4 Ab4 Gb4 A4 F4 A#4
Et leurs sorties correspondantes:
-1 +1 -5 +5 +2 -2 -5
+11 +11 +11 +11 +11 +11 +11
+1 -2 +3 -4 +5
Règles et restrictions
Le gagnant est déterminé par le nombre de caractères dans le code source
Votre programme ne doit comprendre que des caractères ASCII imprimables
Vous n'êtes pas autorisé à utiliser toute sorte de fonction intégrée liée à la musique ou au son
Autre que cela, les règles de golf de code standard s'appliquent
+0
ou-0
ou0
pour deux notes identiques?