Hintergrund
In der westlichen Musik hat jede einzelne Musiknote einen zugewiesenen Namen. Innerhalb jeder Oktave gibt es zwölf eindeutige Noten in der folgenden Reihenfolge: "CC # / Db DD # / Eb EFF # / Gb GG # / Ab AA # / Bb B C", wobei das letzte C eine Oktave über dem ersten liegt.
Um den Unterschied zwischen Noten unterschiedlicher Oktaven zu erkennen, wird am Ende des Notennamens eine Zahl (für diese Herausforderung auf eine einzelne Ziffer beschränkt) angehängt. Somit ist C5 die Note, die eine Oktave über C4 liegt. Bb6 liegt über B5.
Eine wichtige Tatsache ist, dass B5 und C6 Noten sind, die direkt nebeneinander liegen, und dass C0 und B9 die niedrigsten und höchsten Noten sind.
Zwischen zwei beliebigen Noten befindet sich ein Abstand, der der Anzahl der Halbtöne zwischen ihnen entspricht. Bb4 ist ein Halbton unter B4, der selbst ein Halbton unter C5 ist. Es gibt zwölf Halbtöne in einer Oktave, also ist Bb4 ein Abstand von 12 von A # 3, da es eine Oktave darüber ist (beachten Sie, dass eine einzelne Note bis zu zwei Namen haben kann).
Die Herausforderung
Ihre Herausforderung besteht darin, ein möglichst kurzes Programm zu schreiben, das eine Liste von Musiknoten von STDIN übernehmen und die Liste der Intervalländerungen in STDOUT drucken kann.
Die Eingabe erfolgt durch Leerzeichen getrennte Liste von Musiknoten. Jede Notiz besteht aus einem Großbuchstaben AG, einem optionalen b- oder # -Zeichen und einer einstelligen Zahl. Sie müssen sich nicht mit E # / Fb oder B # / Cb befassen. Beispieleingabe:
C4 D4 E4 F4 G4 A4 B4 C5 C4
Die Ausgabe ist eine durch Leerzeichen getrennte Liste von Ganzzahlen, die den Abstand zwischen jeder aufeinanderfolgenden Note darstellen, wobei immer ein + oder - vorangestellt wird, um anzuzeigen, ob die Note relativ zu der vorhergehenden Note auf- oder absteigend war. Es wird immer eine Nummer weniger ausgegeben als eingegebene Noten. Beispielausgabe für die obige Eingabe:
+2 +2 +1 +2 +2 +2 +1 -12
Einige weitere Beispieleingaben:
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
Und ihre entsprechenden Ausgaben:
-1 +1 -5 +5 +2 -2 -5
+11 +11 +11 +11 +11 +11 +11
+1 -2 +3 -4 +5
Regeln und Einschränkungen
Der Gewinner wird durch die Anzahl der Zeichen im Quellcode bestimmt
Ihr Programm sollte nur aus druckbaren ASCII-Zeichen bestehen
Sie dürfen keine eingebaute Funktion verwenden, die sich auf Musik oder Sound bezieht
Ansonsten gelten die Standard-Code-Golfregeln
+0
oder-0
oder0
für zwei identische Notizen?