fundo
Na música ocidental, cada nota musical possui um nome atribuído. Dentro de cada oitava, há doze notas exclusivas na seguinte ordem: "CC # / Db DD # / Eb EFF # / Gb GG # / Ab AA # / Bb B C", onde o C final é uma oitava acima da primeira.
Para saber a diferença entre notas de oitavas diferentes, um número (para esse desafio restrito a um único dígito) é anexado ao final do nome da nota. Assim, C5 é a nota que está uma oitava acima de C4. Bb6 está acima de B5.
Um fato importante é que B5 e C6 são notas próximas umas das outras e que C0 e B9 são as notas mais baixa e mais alta.
Entre duas notas, existe uma distância que é o número de semitons entre elas. Bb4 é um semitom abaixo de B4, que é ele próprio um semitom abaixo de C5. Há doze semitons em uma oitava, então Bb4 está a uma distância de 12 de A # 3, pois está uma oitava acima dela (observe como uma única nota pode ter até dois nomes).
O desafio
Seu desafio é escrever o programa mais curto possível que possa obter uma lista de notas musicais de STDIN e imprimir a lista de alterações de intervalo em STDOUT.
A entrada será uma lista separada por espaços de notas musicais. Cada nota consistirá em uma letra maiúscula AG, um sinal b ou # opcional e um número de um dígito. Você não precisará lidar com E # / Fb ou B # / Cb. Exemplo de entrada:
C4 D4 E4 F4 G4 A4 B4 C5 C4
A saída será uma lista de números inteiros separados por espaço, que representa a distância entre cada nota sucessiva, sempre prefixada com + ou - para mostrar se a nota estava subindo ou descendo em relação à anterior. Sempre haverá um número a menos emitido do que as notas inseridas. Exemplo de saída para a entrada acima:
+2 +2 +1 +2 +2 +2 +1 -12
Mais alguns exemplos de entradas:
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
E suas saídas correspondentes:
-1 +1 -5 +5 +2 -2 -5
+11 +11 +11 +11 +11 +11 +11
+1 -2 +3 -4 +5
Regras e Restrições
O vencedor é determinado pelo número de caracteres no código fonte
Seu programa deve consistir apenas em caracteres ASCII imprimíveis
Você não tem permissão para usar qualquer tipo de função interna relacionada a música ou som
Fora isso, aplicam-se regras de código padrão para golfe
+0
ou-0
ou0
para duas notas idênticas?