tło
W muzyce zachodniej każda nuta ma przypisaną nazwę. W każdej oktawie jest dwanaście unikalnych nut w następującej kolejności: „CC # / Db DD # / Eb EFF # / Gb GG # / Ab AA # / Bb B C”, gdzie końcowe C jest o jedną oktawę powyżej pierwszej.
Aby odróżnić nuty różnych oktaw, na końcu nazwy nuty dołączana jest liczba (dla tego wyzwania ograniczona do jednej cyfry). Zatem C5 jest nutą o jedną oktawę powyżej C4. Bb6 jest powyżej B5.
Ważnym faktem jest to, że B5 i C6 to nuty, które są tuż obok siebie, a C0 i B9 to najniższe i najwyższe nuty.
Między dowolnymi dwiema nutami znajduje się odległość, która jest liczbą półtonów między nimi. Bb4 to jeden półton poniżej B4, który sam jest jednym półtonem poniżej C5. W oktawie jest dwanaście półtonów, więc Bb4 to odległość 12 od A # 3, ponieważ jest to oktawa nad nim (zauważ, jak jedna nuta może mieć do dwóch nazw).
Wyzwanie
Twoim wyzwaniem jest napisanie możliwie najkrótszego programu, który może pobrać listę nut z STDIN i wydrukować listę zmian interwałów w STDOUT.
Dane wejściowe będą oddzieloną spacjami listą nut. Każda nuta będzie składać się z dużej litery AG, opcjonalnego znaku b lub # oraz cyfry jednocyfrowej. Nie będziesz musiał radzić sobie z E # / Fb lub B # / Cb. Przykładowe dane wejściowe:
C4 D4 E4 F4 G4 A4 B4 C5 C4
Wyjściem będzie oddzielona spacjami lista liczb całkowitych, które reprezentują odległość między kolejnymi nutami, zawsze poprzedzona znakiem + lub -, aby pokazać, czy notka rosła, czy opadała w stosunku do poprzedniej. Zawsze będzie wypisywana jedna liczba mniejsza niż wprowadzane nuty. Przykładowe dane wyjściowe dla powyższego wejścia:
+2 +2 +1 +2 +2 +2 +1 -12
Kilka innych przykładowych danych wejściowych:
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
I odpowiadające im wyniki:
-1 +1 -5 +5 +2 -2 -5
+11 +11 +11 +11 +11 +11 +11
+1 -2 +3 -4 +5
Zasady i ograniczenia
Zwycięzca zależy od liczby znaków w kodzie źródłowym
Twój program powinien składać się wyłącznie z drukowalnych znaków ASCII
Nie wolno używać żadnych wbudowanych funkcji związanych z muzyką lub dźwiękiem
Poza tym obowiązują standardowe zasady gry w golfa
+0
czy-0
może0
dla dwóch identycznych notatek?