これは音楽の逆です:この和音には何がありますか?、指定された和音で音符を印刷します。今回の入力はコード内のノートのリストであり、あなたの仕事はそれがどのコードであるかを出力することです。
プログラムは、次の3和音をサポートする必要があります。例はルートCで示されています。他のルートを持つコードはすべてのノートが回転した同じコードなので、Cはそのルートノートになります。たとえば、DmajはD、F#、Aで構成されます。
C C#D D#E F F#G G#A A#B
Db Eb Gb Ab Bb
Cmaj C E G
Cm C D# G
Caug C E G#
Cdim C D# F#
Csus4 C F G
Csus2 C D G
CaugはEaugおよびG#augと同じであり、Csus4はFsus2と同じであることに注意してください。どちらでも出力できますが、すべて出力するとおまけがあります。
ボーナスの7番目のコードは次の表のとおりです。
C C#D D#E F F#G G#A A#B
Db Eb Gb Ab Bb
C7 C E G A#
Cm7 C D# G A#
Cmmaj7 C D# G B
Cmaj7 C E G B
Caug7 C E G# A#
Cdim7 C D# F# A
ルール
- 完全なプログラムまたは関数を記述できます。
- 入力は、スペースまたは別の便利な文字で区切られたメモのリストです。文字列の配列(関数の引数から入力を取得する場合)またはそのような配列の文字列表現にすることもできます。
- 入力は特定の順序である必要はありません。
- 入力にノートが重複している可能性があります。それらは1つしかないのと同じように扱う必要があります。
- 出力はコードの名前です。複数の名前を出力する場合、同じ入力規則が適用されます。
- 入力がサポートされているコードでない場合は、ノートをそのまま印刷する必要があります。プログラムは、上記の表に記載されていない他のコードもサポートできます(有効ですが、ボーナスはありません)。
- ウィキペディアの記事に記載されている他の表記法を使用できます。ただし
C
、Cメジャーを選択する場合は、どちらの場合も人間が読める接頭辞を追加して、単一の音符でコードを区別する必要があります。 - このタスクに組み込み関数を使用することはできません(ある場合)。
- これはコードゴルフです。バイト単位の最短コードが優先されます。
例
- 入力:
C D# G
出力:Cm
。 - 入力:
C Eb G
出力:Cm
。 - 入力:
C Eb F#
出力:Cdim
。 - 入力:
F A C#
出力:Faug
、Aaug
、C#aug
、Dbaug
またはFaug Aaug C#aug
、Faug Aaug Dbaug
いずれかのためです。 - 入力:
F D F F F F A A F
出力:Dm
。 - 入力:
C D
出力:C D
。
ボーナス
- 解釈が複数ある場合にそれらをすべて出力する場合は-30(aug、sus4 / sus2およびdim7の場合)。
- -70が7番目のコードもサポートする場合。
- -200(MIDI入力を受け入れ、受け取った各コードを出力する場合)。ノートは同時に開始または終了する必要がないことに注意してください。中間状態で何が起こるかを決定します(クラッシュしないか、動作を停止しない限り)。パーカッションチャンネルにノートがない(または便利な場合はチャンネルが1つしかない)と考えるかもしれません。特にプラットフォームに依存する場合は、テスト用にテキスト(または配列)バージョンも提供することをお勧めします。
入力はフラットにすることができますか、それともシャープのみを使用していますか?B#などのメモを処理する必要がありますか?
—
feersum
@feersum(200ボーナスを要求しない限り)フラットを使用できます。いくつかの例を追加しました。あなたはハンドルに必要としない
—
jimmy23013
B#
、Cb
など
あなたは言う
—
Gareth
Csus4 is the same as Gsus2
。あなたはCsus2 is the same as Gsus4
そう思いませんか?
@Gareth ...はい。修繕。
—
jimmy23013