930 год, и у Григорианской Церкви есть проблема. У них тысячи страниц музыкального пения, но проблема в том, что все ноты были просто брошены в кучу, вместо того, чтобы иметь какую-либо реальную систему организации:
Изображение пользователя gamerprinter в Гильдии картографов .
Церкви нужно организовать все ноты, поэтому они наняли средневекового инженера-программиста, чтобы написать программу, чтобы организовать ее для них. Вы - инженер по программному обеспечению, который был нанят. Тем не менее, процесс компиляции в средневековье вовлекает программу, написанную на бумаге командой медленных библейских писцов. Чтобы уменьшить время, необходимое команде сценаристов для компиляции вашего кода, вы должны сделать программу как можно меньше.
Церковь хочет, чтобы музыка пения была организована исходя из музыкальной гаммы, в которой они написаны. Вся музыка пения Церкви написана в дорических масштабах . Учитывая ноты определенного музыкального произведения, ваша программа выведет шкалу Дориана, в которой она находится. Здесь я объясню, что такое шкала Дориана. Если вы уже знаете, вы можете пропустить этот раздел.
В любой мелодии 12 возможных нот. Вот они в порядке:
C C# D D# E F F# G G# A A# B
Полутона (представлено с использованием S
) является приращение на один шаг вправо, обтекание (так полутон вверх от B будет обратно в C). Тональный сигнал (представлен с использованием T
) два полутона. Например, полутон вверх от F # будет G. Тон вверх от F # будет G #.
Чтобы создать шкалу Дориана, мы начинаем с любой заметки в списке, а затем перемещаемся вверх по следующему шаблону, перечисляя встречающиеся заметки:
T, S, T, T, T, S
Пример. Я начинаю с А. Примечания моей дорианской шкалы становятся:
A
B (up a tone)
C (up a semitone)
D (up a tone)
E (up a tone)
F# (up a tone)
G (up a semitone)
Шкала имеет ноты A, B, C, D, E, F # и G. Так как я начал с А, мы называем это Дориан масштаба в . Таким образом, существует 12 различных шкал Дориана, каждая из которых названа в честь записки, с которой они начали. Каждый из них использует один и тот же шаблон тонов и полутонов, только начиная с другой позиции. Если мое объяснение не является последовательным, вы также можете обратиться к Википедии .
Ввод программы может быть получен из того, что подходит для вашей программы (например, STDIN, аргумент командной строки, raw_input()
). Это может быть предварительно не инициализировано в переменной. На входе будет список нот, разделенных запятыми, представляющих мелодию произведения. Там могут быть повторные заметки. На входе всегда будет достаточно разных заметок, чтобы можно было окончательно определить масштаб произведения. Пример ввода:
B,B,D,E,D,B,A,G#,A,G#,E,D,F#,E,F#,E,F#,G#,A
Выходные данные программы должны быть строкой Dorian scale in X
, где X - начальная нота шкалы. Выходные данные примера ввода:
Dorian scale in B
Сравнивая это с дорианской шкалой в B ( B C# D E F# G# A
), мы видим, что все ноты мелодии находятся в пределах этой шкалы. Примечание C # в этом случае не используется. Однако есть достаточно примечаний, чтобы однозначно идентифицировать Б. Дориана как правильный ключ. Никакая другая шкала Дориана не подходит, потому что независимо от того, какую другую шкалу мы пробуем, всегда есть хотя бы одна нота мелодии, которая не принадлежит этой шкале.
Это код гольф, поэтому выигрывает вход с кратчайшим количеством символов. Задайте в комментариях, если у вас есть вопросы.