Remarque : Anders Kaseorg m'avertit que cela pourrait être un doublon d' une autre question précédente . Il semble que oui, et je suis désolé de ne pas avoir trouvé cette question avant de poster celle-ci. Néanmoins, cette question n'a reçu qu'une seule réponse et celle-ci est plus simple, juste au cas où vous voudriez tous essayer cette fois. Je comprendrai si cette question finit par être marquée comme doublon.
Le défi
Étant donné une entrée comme celle-ci:
8g 8Df 4cs 2C 1A
Écrivez le programme / la fonction la plus courte qui produit une sortie comme celle-ci:
/\ -o-
| |
---|-|---------------------------------------------------|-|
|/ | |
---/|--------|\----b-*-----------------------------------|-|
/ | | | | o | |
-|--|--------|------|-----------------|------------------|-|
| (| \ | | | | | |
-|--|--)----*-------|/---------|------|------------------|-|
\ | / | | | |
-----|-------------------------|-------------------------|-|
| |
*_/ #-*-
Règles
La sortie doit consister en une portée à cinq lignes commençant par le dessin d'une clé en G exactement comme indiqué ci-dessus, alignée à gauche de la portée et en laissant une seule colonne après le début de la portée.
/\
| |
---|-|--
|/
---/|---
/ |
-|--|---
| (| \
-|--|--)
\ | /
-----|--
|
*_/
^
Single column
Les notes doivent commencer par un *
ou un o
caractère selon son type.
Il doit y avoir exactement huit colonnes de séparation pour chaque *
ou un o
caractère:
/\ -o-
| |
---|-|---------------------------------------------------|-|
|/ | |
---/|--------|\----b-*-----------------------------------|-|
/ | | | | o | |
-|--|--------|------|-----------------|------------------|-|
| (| \ | | | | | |
-|--|--)----*-------|/---------|------|------------------|-|
\ | / | | | |
-----|-------------------------|-------------------------|-|
| |
*_/ #-*-
↑ ↑ ↑ ↑ ↑ ↑ ↑
8 columns of separation
Le bâton doit se terminer avec la terminaison alignée à droite, comme indiqué dans l'exemple. La barre de gauche du terminateur doit être séparée de 8 colonnes de la dernière note.
L'entrée sera une chaîne unique contenant les notes (au moins une, aucune entrée vide), chacune séparée par un espace (vous pouvez considérer que chaque note sera la bonne, donc pas besoin de vérifier les erreurs). Vous pouvez également prendre l'entrée comme un tableau de chaînes, avec une note par élément dans le tableau. Pour chaque note, le premier caractère sera le dénominateur de la longueur de la note ( 1
pour une note entière / demi-fibre , commence par o
; 2
pour une demi-note / minim , commence par o
; 4
pour une noire / crotchet , commence par *
; et 8
pour une huitième note / tremblement , commence par*
). Le deuxième caractère sera la note (voir le tableau suivant) et le troisième caractère facultatif sera f
ou F
pour les notes plates et s
ou S
pour les notes aiguës.
--- A (ledger line)
G
-------- F
E
-------- D
C
-------- b
a
-------- g
f
-------- e
d
--- c (ledger line)
Évidemment, l'entrée doit respecter la casse des notes, mais vous pouvez choisir la casse des modificateurs f
et s
.
Notes c
et A
doivent ajouter deux -
(lignes de grand livre), un de chaque côté, car ils doivent prolonger la portée. Notes d
et G
sont hors du personnel mais n'ont pas besoin de lignes de grand livre.
Les notes aplaties ou aiguisées doivent ajouter b
ou #
deux positions à gauche de la note.
Les tiges (le cas échéant) doivent être dessinées avec 4 barres verticales. Les notes de b
dessus et de dessus doivent tirer la tige vers le bas et sur le côté gauche de la note. Les notes de a
et en dessous doivent tirer la tige vers le haut et sur le côté droit de la note. Les quavers doivent ajouter le drapeau, toujours à droite et exactement comme indiqué, et n'ont pas besoin d'être rayonnés s'il y en a plusieurs dans une rangée.
--------------------------
-----|\----b-*------------
| | |
-----|------|-------------
| | |
----*-------|/---------|--
↑↑ |
----||------↑↑---------|--
|| || |
|| || #-*-
|\ |\ ↑↑
| Stem | Note | Stem
Note Stem Note
Comme d'habitude, votre programme / fonction peut directement dessiner la sortie ou renvoyer une chaîne, un tableau de chaînes, une matrice de caractères ou tout autre format raisonnable.
Liens utiles
C'est du golf de code , donc le programme / la fonction la plus courte pour chaque langue peut gagner!
Bonus: essayez d'écrire des exemples avec des mélodies célèbres et laissez tout le monde essayer de deviner de quelle mélodie il s'agit!