Procurando nas profundezas da sua pasta temporária, você encontra algumas composições para o piano. Infelizmente, essas composições foram escritas apenas com nomes e durações de notas, e você só tem acesso a um terminal de texto. Portanto, sua tarefa é escrever um programa para exibir as composições como arte ASCII.
Entrada
Seu programa deve aceitar duas seqüências de caracteres como entrada. A primeira corda representará as notas da pauta superior (com a clave de sol), enquanto a segunda corda representará as notas da pauta inferior.
As notas serão passadas em notação científica . As anotações da equipe principal serão sempre entre C4
e C6
inclusive. As anotações da equipe de baixo estarão sempre entre C2
e C4
inclusive.
Cada nota virá com uma duração, que será um dos seguintes: 1
, 2
, 4
, 8
. Eles representam uma nota inteira (semibreve), uma nota de meia (minim), uma semínima (virilha) e uma colcheia (tremor), respectivamente.
Notas de qualquer outra duração nunca aparecerão na entrada.
Como a nota e a duração são separadas, e como cada nota é separada de outras notas na entrada, fica a seu critério. A seguir, é apresentado um exemplo de entrada para a equipe principal:
E4/4 A4/8 C#5/8 E5/2
Aqui, as notas são separadas por um espaço e a duração é separada da nota com uma barra. Esses delímetros não são fixos e você pode optar por alterá-los ou omiti-los completamente.
Você pode assumir que há pelo menos uma nota em cada equipe. Não há descanso na entrada.
Saída
Seu programa deve gerar a pontuação como arte ASCII, de acordo com as seguintes descrições.
As claves devem ser a primeira coisa à esquerda da sua saída (a distância entre as duas pautas não deve ser alterada):
^
| |
------|/----
/
-----/|-----
/ |
---/--__----
| / \
---\-\|-|---
\ | /
------|-----
|
\_/
----___-----
/ \ |
---\---|----
| |
-------/----
/
-----/------
------------
A haste de uma nota (a linha vertical ao lado do círculo) deve apontar para cima se a nota estiver abaixo da linha do meio de uma pauta. Deve apontar para baixo se a nota estiver acima da linha do meio de uma pauta. Se a nota estiver na linha do meio, a haste poderá apontar em qualquer direção. (A única exceção a isso é para o bônus e ocorre ao conectar colcheias, descritas mais adiante). A haste deve começar na linha acima / abaixo do círculo e ter 6
linhas altas.
Todos os tipos de notas, exceto notas inteiras, têm hastes. A bandeira de uma colcheia é representada por duas barras em linhas diferentes (veja exemplos de notas abaixo).
Um cabeçalho de nota preenchido (para semínimas e colcheias) é representado por (@)
. Um cabeçalho de nota vazio (para notas de metade e de todo) é representado por ( )
.
Acidentais (objectos cortantes, planos, naturais) devem ser colocados como mostrado nas notas de exemplo, com exatamente um caractere entre o lado direito do acidental e o lado esquerdo da cabeça da nota.
As linhas do razão devem ser usadas quando necessário e devem ter 7
caracteres de comprimento, centralizadas em torno da cabeça da nota.
Cada nota deve ter 12
caracteres largos.
Notas de exemplo:
|_
|_| ( )
| |------
|
------------ ---------|-- ------------ ------------ ------------
|
------------ ---------|-- ---|-------- ------------ ------------
(@) _|_|_ | |_
-----|------ _|_|_-( )--- ---|/-(@)--- ------------ ---------|\-
| | | | | \
-----|------ ------------ -----|------ ------------ ---------|--
| | |
-----|------ ------------ -----|------ ------------ ---------|--
| | / |
|/ --(@)--
quarter note half note eighth note whole note eighth note
sharped flatted natural
Após a nota de 12 caracteres, deixe os 2 * 12 - 12 = 12
caracteres em branco ( dependendo da linha ou
-
dependendo da linha) se a nota for semínima. Se a nota for meia nota, deixe os 4 * 12 - 12 = 36
caracteres em branco. Se a nota for uma nota inteira, deixe os 8 * 12 - 12 = 84
caracteres em branco. Não adicione caracteres extras para colcheias.
No final de cada compasso (96 caracteres após a clave ou a linha de barra), produza uma linha de barra. Isso é feito diminuindo cada caractere entre as linhas superior e inferior (inclusive) e substituindo por
|
e -
com +
. (Veja exemplo de saída na parte inferior da pergunta).
No final da peça, reproduza a música final, produzindo 3 linhas de barra seguidas, mas com um espaço entre a primeira e a segunda. Isso é:
+-++
| ||
+-++
| ||
. ..
. ..
Observe que objetos cortantes, planos e naturais duram até o final da medida. O sinal natural deve ser usado apenas para cancelar um nítido ou achatado usado anteriormente na mesma medida.
Para o objetivo desta tarefa, objectos cortantes, planos e naturais afetam apenas uma nota em uma oitava e em uma clave (um afiado em A5 não faz com que A4 seja afiado e um apartamento em C4 na equipe superior não causa C4 no cajado inferior a ser achatado).
Informações apenas para o bônus
O bônus envolve conectar corretamente colcheias.
Quando houver duas colcheias consecutivas, alinhadas com a batida semínima (em outras palavras, o número de caracteres antes da primeira colcheia é um múltiplo de 24), as duas colcheias serão conectadas.
Deixe a nota A ser a nota mais distante do meio da equipe. Se ambas as notas estão à mesma distância a partir do meio, seja nota pode ser nota A . Deixe a outra Nota Seja nota B .
A direção de ambos os caules deve ser a direção da haste de nota A .
O caule de uma das notas deve ter 6
linhas altas (como é o caso das hastes em geral) e o caule da outra nota deve ser estendido até o final do caule da outra nota.
As hastes devem estar conectadas _
.
Exemplo de colcheias conectadas:
___________
| |
| |
| |
| | --(@)--
| | | |
------------------------ ---|_----|-----------|-- -----|------------------
|/ (@) | | |_
------------------------ ---------------------|-- -----|--------|_|-(@)---
(@) _|_|_ | | ||
-----|------_|_|_-(@)--- ---------------------|-- -----|-----------|------
| | | | | | |
-----|-----------|------ ---------------------|-- -----|-----------|------
| | | | |
-----|-----------|------ ------------------(@)--- -----|___________|------
| |
|___________|
Exemplo de entrada e saída
Entrada :
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
Saída :
^
| | | | |
------|/-------------|-----------------------|--------------------------------------------------------------+---------|-----------------------|--------------------------------------------------------------+----------___________-------------___________------------|\----------|\----------|\----------|\-+---------|-----------------------|--------------------------------------------------------------+-++
/ | | | | | | | | | | | | | \ | \ | \ | \| | | | | ||
-----/|--------------|-----------------------|-----------------------|--------------------------------------+---------|-----------------------|-----------------------|--------------------------------------+---------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|--+---------|-----------------------|-----------------------|--------------------------------------+-++
/ | | | | | | | | | | | | | | | | | | | | | | ||
---/--__----_|_|_----|-----------------------|-----------------------|--------------------------------------+_|_|_----|-----------------------|-----------------------|--------------------------------------+---------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|--+_|_|_----|-----------------------|-----------------------|--------------------------------------+-++
| / \ _|_|_ (@) _|_|_ | | |_|_|_ (@) _|_|_ | | | | | | | _|_|_ | | | | |_|_|_ (@) _|_|_ | | | ||
---\-\|-|----|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+-|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+_|_|_----|-----------|-----------|-----------|--_|_|_-(@)---------(@)---------(@)---------(@)---+-|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+-++
\ | / | | _|_|_ ( ) | | | _|_|_ ( ) |_|_|_ (@) (@) (@) (@) | | | | | _|_|_ ( ) | ||
------|------------------------------------------------------|-|--------------------------------------------+-------------------------------------------------|-|--------------------------------------------+-|-|--------------------------------------------------------------------------------------------+-------------------------------------------------|-|--------------------------------------------+-++
| | | | | ||
\_/ | | | | ||
| | | | ||
| | | | ||
| | | | ||
| | | | ||
_|_|_ |_|_|_ | | | ||
----___-----_|_|_-(@)---------------_|_|_-------------------------------------------------------------------+_|_|_-(@)---------------_|_|_-------------------------------------------------------------------+------------------------------------------------_|_|_-------------------------------------------+------------------------------------------------------------------------------------------------+-++
/ \ | | | | _|_|_ (@) _|_|_ | | | | _|_|_ (@) _|_|_ |_|_|_ _|_|_ ( ) |_|_|_ | ||
---\---|---------|-------------------|-|-|------------------_|_|_-( )---------------------------------------+-----|-------------------|-|-|------------------_|_|_-( )---------------------------------------+_|_|_-( )----------------------------------------|-|-|------------------------------------------+_|_|_ (@)---------------_|_|_-------------------------( )---------------------------------------+-++
| | | | | | | | | | | | | | | | | | | | | | _|_|_ (@) | | ||
-------/---------|-----------------------|-----------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-----|-----------------------------------------------|------------------------------------------+-----|-------------------|-|-|-----------------------|------------------------------------------+-++
/ | | | | | | | | | | | | | | | ||
-----/-----------|-----------------------|-----------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-----|-----------------------------------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-++
| | | | | | | | | | | | | ||
-----------------------------------------------------------------|------------------------------------------+-----------------------------------------------------|------------------------------------------+-----|------------------------------------------------------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-++
|
Para fins de demonstração, na terceira medida, as F#
colcheias estão conectadas, enquanto as G#
colcheias não. Seu programa deve conectar as colcheias sempre que aplicável (para o bônus) ou deixá-las todas desconectadas.
Outra informação
- Qualquer quantidade de espaço em branco / linhas à direita é aceitável.
- Não deve haver espaço em branco extra antes das claves, nem espaço em branco entre as notas. Qualquer número de linhas em branco pode ser emitido antes / depois da saída.
- O bônus para conectar colcheias é 0,75 * número de bytes do código fonte .
- Isso é código-golfe , então o código mais curto vence.