年は930年であり、グレゴリオ教会は問題を抱えています。彼らは数千ページの聖歌音楽を持っていますが、問題は実際の組織システムではなく、すべての楽譜が単に山に投げ込まれたことです。
Cartographers 'Guildのユーザーgamerprinterによる画像。
教会はすべての楽譜を整理する必要があるため、中世のソフトウェアエンジニアを雇ってプログラムを作成し、彼らのために整理しました。あなたは雇用されたソフトウェアエンジニアです。しかし、中世の編集プロセスでは、遅い聖書の筆記者のチームによってプログラムが紙に書き込まれます。スクライブのチームがコードをコンパイルするのにかかる時間を短縮するには、プログラムをできるだけ小さくする必要があります。
教会は、聖歌音楽が書かれている音階に基づいて編成されることを望んでいます。教会の聖歌音楽はすべてドリアン音階で書かれています。特定の音楽の音符が与えられると、プログラムはそれが入っているドリアン音階を出力します。ここでは、ドリアン音階とは何かを正確に説明します。すでに知っている場合は、このセクションをスキップできます。
どのメロディにも12の音符があります。ここに順序があります:
C C# D D# E F F# G G# A A# B
半音は、(使用して表されるS
)の周りにラッピング(Bから半音アップバックCすることであろうように)、右に一歩をインクリメントします。トーン(使用して表現はT
)2つの半音です。たとえば、F#からの半音はGです。F#からの半音はG#です。
ドリアンスケールを作成するには、リスト内の任意の音符から始めて、次のパターンで上に移動し、検出した音符をリストします。
T, S, T, T, T, S
例。私はAから始めます。ドリアンスケールのノートは次のようになります。
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があります。Aから始めたので、これをAのドリアンスケールと呼びます。したがって、12種類のドリアン音階があり、各音階は、元の音符にちなんで命名されています。それらはそれぞれ、異なる位置から始めて、同じパターンのトーンとセミトーンを使用します。私の説明に一貫性がない場合は、ウィキペディアも参照してください。
プログラムの入力は、プログラムに適したもの(STDIN、コマンドライン引数などraw_input()
)から指定できます。変数で事前に初期化されていない場合があります。入力は、曲のメロディーを表すコンマ区切りのノートのリストになります。メモが繰り返される場合があります。入力には、作品のスケールを決定的に推測できる十分な数のノートが常にあります。入力例:
B,B,D,E,D,B,A,G#,A,G#,E,D,F#,E,F#,E,F#,G#,A
プログラムの出力はstring Dorian scale in X
である必要があります。Xはスケールの開始音です。入力例の出力:
Dorian scale in B
これをB(B C# D E F# G# A
)のドリアン音階と比較すると、メロディのすべての音がこの音階内にあることがわかります。この場合、ノートC#は使用されません。ただし、B Dorianを正しいキーとして明確に識別するのに十分な注意事項があります。他のドリアン音階は当てはまりません。他の音階を試しても、音階に属さないメロディーの音が少なくとも1つは常にあるからです。
これはコードゴルフであるため、文字数が最も少ないエントリが優先されます。ご質問がある場合はコメント欄でお尋ねください。