Excavando en las profundidades de su carpeta temporal, encontrará algunas composiciones para el piano. Desafortunadamente, estas composiciones se escribieron solo con nombres y duraciones de notas, y solo tiene acceso a un terminal de texto. Por lo tanto, su tarea es escribir un programa para mostrar las composiciones como arte ASCII.
Entrada
Su programa debe aceptar dos cadenas como entrada. La primera cadena representará las notas del pentagrama superior (con la clave de sol), mientras que la segunda cadena representará las notas del pentagrama inferior.
Las notas serán aprobadas en notación científica . Las notas del personal superior siempre serán intermedias C4
e C6
inclusivas. Las notas del personal de fondo siempre serán intermedias C2
e C4
inclusivas.
Cada nota vendrá con una duración, que será uno de: 1
, 2
, 4
, 8
. Estos representan una nota completa (semibreve), una media nota (mínima), una nota negra (entrepierna) y una octava nota (temblor) respectivamente.
Las notas de cualquier otra duración nunca aparecerán en la entrada.
La forma en que se separa la nota y la duración y cómo se separa cada nota de otras notas en la entrada depende de su discreción. La siguiente es una entrada de muestra para el personal superior:
E4/4 A4/8 C#5/8 E5/2
Aquí, las notas están separadas por un espacio, y la duración está separada de la nota con una barra diagonal. Estos delimitadores no son fijos y puede elegir cambiarlos u omitirlos por completo.
Puede suponer que hay al menos una nota en cada pentagrama. No hay restos en la entrada.
Salida
Su programa es generar el puntaje como arte ASCII, conforme a las siguientes descripciones.
Las claves deben ser lo primero a la izquierda de su salida (la distancia entre los dos pentagramas no debe cambiarse):
^
| |
------|/----
/
-----/|-----
/ |
---/--__----
| / \
---\-\|-|---
\ | /
------|-----
|
\_/
----___-----
/ \ |
---\---|----
| |
-------/----
/
-----/------
------------
El tallo de una nota (la línea vertical al lado del círculo) debe apuntar hacia arriba si la nota está debajo de la línea media de un pentagrama. Debe apuntar hacia abajo si la nota está por encima de la línea media de un pentagrama. Si la nota está en la línea media, entonces el tallo puede apuntar en cualquier dirección. (La única excepción a esto es la bonificación, y ocurre cuando se conectan las corcheas, descritas más adelante). El tallo debe comenzar en la línea arriba / debajo del círculo, y ser 6
líneas altas.
Todos los tipos de notas, excepto las notas enteras, tienen tallos. La bandera de una octava nota está representada por dos barras diagonales en diferentes líneas (vea las notas de ejemplo a continuación).
Un encabezado de nota rellenado (para notas cuarto y octavo) está representado por (@)
. Una cabeza de nota vacía (para notas medias y enteras) está representada por ( )
.
Los accidentes accidentales (objetos punzantes, pisos, naturales) deben colocarse como se muestra en las notas de ejemplo, con exactamente un carácter entre el lado derecho del accidental y el lado izquierdo del encabezado de la nota.
Las líneas del libro mayor deben usarse cuando sea necesario, y deben ser 7
caracteres de longitud, centrados alrededor del encabezado de la nota.
Cada nota debe tener 12
caracteres de ancho.
Notas de ejemplo:
|_
|_| ( )
| |------
|
------------ ---------|-- ------------ ------------ ------------
|
------------ ---------|-- ---|-------- ------------ ------------
(@) _|_|_ | |_
-----|------ _|_|_-( )--- ---|/-(@)--- ------------ ---------|\-
| | | | | \
-----|------ ------------ -----|------ ------------ ---------|--
| | |
-----|------ ------------ -----|------ ------------ ---------|--
| | / |
|/ --(@)--
quarter note half note eighth note whole note eighth note
sharped flatted natural
Después de la nota de 12 caracteres, deje los 2 * 12 - 12 = 12
caracteres en blanco (ya sea o
-
dependiendo de la línea) si la nota es una nota negra. Si la nota es media nota, deje los 4 * 12 - 12 = 36
caracteres en blanco. Si la nota es una nota completa, deje los 8 * 12 - 12 = 84
caracteres en blanco. No agregue caracteres adicionales para las corcheas.
Al final de cada compás (96 caracteres después de la clave o la línea de compás), genera una línea de compás. Esto se hace bajando todos los caracteres entre las líneas superior e inferior (inclusive) y reemplazando con
|
y -
con +
. (Ver salida de ejemplo al final de la pregunta).
Al final de la pieza, emite el final de la música generando 3 líneas de compás seguidas, pero con un espacio entre la primera y la segunda. Es decir:
+-++
| ||
+-++
| ||
. ..
. ..
Tenga en cuenta que los objetos punzantes, planos y naturales duran hasta el final de la medida. El signo natural solo se debe usar para cancelar un corte agudo o plano usado anteriormente en la misma medida.
Para el propósito de esta tarea, los objetos punzantes, planos y naturales solo afectan una nota en una octava y en una clave (un filo en A5 no hace que se filtre A4, y un plano en C4 en el pentagrama superior no causa C4 en el bastón inferior para ser aplanado).
Información solo para el bono
La bonificación implica conectar correctamente las corcheas.
Cuando hay dos corcheas consecutivas, alineadas con el ritmo de las notas negras (en otras palabras, el número de caracteres antes de la primera corchea es un múltiplo de 24), las dos corcheas se deben conectar.
Deje que la nota A sea la nota más alejada del medio del pentagrama. Si ambas notas son la misma distancia desde la mitad, ya sea nota puede ser nota A . Dejar que la otra nota sea nota B .
La dirección de los dos vástagos debe ser la dirección del tallo de la nota A .
El tallo de una de las notas debe ser de 6
líneas altas (como es el caso de los tallos en general), y el tallo de la otra nota debe extenderse hasta el final del tallo de la otra nota.
Los tallos deben estar conectados con _
.
Ejemplo conectado octavas notas:
___________
| |
| |
| |
| | --(@)--
| | | |
------------------------ ---|_----|-----------|-- -----|------------------
|/ (@) | | |_
------------------------ ---------------------|-- -----|--------|_|-(@)---
(@) _|_|_ | | ||
-----|------_|_|_-(@)--- ---------------------|-- -----|-----------|------
| | | | | | |
-----|-----------|------ ---------------------|-- -----|-----------|------
| | | | |
-----|-----------|------ ------------------(@)--- -----|___________|------
| |
|___________|
Ejemplo de entrada y salida
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
Salida :
^
| | | | |
------|/-------------|-----------------------|--------------------------------------------------------------+---------|-----------------------|--------------------------------------------------------------+----------___________-------------___________------------|\----------|\----------|\----------|\-+---------|-----------------------|--------------------------------------------------------------+-++
/ | | | | | | | | | | | | | \ | \ | \ | \| | | | | ||
-----/|--------------|-----------------------|-----------------------|--------------------------------------+---------|-----------------------|-----------------------|--------------------------------------+---------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|--+---------|-----------------------|-----------------------|--------------------------------------+-++
/ | | | | | | | | | | | | | | | | | | | | | | ||
---/--__----_|_|_----|-----------------------|-----------------------|--------------------------------------+_|_|_----|-----------------------|-----------------------|--------------------------------------+---------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|--+_|_|_----|-----------------------|-----------------------|--------------------------------------+-++
| / \ _|_|_ (@) _|_|_ | | |_|_|_ (@) _|_|_ | | | | | | | _|_|_ | | | | |_|_|_ (@) _|_|_ | | | ||
---\-\|-|----|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+-|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+_|_|_----|-----------|-----------|-----------|--_|_|_-(@)---------(@)---------(@)---------(@)---+-|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+-++
\ | / | | _|_|_ ( ) | | | _|_|_ ( ) |_|_|_ (@) (@) (@) (@) | | | | | _|_|_ ( ) | ||
------|------------------------------------------------------|-|--------------------------------------------+-------------------------------------------------|-|--------------------------------------------+-|-|--------------------------------------------------------------------------------------------+-------------------------------------------------|-|--------------------------------------------+-++
| | | | | ||
\_/ | | | | ||
| | | | ||
| | | | ||
| | | | ||
| | | | ||
_|_|_ |_|_|_ | | | ||
----___-----_|_|_-(@)---------------_|_|_-------------------------------------------------------------------+_|_|_-(@)---------------_|_|_-------------------------------------------------------------------+------------------------------------------------_|_|_-------------------------------------------+------------------------------------------------------------------------------------------------+-++
/ \ | | | | _|_|_ (@) _|_|_ | | | | _|_|_ (@) _|_|_ |_|_|_ _|_|_ ( ) |_|_|_ | ||
---\---|---------|-------------------|-|-|------------------_|_|_-( )---------------------------------------+-----|-------------------|-|-|------------------_|_|_-( )---------------------------------------+_|_|_-( )----------------------------------------|-|-|------------------------------------------+_|_|_ (@)---------------_|_|_-------------------------( )---------------------------------------+-++
| | | | | | | | | | | | | | | | | | | | | | _|_|_ (@) | | ||
-------/---------|-----------------------|-----------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-----|-----------------------------------------------|------------------------------------------+-----|-------------------|-|-|-----------------------|------------------------------------------+-++
/ | | | | | | | | | | | | | | | ||
-----/-----------|-----------------------|-----------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-----|-----------------------------------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-++
| | | | | | | | | | | | | ||
-----------------------------------------------------------------|------------------------------------------+-----------------------------------------------------|------------------------------------------+-----|------------------------------------------------------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-++
|
En aras de la demostración, en la tercera medida, las F#
corcheas están conectadas, mientras que las G#
corcheas no. Su programa debe conectar las octavas notas cuando corresponda (para la bonificación) o dejarlas desconectadas.
Otra información
- Cualquier cantidad de espacios en blanco / líneas finales es aceptable.
- No debe haber espacios en blanco adicionales antes de las claves, ni espacios en blanco entre las notas. Se puede emitir cualquier cantidad de líneas en blanco antes / después de la salida.
- La bonificación por conectar corcheas es 0,75 * número de bytes de código fuente .
- Este es el código de golf , por lo que gana el código más corto.