Фон
У західній музиці кожній музичній ноті присвоєне ім’я. У межах кожної октави є дванадцять унікальних нотаток у такому порядку: "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
два однакових нот?