La gamme majeure (ou gamme ionienne) est l'une des gammes musicales les plus couramment utilisées, en particulier dans la musique occidentale. C'est l'une des échelles diatoniques. Comme de nombreuses gammes musicales, il est composé de sept notes: la huitième duplique la première à deux fois sa fréquence de sorte qu'elle s'appelle une octave supérieure de la même note.
Les sept notes de musique sont:
C, D, E, F, G, A, B , C (répété à titre d'exemple)
Une échelle majeure est une échelle diatonique. Prenez la succession précédente de notes comme une gamme majeure (en fait, c'est la gamme C majeur) . La séquence d'intervalles entre les notes d'une gamme majeure est:
entier, entier, moitié, entier, entier, entier, moitié
où "entier" représente un ton entier (une courbe en forme de U rouge sur la figure) et "demi" représente un demi-ton (une ligne rouge brisée sur la figure).
Dans ce cas, de C à D existe un ton entier , de D à E existe un ton entier , de E à F existe moitié ton, etc ...
Nous avons 2 composants qui affectent la distance de ton entre les notes. Ce sont le symbole Sharp (♯) et le symbole plat (♭).
Le symbole Sharp (♯) ajoute un demi-ton à la note. Exemple. De C à D, nous avons mentionné qu'il existe un ton entier, si nous utilisons C♯ à la place C, alors de C♯ à D existe un demi-ton.
Le symbole Flat (♭) fait l'opposé du symbole Sharp, il soustrait le demi-ton de la note. Exemple: De D à E, nous avons mentionné qu'il existe un ton entier, si nous utilisons Db à la place D, alors de Db à E existe un ton et demi.
Par défaut, de Note en Note existe une tonalité entière sauf pour E to F
etB to C
dans lequel n'existe qu'un demi-ton.
Notez que dans certains cas, l'utilisation des hauteurs enharmoniques peut créer un équivalent à une échelle majeure. Un exemple de ceci est C#, D#, E#, F#, G#, A#, B#, C#
où E#
etB#
sont enharmoniques mais l'échelle suit la séquence d'une échelle majeure.
Défi
Étant donné une échelle, émettez une valeur véridique s'il s'agit d'une échelle majeure ou équivalente, sinon émettez une valeur de falsey.
Règles
- Méthode d'E / S standard autorisée
- Code-golf standard règles de s'appliquent
- Vous n'avez pas besoin de prendre en considération la 8ème note. Supposons que l'entrée ne comprendra que 7 notes
- Supposons que le double plat (♭♭), le double tranchant (♯♯) ou le signe naturel (♮) n'existent pas
Cas de test
C, D, E, F, G, A, B => true
C#, D#, E#, F#, G#, A#, B# => true
Db, Eb, F, Gb, Ab, Bb, C => true
D, E, Gb, G, A, Cb, C# => true
Eb, E#, G, G#, Bb, B#, D => true
-----------------------------------------------
C, D#, E, F, G, A, B => false
Db, Eb, F, Gb, Ab, B, C => false
G#, E, F, A, B, D#, C => false
C#, C#, E#, F#, G#, A#, B# => false
Eb, E#, Gb, G#, Bb, B#, D => false
la source
Réponses:
Perl 6 ,
76656359 octets-4 octets grâce à Phil H
Essayez-le en ligne!
Explication
la source
Node.js v10.9.0 ,
78767169 octetsEssayez-le en ligne!
Comment?
Chaque noten est convertie en un nombre négatif en [−118,−71] avec:
Qui donne:
Nous calculons les différences par paires modulo12 entre ces valeurs.
La différence la plus faible possible entre 2 notes est de−47 , il suffit donc d'ajouter 4×12=48 avant d'appliquer le modulo pour être sûr d'obtenir un résultat positif.
Parce que nous appliquons un modulo12 , le décalage produit par a 36mod12=0 demi-ton, tandis que le décalage produit par a 38 mod 12=2 demi-tons.
'#'
est en fait'b'
estla source
JavaScript (Node.js) ,
150131125 octetsEssayez-le en ligne!
-19 octets grâce à Luis felipe
-6 octets grâce à Shaggy
Non golfé:
la source
[...'C0D0EF0G0A0B']
au lieu de'C0D0EF0G0A0B'.split('')
et+""
au lieu de.toString()
sauver quelques octetsx[1]=='#'|-(x[1]=='b')
au lieu dex[1]=='#'?1:(x[1]=='b'?-1:0)
sauvegarder aussi quelques octets-10 % 12 == 2
. Bien queDart ,
198 197 196189 octetsEssayez-le en ligne!
Port lâche de l'ancienne réponse Perl 6 /codegolf//a/175522/64722
Ancienne version :
Fléchette , 210 octets
Essayez-le en ligne!
Non golfé:
Une étape entière est 2, un quart est 1. Mod 12 si vous passez à une octave supérieure. Itère toutes les notes et calcule la différence entre la ième note et la i-1ème note. Concatène le résultat et devrait attendre 221222 (2 entiers, 1 moitié, 3 entiers).
la source
i=1
eni=0
peut réduire un octet en changeantfor(;i<7;i++)
enfor(;++i<7;)
. De plus, les supports{}
peuvent être retirés autour de cette boucle, en mettant l'j+=...
intérieur de la troisième partie de la boucle:for(;++i<7;j+='${(y[0]-y[1])%12}')
. Et une dernière chose est en train de changerreturn j=='221222';
pourreturn'221222'==j;
se débarrasser de l'espace. -6 ( 210 octets ) après ces modifications.if(k>9)k--;if(k>3)k--;
pourk-=k>3?k>9?2:1:0;
etk+=m.length<2?0:m[1]=='#'?1:m[1]=='b'?-1:0;return k;
versreturn m.length<2?k:m[1]=='#'?k+1:m[1]=='b'?k-1:k;
. :)C (gcc) ,
-DA=a[i]
+ 183 = 191 octetsEssayez-le en ligne!
Basé sur la réponse Perl.
Prend l'entrée comme une chaîne large.
Non golfé:
la source
[Wolfram Language (Mathematica) + Music` package], 114 octets
J'adore la musique et j'ai trouvé ça intéressant, mais je jouais au vrai golf quand cette opportunité de golf à code est tombée, donc ma soumission est un peu tardive.
J'ai pensé que j'essaierais cela d'une manière totalement différente, en utilisant des connaissances musicales réelles. Il s'avère que le package musical de Mathematica connaît la fréquence fondamentale des notes nommées. Je convertis d'abord la chaîne d'entrée en séquence de notes nommées. Ensuite, je prends les ratios de chaque note successive et double celle qui est inférieure à 2 (pour tenir compte du décalage d'octave). Ensuite, je compare ces ratios aux ratios de l'échelle ionienne qui a à peu près une différence de fréquence de 6% entre les demi-notes et 12% entre les notes complètes.
Plus de la moitié des octets dépensés ici sont destinés à convertir l'entrée en symboles nommés.
Essayez-le en ligne!
la source
Python 3 ,
175136134114112 octetsEssayez-le en ligne!
Une implémentation Python 3 à une ligne.
Merci à @Arnauld pour l'idée de calculer les tons en utilisant la division et le modulo.
Merci à @Jo King pour -39 octets.
la source
[Python]
269202 octetsAméliorations de
Jo King
:Essayez!
Non golfé, avec pilote d'essai:
la source
Rubis , 109 octets
Essayez-le en ligne!
la source