Копаючись у глибині темп-папки, ви знаходите кілька композицій для фортепіано. На жаль, ці композиції були написані лише з назвами нот та термінами, і ви маєте доступ лише до текстового терміналу. Тому ваше завдання - написати програму для відображення композицій як мистецтва ASCII.
Вхідні дані
Ваша програма повинна прийняти два рядки як вхідні дані. Перший рядок буде представляти ноти вищого персоналу (з високим ключем), а другий рядок буде представляти ноти нижнього персоналу.
Нотатки будуть передані в науковій позначці . Нотатки вищого персоналу завжди будуть між C4
і C6
включно. Примітки нижнього персоналу завжди будуть між C2
і C4
включно.
Кожна нота буде поставлятися з тривалістю, яка буде один з: 1
, 2
, 4
, 8
. Вони являють собою цілу ноту (напівкорова), половину ноти (мінімум), чверть ноти (гачком) і восьму ноту (тремтіння) відповідно.
Примітки будь-якої іншої тривалості ніколи не з’являться у вхідних даних.
Як розділити нотатку та тривалість, і як кожна нота відокремлена від інших нотаток у введенні, залежить від вашого розсуду. Далі наведено зразок даних для вищого персоналу:
E4/4 A4/8 C#5/8 E5/2
Тут нотатки розділені пробілом, а тривалість відокремлена від ноти прямою косою рисою. Ці деліметри не зафіксовані, і ви можете змінити їх або взагалі опустити.
Ви можете припустити, що в кожному персоналі є хоча б одна записка. На вході немає залишків.
Вихідні дані
Ваша програма полягає в тому, щоб виводити бал як ASCII мистецтво, дотримуючись наступних описів.
Ключки повинні бути першим, що знаходиться зліва від вашого виводу (відстань між двома кришками не слід змінювати):
^
| |
------|/----
/
-----/|-----
/ |
---/--__----
| / \
---\-\|-|---
\ | /
------|-----
|
\_/
----___-----
/ \ |
---\---|----
| |
-------/----
/
-----/------
------------
Стебло нота (вертикальна лінія поруч із колом) має вказувати вгору, якщо замітка розташована нижче середньої лінії штату. Вона повинна спрямовуватися вниз, якщо записка знаходиться над середньою лінією персоналу. Якщо нота знаходиться на середній лінії, то стебло може вказувати в будь-якому напрямку. (Єдиний виняток з цього - бонус і виникає при підключенні восьмих нот, описаних далі). Стебло повинно починатися на лінії над / під колом і бути 6
високими лініями.
Усі типи нот, крім цілих нот, мають стебла. Прапор восьмої ноти представлений двома передніми нахилами на різних лініях (див. Приклад приміток нижче).
Заповнена голова ноти (для чверті та восьмої ноти) представлена символом (@)
. Порожня голова нота (для половини та цілих нот) представлена символом ( )
.
Аварійні випадки (гострики, квартири, натурали) повинні розміщуватися так, як показано в примітках прикладу, з точно одним символом між правою стороною випадкової та лівою стороною голови ноти.
Рядки книжок повинні використовуватися, коли це необхідно, і повинні бути 7
символами довжиною, зосередженими навколо голови ноти.
Кожна нота повинна містити 12
символи.
Приклад приміток:
|_
|_| ( )
| |------
|
------------ ---------|-- ------------ ------------ ------------
|
------------ ---------|-- ---|-------- ------------ ------------
(@) _|_|_ | |_
-----|------ _|_|_-( )--- ---|/-(@)--- ------------ ---------|\-
| | | | | \
-----|------ ------------ -----|------ ------------ ---------|--
| | |
-----|------ ------------ -----|------ ------------ ---------|--
| | / |
|/ --(@)--
quarter note half note eighth note whole note eighth note
sharped flatted natural
Після 12-символьної нотатки залиште 2 * 12 - 12 = 12
символи порожніми ( або
-
залежно від рядка), якщо нота - чверть нота. Якщо нотатка наполовину нота, залиште 4 * 12 - 12 = 36
символи порожніми. Якщо нотатка - ціла нотатка, залиште 8 * 12 - 12 = 84
символи порожніми. Не додайте зайвих символів для восьмих нот.
В кінці кожного виміру (96 символів після ключа або рядка) виведіть рядок. Це робиться шляхом опускання кожного символу між верхніми та найнижчими рядками (включно) та заміною на
|
і -
на +
. (Див. Приклад результату внизу питання).
В кінці твору виведіть музичний кінець, вивівши 3 рядки рядка поспіль, але з пробілом між першим і другим. Це є:
+-++
| ||
+-++
| ||
. ..
. ..
Зауважте, що гострота, квартири та природні речовини тривають до кінця заходу. Природний знак слід використовувати лише для того, щоб скасувати різкий або плоский, використаний раніше в тій же мірі.
Для цього завдання різкості, квартири та натурали впливають на ноту лише в одній октаві та в одній ключі (різка на A5 не призводить до різкості A4, а квартира на C4 у верхньому штаті не викликає C4 в нижній частині штанги, що має бути плоскою).
Інформація лише для бонусу
Бонус передбачає належне підключення восьмих нот.
Якщо є дві поспіль восьмі ноти, вирівняні до чверті бит ноти (іншими словами, кількість символів перед першою восьмою нотою кратне 24), дві восьмі ноти мають бути з'єднані.
Нехай нота А - це відомість, найдалі від середини штату. Якщо обидві ноти на тій же відстані від середини, або нота може бути примітка . Нехай інший ноту примітка B .
Напрямок та стебла повинна бути напрямком стовбура ноти A .
Стебло однієї ноти повинно бути 6
високими лініями (як це стосується стебел взагалі), а стебло іншої ноти слід подовжити до кінця стебла іншої ноти.
Стебла повинні бути з’єднані з _
.
Приклад з'єднаних восьмих приміток:
___________
| |
| |
| |
| | --(@)--
| | | |
------------------------ ---|_----|-----------|-- -----|------------------
|/ (@) | | |_
------------------------ ---------------------|-- -----|--------|_|-(@)---
(@) _|_|_ | | ||
-----|------_|_|_-(@)--- ---------------------|-- -----|-----------|------
| | | | | | |
-----|-----------|------ ---------------------|-- -----|-----------|------
| | | | |
-----|-----------|------ ------------------(@)--- -----|___________|------
| |
|___________|
Приклад введення та виведення
Вхід :
A#4/4 G#4/4 F#4/2 A#4/4 G#4/4 F#4/2 F#4/8 F#4/8 F#4/8 F#4/8 G#4/8 G#4/8 G#4/8 G#4/8 A#4/4 G#4/4 F#4/2
A#3/4 G#3/4 F#3/2 A#3/4 G#3/4 F#3/2 F#3/2 G#3/2 F#3/4 E#3/4 F#3/2
Вихід :
^
| | | | |
------|/-------------|-----------------------|--------------------------------------------------------------+---------|-----------------------|--------------------------------------------------------------+----------___________-------------___________------------|\----------|\----------|\----------|\-+---------|-----------------------|--------------------------------------------------------------+-++
/ | | | | | | | | | | | | | \ | \ | \ | \| | | | | ||
-----/|--------------|-----------------------|-----------------------|--------------------------------------+---------|-----------------------|-----------------------|--------------------------------------+---------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|--+---------|-----------------------|-----------------------|--------------------------------------+-++
/ | | | | | | | | | | | | | | | | | | | | | | ||
---/--__----_|_|_----|-----------------------|-----------------------|--------------------------------------+_|_|_----|-----------------------|-----------------------|--------------------------------------+---------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|--+_|_|_----|-----------------------|-----------------------|--------------------------------------+-++
| / \ _|_|_ (@) _|_|_ | | |_|_|_ (@) _|_|_ | | | | | | | _|_|_ | | | | |_|_|_ (@) _|_|_ | | | ||
---\-\|-|----|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+-|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+_|_|_----|-----------|-----------|-----------|--_|_|_-(@)---------(@)---------(@)---------(@)---+-|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+-++
\ | / | | _|_|_ ( ) | | | _|_|_ ( ) |_|_|_ (@) (@) (@) (@) | | | | | _|_|_ ( ) | ||
------|------------------------------------------------------|-|--------------------------------------------+-------------------------------------------------|-|--------------------------------------------+-|-|--------------------------------------------------------------------------------------------+-------------------------------------------------|-|--------------------------------------------+-++
| | | | | ||
\_/ | | | | ||
| | | | ||
| | | | ||
| | | | ||
| | | | ||
_|_|_ |_|_|_ | | | ||
----___-----_|_|_-(@)---------------_|_|_-------------------------------------------------------------------+_|_|_-(@)---------------_|_|_-------------------------------------------------------------------+------------------------------------------------_|_|_-------------------------------------------+------------------------------------------------------------------------------------------------+-++
/ \ | | | | _|_|_ (@) _|_|_ | | | | _|_|_ (@) _|_|_ |_|_|_ _|_|_ ( ) |_|_|_ | ||
---\---|---------|-------------------|-|-|------------------_|_|_-( )---------------------------------------+-----|-------------------|-|-|------------------_|_|_-( )---------------------------------------+_|_|_-( )----------------------------------------|-|-|------------------------------------------+_|_|_ (@)---------------_|_|_-------------------------( )---------------------------------------+-++
| | | | | | | | | | | | | | | | | | | | | | _|_|_ (@) | | ||
-------/---------|-----------------------|-----------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-----|-----------------------------------------------|------------------------------------------+-----|-------------------|-|-|-----------------------|------------------------------------------+-++
/ | | | | | | | | | | | | | | | ||
-----/-----------|-----------------------|-----------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-----|-----------------------------------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-++
| | | | | | | | | | | | | ||
-----------------------------------------------------------------|------------------------------------------+-----------------------------------------------------|------------------------------------------+-----|------------------------------------------------------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-++
|
Для демонстрації в третьому заході F#
восьмі ноти пов'язані, тоді як G#
восьма нота - ні. Ваша програма повинна або підключати восьмі ноти, коли це можливо (для бонусу), або залишати їх усі відключеними.
Інша інформація
- Допустима будь-яка кількість пробілів / ліній.
- Не повинно бути зайвого пробілу перед клефами, а також пробілів між нотами. Будь-яка кількість порожніх рядків може випускатися до / після виводу.
- Бонус за підключення восьмих нот - 0,75 * кількість байт вихідного коду .
- Це код-гольф , тому найкоротший код виграє.