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!
Réponses:
SOGL V0.12 ,
178175174173172171 171 octetsEssayez-le ici! (θ ajouté pour la facilité d'utilisation; pour fonctionner comme 171 octets, il s'attend à ce que l'entrée soit sur la pile)
Autant que je sache, cela fonctionne, mais si vous rencontrez des problèmes, dites-le-moi.
Explication:
première partie: création de toile
deuxième partie: boucle, placement de la tête de note
troisième partie: drapeaux et tiges
la source
2bs
de votre exemple doit avoir la tige pointée vers le bas.JavaScript (ES6),
616527 octetsMerci @shaggy d' avoir supprimé près de 90 octets
Je n'avais aucune idée des notes ... jusqu'à présent, j'espère avoir bien compris.
explication
la source
t[0]
ett[2]
, puis faitesq=t.length*9
s>6&&(
quoi vous pouvez économiser un octet. Vous pouvez également enregistrer un autre octet avec en remplaçant(w=q+12)
parw
,repeat(q=i.length*9)
avecrepeat(w=i.length*9)
etrepeat(q)
avecrepeat(w,w+=12)
.Charbon de bois ,
180171168 168163 octetsEssayez-le en ligne! Le lien est vers la version verbeuse du code. Explication:
Imprimez la portée.
Imprimez la clé.
Parcourez chaque note.
Trouvez la coordonnée Y de la note.
C'est vraiment sournois:
χ
c'est une variable qui est prédéfinie à 10, qui est exactement la coordonnée X de la première note accidentelle, si elle en a une. Après avoir sauté à cette position, 9 y est ajouté, représentant la position de note suivante.Imprimez l'accidentel, s'il y en a un.
Imprimez les lignes du grand livre si nécessaire et la note. En fait, la ligne est imprimée sur n'importe quelle coordonnée y même si l'impression sur la portée n'a bien sûr aucun effet.
Rien de plus à faire pour les semi-fibres.
Pour les notes en dessous du point médian,
tirer la tige vers le haut,
et le drapeau des croches.
Pour les notes au-dessus du point médian,
tirer la tige vers le bas,
et le drapeau des croches.
la source