関連:音楽:この和音には何が含まれていますか?、タブ譜の注意事項、ギターのタブを生成する?、数字のペアをギターの音に変換する
ギターの運指が与えられたら、それが表すコードを出力します。標準の入出力を使用することも、文字列を返す関数を作成することもできます。
入力運指は、次のコードのいずれかに分類され、次のように表現されます(ルートノートがCの場合)。
- メジャートライアド:
C
- マイナートライアド:
Cm
- (支配的)7番目:
C7
- マイナー7:
Cm7
コードが反転している可能性があるため、ルートである最低音に依存することはできません。また、これが現実の世界で簡単または一般的な運指であることを信頼することもできません。より一般的には、プログラムの出力はピッチのオクターブを無視し、同じ音符(つまりA
)に対応するすべてのピッチを等しいものとして扱う必要があります。
これはcode-golfであるため、バイト単位の最短コードが優先されます。
入力形式
入力は、標準チューニング(EADGBE)の6弦ギターの各弦について、その弦が演奏されるフレットを示す一連の6つの値です。また、文字列がまったく再生されないことを示す場合もあります。「ゼロ」フレットはオープンポジションとも呼ばれ、フレット番号はそこからカウントアップされます。ギターに21フレットのポジションがあり、最高のフレットポジションが20番であるとします。
たとえば、入力X 3 2 0 1 0
とは、ギターの首の上の次の位置に1本の指を置くことを意味します。
(6th) |---|---|---|---|---
|-X-|---|---|---|---
|---|---|---|---|---
|---|-X-|---|---|---
|---|---|-X-|---|---
(1st) |---|---|---|---|---
2番目から6番目の弦をかき鳴らします。このASCIIタブに対応します。
e |-0-|
B |-1-|
G |-0-|
D |-2-|
A |-3-|
E |---|
希望する種類の入力を選択する柔軟性があります。各フレットの位置は、文字列または数値として表現できます。演奏されないギターの弦は、一般的にで示されX
ますが、それがあなたにとってより簡単になるなら(-1
数字を使っている場合など)、別のセンチネル値を選択できます。一連の6フレットポジションは、任意のリスト、配列、またはシーケンスタイプ、単一のスペース区切り文字列、または標準入力として入力できます。
上記の4つのコードタイプのいずれかに対応する入力に依存できます。
投稿でソリューションにどのような入力が必要かを説明してください。
出力フォーマット
運指の対象となるコードを説明する文字列を標準出力に戻すか、印刷する必要があります。この文字列は、連結された2つの部分で構成されています。大文字は重要です。末尾の空白は許可されます。
最初の部分が示すルートノート、のいずれかをA
、A#
/ Bb
、B
、C
、C#
/ Db
、D
、D#
/ Eb
、E
、F
、F#
/ Gb
、G
またはG#
/ Ab
。(私が使用している#
代わりに♯
、とb
の代わりに、♭
Unicodeを必要避けるために、。)それらなしで表現しなければならないシャープやフラットずに表現することができるルートノートを(決して出力B#
、Fb
またはDbb
)。できないものは、単一のシャープまたはフラットシンボルで表現する必要があります(つまり、C#
またはのいずれかDb
で、決してB##
)つまり、音符の名前に含まれる臨時記号(シャープまたはフラット)の数を最小限に抑える必要があります。
2番目の部分は、メジャートライアド、m
マイナートライアド、7
ドミナントセブン、またはm7
マイナーセブンスのいずれかのコードのタイプを示します。したがって、Gメジャーは単にとしてG
出力されますが、D♯マイナー7番目はD#m7
またはとして出力されますEbm7
。最後のテストケースには、さらに多くの例があります。
理論とヒント
音符
半音階には、オクターブごとに12ピッチあります。等しい気質に調整されたとき、これらのピッチのそれぞれは、その隣人1から等しく離れています。12 半音(1オクターブ)離れたピッチは、同じ音符と見なされます。これは、0から11までの12を法とする整数のような音符を扱うことができることを意味します。これらの7つは、AからGまでの文字名2を与えられます。シャープ)は音に1半音高く、and(フラット)を追加すると1半音低くなります。
和音
コードは、2つ以上のノートが一緒に演奏されます。和音の種類は、音符間の関係によって決まります。音符間の距離は音符間の距離によって決まります。前述のように、コードにはルートノートがあります。これらの例ではルートノートを0として扱いますが、これは任意であり、この課題で重要なのはモジュロ演算でのノート間の距離です。答えには常に1つのユニークなコードタイプ、トライアドまたは7番目のコードがあります。ルートノートは常に最低周波数のピッチではありません。次の4つのコードタイプのいずれかとしてコードを説明できるようにルートノートを選択します。
- 主要なトライアドはノートと和音です
0 4 7
。 - マイナーなトライアドはノートと和音です
0 3 7
。 - 支配的な(またはメジャー/マイナー)第七の和音は、ノートを持っています
0 4 7 10
。 - マイナー(またはマイナー/マイナー)第七の和音は、ノートを持っています
0 3 7 10
。3
ギターのチューニング
6弦ギターの標準的なチューニングは、最も低い弦のEから始まり、5、5、5、4、5弦の間隔で音符を弾き、弦を上に上げます。最低のEを0とすると、これはギターのすべての弦をかき鳴らして、0 5 10 15 19 24
12を法とする番号付きのピッチ0 5 10 3 7 0
、またはノートを与えることを意味しますE A D G B E
。
実施例
あなたの入力した場合0 2 2 0 0 0
、ノートのこの対応E B E G B E
なので、ちょうどE、B、およびG.これらのフォームのコードEm
たちを与え、Eなどのルートでそれらに番号を付けることで見ることができ、0 3 7
。(これはのために同じであるX 2 X 0 X 0
、または12 14 14 12 12 12
)。
入力がの場合、4 4 6 4 6 4
これらをC♯のルートで番号付けすると7 0 7 10 4 7
、またはが得られる0 4 7 10
ため、答えはC#7
(またはDb7
)です。それは代わりにした場合は4 4 6 4 5 4
、番号が与える7 0 7 10 3 7
、または0 3 7 10
、であるC#m7
(またはDbm7
)。
テストケース
X 3 2 0 1 0 ---> C
0 2 2 0 0 0 ---> Em
X 2 X 0 X 0 ---> Em
4 4 6 4 6 4 ---> C#7 (or Db7)
4 4 6 4 5 4 ---> C#m7 (or Dbm7)
0 2 2 1 0 0 ---> E
0 0 2 2 2 0 ---> A
X X 4 3 2 2 ---> F# (or Gb)
3 2 0 0 0 1 ---> G7
X X 0 2 1 1 ---> Dm7
3 3 5 5 5 3 ---> C
4 6 6 5 4 4 ---> G# (or Ab)
2 2 4 4 4 5 ---> B7
0 7 5 5 5 5 ---> Am7
7 6 4 4 X X ---> B
8 6 1 X 1 3 ---> Cm
8 8 10 10 9 8 --> Fm
0 19 5 16 8 7 --> Em
6 20 0 3 11 6 --> A# (or Bb)
X 14 9 1 16 X --> G#m (or Abm)
12 14 14 12 12 12 --> Em
15 14 12 12 12 15 --> G
20 X 20 20 20 20 --> Cm7
X 13 18 10 11 10 --> A#7 (or Bb7)
1周波数の対数で
2または、ソルフェージュでは、do、re、miなどの名前。このチャレンジでは、レター名を使用します。
3これは主要な第6和音とも呼ばれ、ルートノートの選択が異なります。このチャレンジでは、マイナー7番目の名前で呼び出します。