Nota : Anders Kaseorg me advierte que esto podría ser un duplicado de otra pregunta anterior . Parece que sí, y lo siento, no encontré esa pregunta antes de publicar esta. Sin embargo, esa pregunta solo recibió una respuesta y esta es más simple, en caso de que todos quieran intentarlo esta vez. Sin embargo, entenderé si esta pregunta termina siendo marcada como duplicada.
El reto
Dada una entrada como esta:
8g 8Df 4cs 2C 1A
Escriba el programa / función más corto que produce una salida como esta:
/\ -o-
| |
---|-|---------------------------------------------------|-|
|/ | |
---/|--------|\----b-*-----------------------------------|-|
/ | | | | o | |
-|--|--------|------|-----------------|------------------|-|
| (| \ | | | | | |
-|--|--)----*-------|/---------|------|------------------|-|
\ | / | | | |
-----|-------------------------|-------------------------|-|
| |
*_/ #-*-
Reglas
El resultado debe consistir en un pentagrama de cinco líneas que comience con el dibujo de una clave de sol exactamente como se muestra arriba, alineado a la izquierda del pentagrama y dejando una sola columna después del inicio del pentagrama.
/\
| |
---|-|--
|/
---/|---
/ |
-|--|---
| (| \
-|--|--)
\ | /
-----|--
|
*_/
^
Single column
Las notas deben comenzar con un *
o un o
carácter dependiendo de su tipo.
Debe haber exactamente ocho columnas de separación cada uno *
o un o
personaje:
/\ -o-
| |
---|-|---------------------------------------------------|-|
|/ | |
---/|--------|\----b-*-----------------------------------|-|
/ | | | | o | |
-|--|--------|------|-----------------|------------------|-|
| (| \ | | | | | |
-|--|--)----*-------|/---------|------|------------------|-|
\ | / | | | |
-----|-------------------------|-------------------------|-|
| |
*_/ #-*-
↑ ↑ ↑ ↑ ↑ ↑ ↑
8 columns of separation
El personal debe terminar con el terminador alineado a la derecha como se muestra en el ejemplo. La barra izquierda del terminador debe estar separada 8 columnas de la última nota.
La entrada será una sola cadena que contiene las notas (al menos una, sin entradas vacías), cada una separada por un espacio en blanco (puede considerar que cada nota será la adecuada, por lo que no es necesario verificar si hay errores). También puede tomar la entrada como una matriz de cadenas, con una nota por elemento en la matriz. Para cada nota, el primer carácter será el denominador de la duración de la nota ( 1
para una nota entera / semibreve , comienza con o
; 2
para una media nota / mínima , comienza con o
; 4
para un cuarto de nota / entrepierna , comienza con *
; y 8
para un octavo nota / temblor , comienza con*
) El segundo carácter será la nota (ver tabla siguiente), y el tercer carácter opcional será f
o F
para notas planas y / s
o S
para notas agudas.
--- A (ledger line)
G
-------- F
E
-------- D
C
-------- b
a
-------- g
f
-------- e
d
--- c (ledger line)
Obviamente, la entrada debe respetar el caso de las notas, pero puede elegir el caso de la f
y s
modificadores.
Notas c
y A
debe agregar dos -
(líneas contables), una a cada lado, ya que deben extender el pentagrama. Notas d
y G
están fuera del personal, pero no necesitan líneas contables.
Las notas planas o afiladas deben agregar b
o #
dos posiciones a la izquierda de la nota.
Los tallos (si los hay) deben dibujarse con 4 barras verticales. Las notas de b
arriba deben dibujar el tallo hacia abajo y al lado izquierdo de la nota. Las notas desde a
y hacia abajo deben dibujar el tallo hacia arriba y en el lado derecho de la nota. Los quavers deben agregar la bandera, siempre hacia la derecha y exactamente como se muestra, y no necesitan ser emitidos si hay varios de ellos en una fila.
--------------------------
-----|\----b-*------------
| | |
-----|------|-------------
| | |
----*-------|/---------|--
↑↑ |
----||------↑↑---------|--
|| || |
|| || #-*-
|\ |\ ↑↑
| Stem | Note | Stem
Note Stem Note
Como de costumbre, su programa / función puede dibujar directamente la salida o devolver una cadena, una matriz de cadenas, una matriz de caracteres o cualquier otro formato razonable.
Enlaces útiles
Este es el código de golf , ¡así que puede ganar el programa / función más corto para cada idioma!
Bonificación: ¡intenta escribir ejemplos con melodías famosas y deja que todos intenten adivinar qué melodía es!