Connexes: Musique: qu'est-ce que cet accord? , Notes to Tablature , Générer des tablatures de guitare? , Traduire des paires de numéros en notes de guitare
Étant donné un doigté de guitare, sortez l'accord qu'il représente. Vous pouvez utiliser une entrée et une sortie standard ou écrire une fonction qui renvoie une chaîne.
Les doigtés d'entrée seront classables comme l'un des accords suivants, à exprimer comme suit (si la note fondamentale était C):
- triade majeure:
C
- triade mineure:
Cm
- (dominant) septième:
C7
- septième mineure:
Cm7
L'accord peut être inversé, vous ne pouvez donc pas vous fier à la note la plus grave comme étant la racine. Vous ne pouvez pas non plus compter sur le fait qu'il s'agit d'un doigté facile ou courant dans le monde réel. Plus généralement, la sortie de votre programme doit ignorer les octaves des hauteurs et traiter tous les hauteurs correspondant à la même note de musique (c'est-à-dire A
) comme égales.
Il s'agit de code-golf , donc le code le plus court en octets l'emporte.
Format d'entrée
L'entrée est une série de 6 valeurs qui indiquent, pour chaque corde d'une guitare à 6 cordes en accordage standard (EADGBE), à quelle frette cette corde sera jouée. Cela pourrait également indiquer que la chaîne n'est pas jouée du tout. La frette "zeroth" est également connue comme la position ouverte, et le nombre de frettes compte à partir de là. Supposons que la guitare a 21 positions de frettes, de sorte que la position de frette la plus élevée soit le numéro 20.
Par exemple, l'entrée X 3 2 0 1 0
signifie placer ses doigts aux positions suivantes en haut du manche de la guitare:
(6th) |---|---|---|---|---
|-X-|---|---|---|---
|---|---|---|---|---
|---|-X-|---|---|---
|---|---|-X-|---|---
(1st) |---|---|---|---|---
et gratter les 2e à 6e cordes. Il correspond à cet onglet ASCII :
e |-0-|
B |-1-|
G |-0-|
D |-2-|
A |-3-|
E |---|
Vous avez une certaine flexibilité dans le choix du type d'entrée que vous souhaitez: chaque position de frette peut être exprimée sous la forme d'une chaîne ou d'un nombre. Les cordes de guitare qui ne sont pas jouées sont généralement indiquées par un X
, mais vous pouvez choisir une valeur sentinelle différente si cela vous facilite la tâche (comme -1
si vous utilisez des chiffres). La série de 6 positions de frettes peut être entrée comme n'importe quel type de liste, de tableau ou de séquence, une seule chaîne séparée par des espaces ou comme entrée standard — encore une fois, votre choix.
Vous pouvez compter sur l'entrée correspondant à l'un des 4 types d'accords mentionnés ci-dessus.
Veuillez expliquer dans votre message quelle forme de saisie prend votre solution.
Format de sortie
Vous devez soit retourner soit imprimer sur la sortie standard une chaîne décrivant l'accord auquel le doigté est destiné. Cette chaîne est composée de deux parties concaténées ensemble. La capitalisation est importante. Les espaces de fin sont autorisés.
La première partie indique la note fondamentale , l' un des A
, A#
/ Bb
, B
, C
, C#
/ Db
, D
, D#
/ Eb
, E
, F
, F#
/ Gb
, G
ou G#
/ Ab
. (J'utilise au #
lieu de ♯
, et au b
lieu de ♭
, pour éviter d' exiger Unicode.) Notes fondamentales qui peuvent être exprimées sans dièse ou bémol doit être exprimé sans eux (jamais sortie B#
, Fb
ou Dbb
); ceux qui ne peuvent pas être exprimés avec un seul symbole pointu ou plat (c'est-à-dire soit C#
ou Db
, mais jamais B##
). En d'autres termes, vous devez minimiser le nombre d'accidents (objets tranchants ou plats) dans le nom de la note.
La deuxième partie indique le type d'accord, soit vide pour une triade majeure, m
pour une triade mineure, 7
pour la septième dominante, soit m7
pour la septième mineure. Ainsi, un sol majeur est G
sorti simplement comme , tandis qu'un septième mineur en D♯ peut être sorti comme D#m7
ou Ebm7
. Plus d'exemples peuvent être trouvés dans les cas de test à la fin.
Théorie et astuces
Notes de musique
La gamme chromatique a 12 hauteurs par octave. Lorsqu'il est réglé sur un tempérament égal, chacun de ces emplacements est également éloigné de ses voisins 1 . Les hauteurs distantes de 12 demi-tons (une octave) sont considérées comme la même note de musique. Cela signifie que nous pouvons traiter les notes comme des entiers modulo 12, de 0 à 11. Sept d'entre eux ont des noms de lettre 2 de A à G.Ce n'est pas suffisant pour nommer les 12 hauteurs, mais l'ajout de corrections accidentelles: ajout d'un ♯ ( forte) à une note la rend un demi-ton plus haut, et l'ajout d'un ♭ (plat) la rend un demi-ton plus basse.
Accords
Un accord est composé de 2 notes ou plus jouées ensemble. Le type d'accord dépend des relations entre les notes, qui peuvent être déterminées par les distances entre elles. Un accord a une note fondamentale, comme mentionné précédemment. Nous traiterons la note fondamentale comme 0 dans ces exemples, mais c'est arbitraire, et tout ce qui compte dans ce défi est la distance entre les notes en arithmétique modulo. Il y aura toujours un type d'accord unique pour la réponse, soit une triade ou un septième accord . La note fondamentale ne sera pas toujours la hauteur de fréquence la plus basse; choisissez la note fondamentale de telle sorte que vous puissiez décrire l'accord comme l'un des quatre types d'accord suivants:
- Une triade majeure est un accord avec les notes
0 4 7
. - Une triade mineure est un accord avec les notes
0 3 7
. - Un accord de septième dominant (ou majeur / mineur) a les notes
0 4 7 10
. - Un accord de septième mineur (ou mineur / mineur) a les notes
0 3 7 10
. 3
Accordage de guitare
L'accord standard sur une guitare à 6 cordes commence par E sur la corde la plus basse, puis frappe des notes à des intervalles de 5, 5, 5, 4, puis 5 demi-tons en remontant les cordes. En prenant le plus bas E comme 0, cela signifie que gratter toutes les cordes de la guitare vous donne des hauteurs numérotées 0 5 10 15 19 24
, auxquelles le modulo 12 est équivalent 0 5 10 3 7 0
, ou les notes E A D G B E
.
Exemples travaillés
Si votre entrée est 0 2 2 0 0 0
, cela correspond aux notes E B E G B E
, donc juste E, B et G. Ceux-ci forment l'accord Em
, qui peut être vu en les numérotant avec la racine comme E, nous donnant 0 3 7
. (Le résultat serait le même pour X 2 X 0 X 0
, ou 12 14 14 12 12 12
.)
Si votre entrée est 4 4 6 4 6 4
, leur numérotation avec une racine de C♯ donne 7 0 7 10 4 7
, ou 0 4 7 10
alors la réponse est C#7
(ou Db7
). Si c'était le cas 4 4 6 4 5 4
, la numérotation donnerait 7 0 7 10 3 7
, ou 0 3 7 10
, qui est C#m7
(ou Dbm7
).
Cas de test
X 3 2 0 1 0 ---> C
0 2 2 0 0 0 ---> Em
X 2 X 0 X 0 ---> Em
4 4 6 4 6 4 ---> C#7 (or Db7)
4 4 6 4 5 4 ---> C#m7 (or Dbm7)
0 2 2 1 0 0 ---> E
0 0 2 2 2 0 ---> A
X X 4 3 2 2 ---> F# (or Gb)
3 2 0 0 0 1 ---> G7
X X 0 2 1 1 ---> Dm7
3 3 5 5 5 3 ---> C
4 6 6 5 4 4 ---> G# (or Ab)
2 2 4 4 4 5 ---> B7
0 7 5 5 5 5 ---> Am7
7 6 4 4 X X ---> B
8 6 1 X 1 3 ---> Cm
8 8 10 10 9 8 --> Fm
0 19 5 16 8 7 --> Em
6 20 0 3 11 6 --> A# (or Bb)
X 14 9 1 16 X --> G#m (or Abm)
12 14 14 12 12 12 --> Em
15 14 12 12 12 15 --> G
20 X 20 20 20 20 --> Cm7
X 13 18 10 11 10 --> A#7 (or Bb7)
1 par les logarithmes de leurs fréquences
2 ou, au solfège , des noms comme do, re, mi . Dans ce défi, utilisez les noms de lettres.
3 Cela pourrait aussi être appelé un accord majeur de sixième, avec un choix différent de note fondamentale. Dans ce défi, appelez-le par son septième nom mineur.
Réponses:
MATL ,
115114 bytesLe format d'entrée est
[N 3 2 0 1 0]
, oùN
indique une chaîne inutilisée.La chaîne de sortie utilise toujours
#
, nonb
.Essayez-le en ligne! Ou vérifiez tous les cas de test, en deux parties pour éviter l'expiration du compilateur en ligne:
Explication
la source
Fichier .COM MS-DOS (179 octets)
Le fichier (ici affiché en HEX):
L'entrée est donnée via la ligne de commande. Une entrée non valide entraînera un comportement de programme non valide!
Le code assembleur ressemble à ceci:
J'ai déjà vu deux pianistes jouer ensemble "à quatre mains" sur un piano.
Ce cas de test est la première fois que je lis sur des guitaristes faisant ça!
Même en tapant à droite, vous ne pouvez pas jouer un cordon comme celui-ci!
la source
Rubis, 129 octets
Comme la version précédente mais utilise une seule boucle, avec opérateur ternaire pour séquencer entre l'étape d'analyse et l'étape de sortie. Quelques autres modifications mineures ont été nécessaires pour faire ce travail.
Rubis, 136 octets
La fonction Llamda accepte un tableau de 6 nombres comme argument et sort vers stdout. La chaîne inutilisée est représentée par une valeur falsifiée (les seules valeurs falsifiées dans ruby sont
nil
etfalse
.)Explication
J'utilise une représentation des 12 hauteurs basée sur le cercle des quintes . Cela signifie que chaque hauteur est suivie par la hauteur 7 demi-tons plus haut (ou 5 demi-tons plus bas) donnant la séquence
F C G D A E B F# C# G# D# A#
. Il y a 2 avantages à cela. La première est que tous les objets tranchants apparaissent ensemble. L'autre est que les notes à cordes ouvertes de la basse à 5 cordes apparaissent ensemble: GDAEB (la guitare est liée mais légèrement plus complexe, voir ci-dessous).La première boucle s'exécute 6 fois. L'expression
6--~j%5
(équivalente6-(j+1)%5
) donne les valeurs de notes pour les chaînes ouvertes:E=5 A=4 D=3 G=2 B=6 E=5
. À cela, nous ajoutons le nombre de frettes multiplié par 7 (comme on peut le voir ci-dessus, l'ajout d'un demi-ton nous fait avancer de 7 places dans la séquence.) Ensuite, nous prenons le tout modulo 12 et faisons un bitmap des notes qui sont présentes (nous utiliser4097<<note value
pour donner 2 octaves consécutives.)Après avoir composé le bitmap, nous sommes prêts à rechercher l'accord et à le sortir.
Nous sommes intéressés par les notes suivantes:
En commençant par vérifier l'accord F, nous testons pour voir si la racine et le cinquième sont présents: bits 0 et 1 (en comptant du moins significatif: les bits 1 et 2). Afin de rejeter les accords sixième, nous devons également vérifier que le sixième est absent: bit 3 (bit de 8). Donc nous vérifions cela
r&&11==3
et si c'est le cas, nous imprimons l'accord.Nous ignorons le tiers majeur et comptons entièrement sur le bit 9 (tiers mineur) et le bit 10 (septième mineur) pour déterminer le type d'accord. L'expression
r>>9&3
est utilisée pour choisir le type d'accord correct dans un tableau.A la fin de la boucle, on décale l'image bitmap bit à droite de l' un
r/=2
de tester les racines d'accords possibles dans l' ordre:F C G D A E B F# C# G# D# A#
.Non testé dans le programme de test
la source
Javascript (ES6),
335333 octetsJ'adore ce défi et PPCG SE! C'est mon premier golf - les suggestions sont les bienvenues car je suis sûr que cela pourrait être beaucoup amélioré. (éliminé 2 octets car j'avais inclus f = dans le décompte)
La fonction
f
prend un tableau de chaînes, représentant des nombres et «X», commef(['X','3','2','0','1','0'])
et retourne un accord (naturel ou aigu) commeE#m7
. Ajout de nouvelles lignes pour plus de clarté (non inclus dans le nombre d'octets)Exemple d'utilisation:
Pour exécuter des cas de test:
Version non golfée avec explication:
la source