Большинство из вас, вероятно, знают мажорную шкалу:
C D E F G A B C
Основная шкала характеризуется интервалами между соседними нотами, которые измеряются в полутонах :
2 2 1 2 2 2 1
Из этих интервалов мы можем построить любую крупную шкалу, начиная с любой ноты ( ключ шкалы). 12 нот в нашей 12-тональной системе настройки:
C C♯ D D♯ E F F♯ G G♯ A A♯ B
эквивалентно (заменяя некоторые энгармонические эквиваленты ):
C D♭ D E♭ E F G♭ G Ab A B♭ B
с полутоном между каждой парой смежных нот.
Каждая шкала должна иметь семь нот по порядку, начиная с ключа. В противном случае вы могли бы иметь две заметки в одной строке пентаграммы, что может привести к путанице. Итак, в G # major / ionian у вас есть F ## вместо G; Музыканты просто посмотрят, где в пентаграмме записка, они уже выучили случайности для каждой шкалы. Действительно, в G # major F ## представляется в строке F ## без случайных ошибок, случайные числа находятся в ключевой сигнатуре - но поскольку для этой ключевой сигнатуры для F потребовалось бы 2 резких нажатия, обычно это обозначается как Ab major.
Сдвигая 2 2 1 2 2 2 1
интервалы, мы приходим к семи различным режимам диатонической шкалы:
- Ионический :
2 2 1 2 2 2 1
- соответствует мажорной шкале - Дориан :
2 1 2 2 2 1 2
- Фригийский :
1 2 2 2 1 2 2
- Лидиан :
2 2 2 1 2 2 1
- Mixolydian :
2 2 1 2 2 1 2
- Aeolian :
2 1 2 2 1 2 2
- соответствует естественной минорной шкале и мелодической минорной шкале при спуске (при подъеме мелодическая минорная шкала поднялась на 6-ю и 7-ю ступени. Существует также гармоническая минорная шкала с повышенной 7-й ступенью по сравнению с естественной незначительный). - Locrian :
1 2 2 1 2 2 2
Таким образом, задача состоит в том, чтобы написать программу , которая принимает в качестве входных данных (через стандартный ввод ) ключ и режим и выходы (через стандартный вывод ) соответствующую шкалу. Некоторые тестовые случаи ( 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
Дальнейшие ссылки:
Сколько (главных и второстепенных) ключей существует? Почему?
Ответы:
GolfScript, 96 символов
Решение Golfscript, которое можно протестировать онлайн .
Примечание. Как и в примерах, ключ должен быть в верхнем регистре, а режим - в нижнем.
Примеры:
источник