Багато людей люблять грати музику для розваги та розваг. На жаль, музика буває досить складною. Ось чому ти тут!
Завдання
Ваша робота - зробити читання музики набагато простішим для тих, хто бореться з нею. Вам потрібно написати програму або функцію, яка приймає музичний персонал, і виводить назви нот, написаних на цьому персоналі.
Персонал, ключик та нотатки
Музичний колектив , або нотний стан, п'ять горизонтальних ліній, між ними , які є чотири пробілу. Кожен рядок або пробіл представляє різну ноту (крок), залежно від ключа.
Вибирати можна кілька різних музичних ключів, але ми зараз матимемо справу лише з одним: високим ключем . На високому ключі ноти представлені на штаті таким чином:
Лінії F ---------- D ---------- Б ---------- G ---------- E ----------
Пробіли ---------- Е ---------- С ---------- А ---------- Ж ----------
Форматування вводу
Введення подається у вигляді одного рядка таким чином:
--------------- --------------- --------------- --------------- ---------------
П’ять рядків і чотири проміжки персоналу побудовані з дев'яти рядів символів. Рядки персоналу побудовані з -
(дефісу) символів, а простори з (пробіл). Кожен рядок відокремлений від наступного символом нового рядка, наприклад:
-----\n \n-----\n \n-----\n \n-----\n \n-----\n
Рядки мають довільну довжину (до розумної кількості, яку може обробляти ваша програма програмування), і кожен рядок має таку ж довжину в символах, що й інші. Також зауважте, що рядки завжди матимуть довжину, яка ділиться на три (щоб відповідати шаблону однієї ноти, після чого два стовпчики без примітки).
Примітки розміщуються на цьому персоналі шляхом заміни відповідного -
або символу на
o
. Нотатки також можуть бути підняті (різкими) або опущені (плоскі) по висоті на півтоні (приблизно половина різниці частот між нотою та суміжними нотами). Це буде представлено символами #
та b
, відповідно, замість o
. Кожна примітка буде відокремлена від наступної рівно двома -
символами, і перша нота завжди буде відбуватися в першій "колонці" -
та (пробілі) символів.
Виводячи назви нот, у Вашій програмі завжди слід використовувати великі літери ( A B C D E F G
), що відповідають примітці, наданій персоналу. Для гострих ( #
) та плоских ( b
) нотаток ваша програма повинна додавати #
та b
, відповідно, лист, відповідний примітці. Для природної ноти, яка не є гострою або плоскою, замість неї слід додати (пробіл).
Приклад
Вхід:
--------------------- о-- о --------------- o -------- о --------- b -------------- о --- o -------------------- о ------------------------
* зауважте, що "порожній простір" у цьому прикладі є насправді (пробіл).
У цьому випадку (проста F основна шкала) ваша програма повинна вивести це:
FGA Bb CDEF
Зверніть увагу, що інтервал між символами виводу повинен бути точно таким, як показано вище, щоб правильно відповідати приміткам персоналу. Між усіма назвами нот є два (пробільні) символи, крім між
Bb
і C
. b
Тут замінює собою одну з (пропуск) символів.
Інший приклад
введення:
------------------------ о ------------------ # ----- # ------------ o ----------- о ------ # ----------------- # o -----------------------
Вихід:
E F# G# A B C# D# E
Ще один приклад удачі
:
--------------------- оооо --------------------- о --------------------- --------------- о - о-- ---------------------
Вихід:
E E E C E G G
Правила
- Примітки надаватимуться лише в п'яти лінійках від E плоскої до F різкої (крім проблем, див. Нижче)
- Будь-яка нота може бути різкою або плоскою, не лише ті, що часто зустрічаються в музиці (наприклад, незважаючи на те, що B # насправді просто відтворюється як C в реальності, B # все ще може виникати на вводі)
- Ви можете припустити, що на 3 стовпчики буде рівно одна нота (тож не буде жодних акордів чи нічого подібного, а також немає спокою)
- Ви можете припустити, що за останньою нотаткою будуть слідувати дві колонки без приміток
- Ви можете припустити, що навіть за останньою лінією персоналу буде супроводжуватися один символ нового рядка
- Введення даних слід брати з STDIN (або мовного еквівалента) або як функціональний параметр
- Вихід повинен бути STDOUT (або еквівалентним мовою) або як результат повернення, якщо ваша програма є функцією
- Стандартні лазівки та вбудовані дозволені! Музика - це експериментувати та грати. Вперед і розважайтеся своєю мовою (хоча визнайте, що використання лазівки може не дати найцікавішої програми)
- Це код-гольф , тому найкоротша програма в байтах виграє
Бонусні виклики
- -10%, якщо ваша програма також може успішно обробити простір над верхньою лінією персоналу (G, G #, Gb).
- -10%, якщо ваша програма також може успішно обробити простір під нижньою лінією персоналу (D, D #, Db)
- У цих випадках ваша програма сприймає додатковий рядок на початку та в кінці; до цих рядків слід ставитися точно так само, як до інших дев’яти рядів