En fouillant dans les profondeurs de votre dossier temporaire, vous trouvez des compositions pour le piano. Malheureusement, ces compositions ont été écrites avec des noms de notes et des durées uniquement, et vous n'avez accès qu'à un terminal texte. Par conséquent, votre tâche consiste à écrire un programme pour afficher les compositions en tant qu'art ASCII.
Contribution
Votre programme doit accepter deux chaînes en entrée. La première chaîne représentera les notes de la portée supérieure (avec la clé de sol), tandis que la deuxième chaîne représentera les notes de la portée inférieure.
Les notes seront passées en notation scientifique de hauteur . Les notes du personnel supérieur seront toujours comprises entre C4
et C6
inclusives. Les notes du bas du personnel seront toujours comprises entre C2
et C4
inclusives.
Chaque note viendra avec une durée, qui sera l' un des: 1
, 2
, 4
, 8
. Celles-ci représentent respectivement une note entière (demi-fibre), une demi-note (minimum), une noire (crotchet) et une croche (quaver).
Les notes de toute autre durée n'apparaîtront jamais dans l'entrée.
La façon dont la note et la durée sont séparées, et la façon dont chaque note est séparée des autres notes dans l'entrée est à votre discrétion. Voici un exemple d'entrée pour le personnel supérieur:
E4/4 A4/8 C#5/8 E5/2
Ici, les notes sont séparées par un espace et la durée est séparée de la note par une barre oblique. Ces délimètres ne sont pas fixes et vous pouvez choisir de les modifier ou de les omettre complètement.
Vous pouvez supposer qu'il y a au moins une note dans chaque portée. Il n'y a pas de repos dans l'entrée.
Sortie
Votre programme doit produire la partition en tant qu'art ASCII, conformément aux descriptions suivantes.
Les clés doivent être la première chose à gauche de votre sortie (la distance entre les deux portées ne doit pas être modifiée):
^
| |
------|/----
/
-----/|-----
/ |
---/--__----
| / \
---\-\|-|---
\ | /
------|-----
|
\_/
----___-----
/ \ |
---\---|----
| |
-------/----
/
-----/------
------------
La tige d'une note (la ligne verticale à côté du cercle) doit pointer vers le haut si la note est en dessous de la ligne médiane d'une portée. Il doit pointer vers le bas si la note est au-dessus de la ligne médiane d'une portée. Si la note est sur la ligne médiane, alors la tige peut pointer dans les deux sens. (La seule exception à cette règle concerne le bonus et se produit lors de la connexion de croches, décrites plus loin). La tige doit commencer sur la ligne au-dessus / en dessous du cercle et être des 6
lignes hautes.
Tous les types de notes sauf les notes entières ont des tiges. Le drapeau d'une croche est représenté par deux barres obliques sur des lignes différentes (voir les exemples de notes ci-dessous).
Une tête de note remplie (pour les noires et les croches) est représentée par (@)
. Une tête de note vide (pour les demi-notes et les notes entières) est représentée par ( )
.
Les accidents (objets tranchants, plats, naturels) doivent être placés comme indiqué dans les exemples de notes, avec exactement un caractère entre le côté droit de l'accidentel et le côté gauche de la tête de note.
Les lignes de grand livre doivent être utilisées si nécessaire et doivent être des 7
caractères de longueur, centrées autour de la tête de note.
Chaque note doit avoir des 12
caractères larges.
Exemples de notes:
|_
|_| ( )
| |------
|
------------ ---------|-- ------------ ------------ ------------
|
------------ ---------|-- ---|-------- ------------ ------------
(@) _|_|_ | |_
-----|------ _|_|_-( )--- ---|/-(@)--- ------------ ---------|\-
| | | | | \
-----|------ ------------ -----|------ ------------ ---------|--
| | |
-----|------ ------------ -----|------ ------------ ---------|--
| | / |
|/ --(@)--
quarter note half note eighth note whole note eighth note
sharped flatted natural
Après la note de 12 caractères, laissez les 2 * 12 - 12 = 12
caractères vides (soit ou
-
selon la ligne) si la note est une noire. Si la note est une demi-note, laissez les 4 * 12 - 12 = 36
caractères vides. Si la note est une note entière, laissez les 8 * 12 - 12 = 84
caractères vides. N'ajoutez pas de caractères supplémentaires pour les croches.
À la fin de chaque mesure (96 caractères après la ligne de clé ou de barre), affichez une ligne de barre. Pour ce faire, descendez chaque caractère entre les lignes supérieures et inférieures (inclus), et remplacez par
|
et -
par +
. (Voir l'exemple de sortie au bas de la question).
À la fin de la pièce, sortez la fin de la musique en sortant 3 lignes de mesure d'affilée, mais avec un espace entre la première et la seconde. C'est:
+-++
| ||
+-++
| ||
. ..
. ..
Notez que les objets tranchants, plats et naturels durent jusqu'à la fin de la mesure. Le signe naturel ne doit être utilisé que pour annuler un tranchant ou un plat utilisé précédemment dans la même mesure.
Aux fins de cette tâche, les objets tranchants, plats et naturels n'affectent qu'une note dans une octave et dans une clé (un tranchant sur A5 ne fait pas trancher A4, et un plat sur C4 dans la portée supérieure ne cause pas C4 dans la portée inférieure à aplatir).
Informations pour le bonus uniquement
Le bonus consiste à connecter correctement les croches.
Lorsqu'il y a deux croches consécutives, alignées sur le rythme de la noire (en d'autres termes, le nombre de caractères avant la première croche est un multiple de 24), les deux croches doivent être connectées.
Soit la note A la note la plus éloignée du milieu de la portée. Si les deux notes sont à la même distance du milieu, que ce soit la note peut être la note A . Laissez l'autre note soit la note B .
La direction des deux tiges doit être la direction de la tige de la note A .
La tige de l'une des notes doit avoir des 6
lignes hautes (comme c'est le cas pour les tiges en général), et la tige de l'autre note doit être prolongée jusqu'à la fin de la tige de l'autre note.
Les tiges doivent être connectées avec _
.
Exemple de croches connectées:
___________
| |
| |
| |
| | --(@)--
| | | |
------------------------ ---|_----|-----------|-- -----|------------------
|/ (@) | | |_
------------------------ ---------------------|-- -----|--------|_|-(@)---
(@) _|_|_ | | ||
-----|------_|_|_-(@)--- ---------------------|-- -----|-----------|------
| | | | | | |
-----|-----------|------ ---------------------|-- -----|-----------|------
| | | | |
-----|-----------|------ ------------------(@)--- -----|___________|------
| |
|___________|
Exemple d'entrée et de sortie
Entrée :
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
Sortie :
^
| | | | |
------|/-------------|-----------------------|--------------------------------------------------------------+---------|-----------------------|--------------------------------------------------------------+----------___________-------------___________------------|\----------|\----------|\----------|\-+---------|-----------------------|--------------------------------------------------------------+-++
/ | | | | | | | | | | | | | \ | \ | \ | \| | | | | ||
-----/|--------------|-----------------------|-----------------------|--------------------------------------+---------|-----------------------|-----------------------|--------------------------------------+---------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|--+---------|-----------------------|-----------------------|--------------------------------------+-++
/ | | | | | | | | | | | | | | | | | | | | | | ||
---/--__----_|_|_----|-----------------------|-----------------------|--------------------------------------+_|_|_----|-----------------------|-----------------------|--------------------------------------+---------|-----------|-----------|-----------|-----------|-----------|-----------|-----------|--+_|_|_----|-----------------------|-----------------------|--------------------------------------+-++
| / \ _|_|_ (@) _|_|_ | | |_|_|_ (@) _|_|_ | | | | | | | _|_|_ | | | | |_|_|_ (@) _|_|_ | | | ||
---\-\|-|----|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+-|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+_|_|_----|-----------|-----------|-----------|--_|_|_-(@)---------(@)---------(@)---------(@)---+-|-|--------------------_|_|_-(@)---------------_|_|_----|--------------------------------------+-++
\ | / | | _|_|_ ( ) | | | _|_|_ ( ) |_|_|_ (@) (@) (@) (@) | | | | | _|_|_ ( ) | ||
------|------------------------------------------------------|-|--------------------------------------------+-------------------------------------------------|-|--------------------------------------------+-|-|--------------------------------------------------------------------------------------------+-------------------------------------------------|-|--------------------------------------------+-++
| | | | | ||
\_/ | | | | ||
| | | | ||
| | | | ||
| | | | ||
| | | | ||
_|_|_ |_|_|_ | | | ||
----___-----_|_|_-(@)---------------_|_|_-------------------------------------------------------------------+_|_|_-(@)---------------_|_|_-------------------------------------------------------------------+------------------------------------------------_|_|_-------------------------------------------+------------------------------------------------------------------------------------------------+-++
/ \ | | | | _|_|_ (@) _|_|_ | | | | _|_|_ (@) _|_|_ |_|_|_ _|_|_ ( ) |_|_|_ | ||
---\---|---------|-------------------|-|-|------------------_|_|_-( )---------------------------------------+-----|-------------------|-|-|------------------_|_|_-( )---------------------------------------+_|_|_-( )----------------------------------------|-|-|------------------------------------------+_|_|_ (@)---------------_|_|_-------------------------( )---------------------------------------+-++
| | | | | | | | | | | | | | | | | | | | | | _|_|_ (@) | | ||
-------/---------|-----------------------|-----------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-----|-----------------------------------------------|------------------------------------------+-----|-------------------|-|-|-----------------------|------------------------------------------+-++
/ | | | | | | | | | | | | | | | ||
-----/-----------|-----------------------|-----------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-----|-----------------------------------------------|------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-++
| | | | | | | | | | | | | ||
-----------------------------------------------------------------|------------------------------------------+-----------------------------------------------------|------------------------------------------+-----|------------------------------------------------------------------------------------------+-----|-----------------------|-----------------------|------------------------------------------+-++
|
Par souci de démonstration, dans la troisième mesure, les F#
croches sont connectées, alors que les G#
croches ne le sont pas. Votre programme doit soit connecter les croches le cas échéant (pour le bonus), soit les laisser tous déconnectés.
Les autres informations
- Toute quantité d'espaces / lignes de fin est acceptable.
- Il ne doit pas y avoir d'espace supplémentaire avant les clés, ni d'espace entre les notes. Un nombre quelconque de lignes vides peut être émis avant / après la sortie.
- Le bonus pour la connexion des croches est de 0,75 * nombre d'octets de code source .
- C'est le code-golf , donc le code le plus court l'emporte.