La mayoría de ustedes probablemente conozca la escala C mayor:
C D E F G A B C
La escala mayor se caracteriza por los intervalos entre notas adyacentes, que medidos en semitonos son:
2 2 1 2 2 2 1
A partir de estos intervalos, podemos construir cualquier escala principal a partir de cualquier nota (la clave de la escala). Las 12 notas en nuestro sistema de afinación de temperamento igual de 12 tonos son:
C C♯ D D♯ E F F♯ G G♯ A A♯ B
equivalentemente (sustituyendo algunos equivalentes enarmónicos ):
C D♭ D E♭ E F G♭ G Ab A B♭ B
con un semitono entre cada par de notas adyacentes.
Cada escala debe tener las siete notas en orden, comenzando por la tecla. De lo contrario, podría tener dos notas en la misma línea del pentagrama, lo que sería confuso. Entonces, en G # major / ionian, tienes F ## en lugar de G; los músicos solo verán en qué parte del pentagrama está la nota, ya han aprendido los accidentes para cada escala. De hecho, en G # major , F ## está representado en la línea de F ## sin accidentales, los accidentales están en la firma clave, pero como esa firma clave requeriría 2 objetos punzantes para F, generalmente esto se anota como Ab mayor.
Cambiando los 2 2 1 2 2 2 1
intervalos, llegamos a siete modos diferentes de la escala diatónica:
- Jónico :
2 2 1 2 2 2 1
- corresponde a la escala mayor - Dorian :
2 1 2 2 2 1 2
- Frigio :
1 2 2 2 1 2 2
- Lidia :
2 2 2 1 2 2 1
- Mixolidio :
2 2 1 2 2 1 2
- Eólico :
2 1 2 2 1 2 2
- corresponde a la escala menor natural, y a la escala menor melódica al descender (al subir, la escala menor melódica ha aumentado 6º y 7º grado. También hay una escala menor armónica, con un 7º grado elevado en comparación con la natural menor). - Locrian :
1 2 2 1 2 2 2
Entonces, el desafío es escribir un programa que tome como entrada (a través de stdin ) una clave y un modo y produzca (a través de stdout ) la escala correspondiente. Algunos casos de prueba ( stdin ( key
mode
) => stdout ( scale
)):
Input: Output:
C mixolydian => C D E F G A Bb
F mixolydian => F G A Bb C D Eb
G mixolydian => G A B C D E F
G# ionian => G# A# B# C# D# E# F##
Bb aeolian => Bb C Db Eb F Gb Ab
Referencias adicionales:
¿Cuántas teclas (mayores y menores) hay? ¿Por qué?
Respuestas:
GolfScript, 96 caracteres
Solución de Golfscript que se puede probar en línea .
Nota: Como en los ejemplos, la clave debe estar en mayúscula, mientras que el modo debe estar en minúscula.
Ejemplos:
fuente