Un diagramme de manche de guitare ressemble à ceci:
0 1 2 3 4 5 6 7 8 9 10 11 12 <- Fret number (0 means it's open)
|-E--F--F#-G--G#-A--A#-B--C--C#-D--D#-E
|-B--C--C#-D--D#-E--F--F#-G--G#-A--A#-B
|-G--G#-A--A#-B--C--C#-D--D#-E--F--F#-G
|-D--D#-E--F--F#-G--G#-A--A#-B--C--C#-D
|-A--A#-B--C--C#-D--D#-E--F--F#-G--G#-A
|-E--F--F#-G--G#-A--A#-B--C--C#-D--D#-E
Comme vous pouvez le voir, la première chaîne (du haut) ouverte est un E
. La première case de la première corde est un F
. La quatrième case de la troisième corde est un B
. Notez que la première note est la case zéro, pas la première.
Cela peut être écrit avec des chiffres sur le format string, fret
. Les cordes sont numérotées de 1 à 6 de haut en bas. Les frettes sont numérotées de 0 à 12 de gauche à droite. Le premier E
est donc 1, 0
. Quelques autres exemples:
1, 0 --> E
1, 1 --> F
3, 5 --> C
5, 1 --> A#
6, 6 --> A#
Défi:
Prenez des N
paires de nombres ( s
et f
) et générez une succession de notes délimitées.
- L'entrée peut être dans n'importe quel format approprié. tuples, matrice 2D, deux listes séparées, une liste entrelacée (chaîne, frette, chaîne, frette ...) etc.
- La tonalité de sortie doit être séparée, mais le délimiteur est facultatif (virgule, espace, tiret ...). La sortie peut être en majuscule ou en minuscule.
s
(pour la chaîne) sera dans la plage[1, 6]
(vous pouvez choisir d'avoir i 0 indexé)f
(pour la frette) sera dans la plage[0, 12]
Cas de test et exemples:
1 4 5 2 1 3 <- String
4 2 6 3 5 1 <- Fret
G# E D# D A G#
6 2 3 1 4 2 3 2 2 2 6 5 2
0 1 2 3 4 5 6 7 8 9 10 11 12
E C A G F# E C# F# G G# D G# B
3 3 3 3 3 3 3 3 3 3 3 3 3 <- String
0 3 5 0 3 6 5 0 3 5 3 0 0 <- Fret
G A# C G A# C# C G A# C A# G G
// The same test case, but different input and output format:
(3,0)(3,3)(3,5)(3,3)(3,6)(3,5)(3,0)(3,3)(3,5)(3,3)(3,0)(3,0)
G,A#,C,G,A#,C#,C,G,A#,C,A#,G,G
Bonne chance et bon golf!
Réponses:
05AB1E ,
48474340 octetsUtilise l' encodage CP-1252 .
Les chaînes et les frettes sont basées sur 0.
Explication
Essayez-le en ligne!
7 octets enregistrés grâce à Adnan
la source
"AA#BCC#DD#EFF#GG#"•7V3•3BS£
au lieu de"A A# B C C# D D# E F F# G G#"#
quelques octets plus court :)."AA#BCC#DD#EFF#GG#"
chaîne:•™ÎÚ,Ülu•žh'#A«‡
(puisque les minuscules sont autorisées: p).JavaScript (ES6),
7970 octetsNécessite des chaînes basées sur 1. Edit: 9 octets enregistrés en calculant directement la conversion de chaîne en frette, basée sur l'ancienne réponse de @ nimi.
la source
Mathematica, 62 octets (non concurrent)
Le
{24,19,15,10,5,0}
et leE2
représentent les sons de cordes ouvertes des six cordes de guitare (par exemple, la corde du haut est de 24 demi-tons au-dessus de la note E2). Non compétitif car il n'imprime pas le nom des notes - il joue la séquence de notes! (seulement si vous avez Mathematica, malheureusement) Par exemple,joue les 4 premières mesures du Canon de Pachelbel. (qui représente autant de Canon de Pachelbel que je peux le supporter)
la source
MATL ,
484745 octetsMerci à @Emigna pour une correction concernant le format d'entrée.
Guitare et golf de code ... J'ai dû répondre à celui-ci!
Le format d'entrée est: un tableau de chaînes (basées sur 1), puis un tableau de frettes (basées sur 0).
Essayez-le en ligne!
Explication
Certaines fonctionnalités linguistiques utilisées dans cette réponse:
Code commenté:
la source
Java, 174
Non golfé:
la source
C,
104103 octetsPrend les nombres par
string fret
paires sur stdin et sort la note après chaque paire. Par exemple:la source
Rubis, 63 octets
prend un tableau de tableaux à 2 éléments, dans l'ordre
[string,fret]
.Explication
Dans l'accordage standard, la guitare est l'un des rares instruments à cordes (à archet ou fretté) qui a des intervalles incohérents entre ses cordes. La plupart ont soit un intervalle cohérent de 5 demi-tons entre toutes les paires de chaînes adjacentes (un "quatrième") ou un intervalle cohérent de 7 demi-tons entre toutes les paires de chaînes adjacentes (un "cinquième"). Cela correspond à des rapports de fréquence de 3: 4 et 2: 3 respectivement, et sont la deuxième importance seulement à "l'octave" avec un rapport de fréquence 1: 2.
La guitare a principalement des intervalles de 5 demi-tons. S'il en avait 5, il y aurait une différence de 25 demi-tons entre la 1ère et la 6ème corde. Au lieu de cela, l'intervalle entre la 2e et la 3e chaîne est réduit à 4 demi-tons, ce qui donne une différence de 24 demi-tons (2 octaves), ce qui est préférable pour jouer des accords.
Cela n'est pas pratique pour le programme, nous commençons donc par changer l'intonation de guitare à 1 index en une intonation de basse à 5 cordes indexée, qui a tous les intervalles de 5 demi-tons:
Ensuite, nous ajoutons 2 et accordons une basse fictive à 12 cordes, avec l'intonation des cordes ouvertes comme suit, et tous les intervalles étant de 5 demi-tons (des "basses" à 12 cordes existent mais je ne suis pas sûr qu'il y en ait beaucoup avec précisément ce réglage.)
Comme on peut le voir, tous les objets tranchants sont regroupés. Ce modèle peut être répété à l'infini. Il est connu comme le « cercle des quintes » et est essentiel à l'échelle musicale occidentale (avec un peu d'ajustement de réglage du cercle peut être fermé en raison du fait que
(3/2)**12
et2**7
sont des nombres très similaires.Nous traitons maintenant le paramètre fret. Contrairement à de nombreuses autres réponses ici, qui traduisent le paramètre de chaîne en un certain nombre de frettes, je traduis le paramètre de frette en un certain nombre de chaînes. Dans le tableau ci-dessus, on peut voir que l'ajout de 7 au numéro de chaîne nous place sur une chaîne dont le nom de note est supérieur d'un demi-ton. (C'est dans une octave complètement différente mais cela n'a pas d'importance.) Donc, nous ajoutons
i[1]*7
au numéro de chaîne et le prenons modulo 12:Nous soustrayons cela de 6 pour obtenir un nombre compris entre 6 et -5 et recherchons la lettre
BEADGCF
(Ruby permet aux indices négatifs de revenir à la fin du tableau.) Sin>=7
nous devons ajouter un#
symbole pour terminer la sortie .Programme de test
Production
la source
C #, 131 octets
Entrez deux listes distinctes, les chaînes sont basées sur 1.
la source
Clora , 55 octets
@T[0,7,2,10,5,0,7]+N%12@T[,A,A#,B,C#,D,D#,E,F,F#,G,G#]!
Explication
@
mode numérique (lire l'entrée sous forme de nombres)T[0,7,2,10,5,0,7]
Transformer l'entrée à l'aide du tableau, ex tableau [Input]+N
Ajouter N (valeur d'entrée suivante) à l'entrée actuelle%12
Modulo 12 la valeur d'entrée actuelle@
Désactiver le mode numériqueT[,A,A#,B,C#,D,D#,E,F,F#,G,G#]
Traduire l'entrée en un tableau!
Utiliser l'entrée comme valeur de sortiela source
Java 7
197, 163 octetsNon golfé
la source
Python 2,
94, 91, 88 octetsIl y a probablement des améliorations évidentes à apporter. L'entrée est une liste de paires et les chaînes sont indexées 0, par exemple:
la source
Haskell,
8382 octetsPrend une liste de chaînes et une liste de frettes, toutes deux indexées 0. Exemple d'utilisation:
Dans la liste infinie de notes commençant par
A#
, supprimez le nombre de notes données par la liste[6,1,9,4,11,6]
à l'index de la chaîne et choisissez la note à l'index de la frette dans la liste restante.la source
(s*7)+(s>2)
- donc j'utilise maintenant cela dans ma réponse.JavaScript (ES6),
8281 octetsJe voulais essayer une réponse entièrement mathématique, mais cela s'est avéré un peu long. Peut-être qu'il y a un moyen de jouer au golf ...
Extrait de test
Afficher l'extrait de code
la source
toString(17)
mais j'ai eu du mal à l'obtenir dans un nombre d'octets raisonnable.PHP, 102 octets
Saisie sous forme de tableau multiple à la fois 0 basé par exemple sur «[[2,0], [5,3], [2,12], [3,8], [0,3]]»
Belle alternative 106 octets pour définir le # basé sur le mod 7 congruent
la source