A maioria de vocês provavelmente conhece a escala maior C:
C D E F G A B C
A escala maior é caracterizada pelos intervalos entre as notas adjacentes, medidas em semitons :
2 2 1 2 2 2 1
A partir desses intervalos, podemos construir qualquer escala maior iniciando em qualquer nota (a chave da escala). As 12 notas em nosso sistema de ajuste de temperamento igual a 12 tons são:
C C♯ D D♯ E F F♯ G G♯ A A♯ B
equivalentemente (substituindo alguns equivalentes enarmônicos ):
C D♭ D E♭ E F G♭ G Ab A B♭ B
com um semitom entre cada par de notas adjacentes.
Cada escala deve ter as sete notas em ordem, começando pela tecla. Caso contrário, você poderia ter duas notas na mesma linha do pentagrama, o que seria confuso. Então, em G # major / ionian, você tem F ## em vez de G; os músicos apenas observam onde está a nota no pentagrama, eles já aprenderam os acidentes de cada escala. De fato, em G # major , F ## é representado na linha de F ## sem acidentes, os acidentes estão na assinatura da chave - mas como essa assinatura exigiria 2 sharps para F, geralmente isso é anotado como Ab major.
Mudando os 2 2 1 2 2 2 1
intervalos, chegamos a sete modos diferentes da escala diatônica:
- Jónico :
2 2 1 2 2 2 1
- corresponde à escala maior - Dorian :
2 1 2 2 2 1 2
- Frígio :
1 2 2 2 1 2 2
- Lídio :
2 2 2 1 2 2 1
- Mixolidiano :
2 2 1 2 2 1 2
- Eólios :
2 1 2 2 1 2 2
- corresponde à escala menor natural e à escala menor melódica ao descer (quando ascendente, a escala menor melódica aumentou 6 e 7 graus. Há também uma escala menor harmônica, com um 7º grau elevado em comparação com o natural menor). - Locrian :
1 2 2 1 2 2 2
Portanto, o desafio é escrever um programa que tome como entrada (via stdin ) uma tecla e um modo e produza (via stdout ) a escala correspondente. Alguns casos de teste ( 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
Referências adicionais:
Quantas chaves (maiores e menores) existem? Por quê?
Respostas:
GolfScript, 96 caracteres
Solução Golfscript que pode ser testada online .
Nota: Como nos exemplos, a tecla deve estar em maiúscula enquanto o modo deve ser fornecido em minúscula.
Exemplos:
fonte