Antecedentes
En la música occidental, cada nota musical tiene un nombre asignado. Dentro de cada octava, hay doce notas únicas en el siguiente orden: "CC # / Db DD # / Eb EFF # / Gb GG # / Ab AA # / Bb B C", donde la C final está una octava por encima de la primera.
Para diferenciar entre notas de diferentes octavas, se agrega un número (para este desafío restringido a un solo dígito) al final del nombre de la nota. Por lo tanto, C5 es la nota que está una octava por encima de C4. Bb6 está por encima de B5.
Un hecho importante es que B5 y C6 son notas que están una al lado de la otra, y que C0 y B9 son las notas más bajas y más altas.
Entre dos notas, hay una distancia que es el número de semitonos entre ellas. Bb4 es un semitono debajo de B4, que es en sí mismo un semitono debajo de C5. Hay doce semitonos en una octava, por lo que Bb4 está a una distancia de 12 de A # 3, ya que está una octava por encima (observe cómo una sola nota puede tener hasta dos nombres).
El reto
Su desafío es escribir el programa más corto posible que pueda tomar una lista de notas musicales de STDIN e imprimir la lista de cambios de intervalo en STDOUT.
La entrada será una lista de notas musicales separadas por espacios. Cada nota constará de una letra mayúscula AG, un signo opcional b o # y un número de un solo dígito. No tendrá que lidiar con E # / Fb o B # / Cb. Entrada de ejemplo:
C4 D4 E4 F4 G4 A4 B4 C5 C4
La salida será una lista de enteros separados por espacios que representan la distancia entre cada nota sucesiva, siempre con un prefijo + o - para mostrar si la nota fue ascendente o descendente en relación con la anterior. Siempre habrá un número menos generado que las notas ingresadas. Ejemplo de salida para la entrada anterior:
+2 +2 +1 +2 +2 +2 +1 -12
Algunas entradas de ejemplo más:
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
Y sus salidas correspondientes:
-1 +1 -5 +5 +2 -2 -5
+11 +11 +11 +11 +11 +11 +11
+1 -2 +3 -4 +5
Reglas y restricciones
El ganador está determinado por la cantidad de caracteres en el código fuente
Su programa debe constar solo de caracteres ASCII imprimibles
No está autorizado a utilizar ningún tipo de función integrada relacionada con la música o el sonido.
Aparte de eso, se aplican reglas de golf de código estándar
+0
o-0
o0
por dos notas idénticas?