Фон
В западной музыке каждой музыкальной ноте присвоено имя. Внутри каждой октавы есть двенадцать уникальных нот в следующем порядке: «CC # / Db DD # / Eb EFF # / Gb GG # / Ab AA # / Bb B C», где конечное значение C на одну октаву выше первого.
Чтобы определить разницу между нотами разных октав, к концу имени ноты добавляется число (для этой задачи, ограниченное одной цифрой). Таким образом, C5 - это нота, которая на одну октаву выше C4. Bb6 выше B5.
Важным фактом является то, что B5 и C6 являются нотами, которые находятся рядом друг с другом, и что C0 и B9 являются самыми низкими и самыми высокими нотами.
Между любыми двумя нотами есть расстояние, которое является количеством полутонов между ними. Bb4 - это один полутон ниже B4, который сам на полутон ниже C5. В октаве двенадцать полутонов, поэтому Bb4 на расстоянии 12 от A # 3, так как он выше октавы (обратите внимание, что одна нота может иметь до двух имен).
Соревнование
Ваша задача - написать максимально короткую программу, которая может взять список музыкальных нот из STDIN и распечатать список интервальных изменений в STDOUT.
Ввод будет разделенный пробелами список музыкальных нот. Каждая заметка будет состоять из заглавной буквы AG, необязательного знака b или # и однозначного числа. Вам не придется иметь дело с E # / Fb или B # / Cb. Пример ввода:
C4 D4 E4 F4 G4 A4 B4 C5 C4
Выходными данными будет список целых чисел, разделенных пробелами, которые представляют расстояние между каждой последовательной заметкой, всегда с префиксом + или -, чтобы показать, была ли заметка восходящей или нисходящей относительно предыдущей. Всегда будет выводиться на один номер меньше, чем вводимые заметки. Пример вывода для вышеуказанного ввода:
+2 +2 +1 +2 +2 +2 +1 -12
Еще несколько примеров ввода:
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
И их соответствующие выводы:
-1 +1 -5 +5 +2 -2 -5
+11 +11 +11 +11 +11 +11 +11
+1 -2 +3 -4 +5
Правила и ограничения
Победитель определяется по количеству символов в исходном коде
Ваша программа должна состоять только из печатных символов ASCII
Вам не разрешается использовать какие-либо встроенные функции, связанные с музыкой или звуком.
Кроме этого, применяются стандартные правила игры в гольф.
+0
или-0
или0
для двух одинаковых заметок?