Siehe auch: Musik: Was ist in diesem Akkord? , Hinweise zur Tabulatur , Gitarren-Tabs generieren? , Zahlenpaare in Gitarrennoten übersetzen
Geben Sie bei gegebenem Gitarrengriff den Akkord aus, den er repräsentiert. Sie können die Standardeingabe und -ausgabe verwenden oder eine Funktion schreiben, die eine Zeichenfolge zurückgibt.
Die eingegebenen Fingersätze können als einer der folgenden Akkorde klassifiziert werden, die wie folgt ausgedrückt werden (wenn der Grundton C wäre):
- Haupttriade:
C
- Moll-Triade:
Cm
- (dominante) siebte:
C7
- Moll 7 .:
Cm7
Der Akkord ist möglicherweise invertiert, sodass Sie sich nicht darauf verlassen können, dass die unterste Note der Grundton ist. Sie können sich auch nicht darauf verlassen, dass dies in der realen Welt ein einfacher oder üblicher Fingersatz ist. Im Allgemeinen muss die Ausgabe Ihres Programms die Oktaven der Tonhöhen ignorieren und alle Tonhöhen, die derselben Musiknote (dh derselben Note A
) entsprechen, als gleich behandeln.
Das ist Code-Golf , also gewinnt der kürzeste Code in Bytes.
Eingabeformat
Die Eingabe ist eine Reihe von 6 Werten, die für jede Saite einer 6-saitigen Gitarre in der Standardstimmung (EADGBE) angeben, an welchem Bund diese Saite gespielt wird. Dies könnte auch darauf hinweisen, dass die Saite überhaupt nicht gespielt wird. Der "nullte" Bund ist auch als die offene Position bekannt, und die Bundnummern zählen von dort aufwärts. Angenommen, die Gitarre hat 21 Bundpositionen, so dass die höchste Bundposition die Nummer 20 ist.
Zum Beispiel X 3 2 0 1 0
bedeutet die Eingabe , dass Sie Ihre Finger an den folgenden Stellen am oberen Rand des Gitarrenhalses platzieren:
(6th) |---|---|---|---|---
|-X-|---|---|---|---
|---|---|---|---|---
|---|-X-|---|---|---
|---|---|-X-|---|---
(1st) |---|---|---|---|---
und Klimpern der 2. bis 6. Saite. Es entspricht dieser ASCII-Registerkarte :
e |-0-|
B |-1-|
G |-0-|
D |-2-|
A |-3-|
E |---|
Sie können die Art der Eingabe flexibel auswählen: Jede Bundposition kann als Zeichenfolge oder als Zahl ausgedrückt werden. Gitarrensaiten, die nicht gespielt werden, werden normalerweise mit einem gekennzeichnet X
. Sie können jedoch einen anderen Sentinel-Wert auswählen, wenn dies für Sie einfacher ist (z. B. -1
wenn Sie Zahlen verwenden). Die Reihe von 6 Bundpositionen kann als Liste, Array oder Sequenztyp, als einzelne durch Leerzeichen getrennte Zeichenfolge oder als Standardeingabe eingegeben werden.
Sie können sich auf den Eingang verlassen, der einem der oben genannten 4 Akkordtypen entspricht.
Bitte erläutern Sie in Ihrem Beitrag, welche Form der Eingabe Ihre Lösung annimmt.
Ausgabeformat
Sie müssen einen String, der den Akkord beschreibt, für den der Fingersatz bestimmt ist, entweder zurückgeben oder zur Standardausgabe drucken. Diese Zeichenfolge besteht aus zwei miteinander verbundenen Teilen. Kapitalisierung Angelegenheiten. Leerzeichen dürfen nachgestellt werden.
Der erste Teil gibt die Grundnote , eines A
, A#
/ Bb
, B
, C
, C#
/ Db
, D
, D#
/ Eb
, E
, F
, F#
/ Gb
, G
oder G#
/ Ab
. (Ich verwende #
statt ♯
, und b
statt ♭
zu vermeiden Unicode erfordert.) Root stellt fest , dass ohne scharfe oder flach ausgedrückt werden kann , muss ohne sie ausgedrückt werden (nie ausgegeben B#
, Fb
oder Dbb
); diejenigen, die nicht ausgedrückt werden können, müssen durch ein einzelnes scharfes oder flaches Symbol ausgedrückt werden (dh entweder C#
oder Db
, aber niemals B##
). Mit anderen Worten, Sie müssen die Anzahl der Vorzeichen (scharfe oder flache Stellen) im Namen der Notiz minimieren.
Der zweite Teil gibt die Art des Akkords an, entweder leer für eine Dur-Triade, m
für eine Moll-Triade, 7
für die dominante Septime oder m7
für die Moll-Septime. So wird ein G-Dur einfach als ausgegeben G
, während ein d-Moll-Septime als entweder D#m7
oder ausgegeben werden könnte Ebm7
. Weitere Beispiele finden Sie in den Testfällen am Ende.
Theorie & Hinweise
Musiknoten
Die chromatische Skala hat 12 Tonhöhen pro Oktave. Bei gleicher Stimmung ist jede dieser Tonhöhen gleich weit von ihren Nachbarn 1 entfernt . Tonhöhen, die 12 Halbtöne voneinander entfernt sind (eine Oktave), gelten als dieselbe Note. Dies bedeutet, dass wir Noten wie ganze Zahlen modulo 12 von 0 bis 11 behandeln können. Sieben von ihnen werden mit den Buchstaben 2 von A bis G bezeichnet. scharf) zu einer Note macht es einen Halbton höher, und das Hinzufügen eines ♭ (flach) macht es einen Halbton niedriger.
Akkorde
Ein Akkord besteht aus 2 oder mehr gleichzeitig gespielten Noten. Die Art des Akkords hängt von den Beziehungen zwischen den Noten ab, die durch die Abstände zwischen ihnen bestimmt werden können. Ein Akkord hat, wie bereits erwähnt, einen Grundton. In diesen Beispielen wird der Grundton als 0 behandelt, dies ist jedoch willkürlich und alles, was bei dieser Herausforderung wichtig ist, ist der Abstand zwischen den Noten in Modulo-Arithmetik. Es gibt immer einen eindeutigen Akkordtyp für die Antwort, entweder eine Triade oder einen siebten Akkord . Der Grundton ist nicht immer die Tonhöhe mit der niedrigsten Frequenz. Wählen Sie den Grundton so, dass Sie den Akkord als einen der vier folgenden Akkordtypen beschreiben können:
- Eine Dur-Triade ist ein Akkord mit den Noten
0 4 7
. - Eine Moll-Triade ist ein Akkord mit den Noten
0 3 7
. - Ein dominanter (oder Dur / Moll) Septakkord hat die Noten
0 4 7 10
. - Ein Moll- (oder Moll- / Moll-) Septakkord enthält die Noten
0 3 7 10
. 3
Gitarrenstimmung
Standardstimmung auf einer 6-saitigen Gitarre beginnt mit E auf der untersten Saite und trifft dann Noten in Intervallen von 5, 5, 5, 4, dann 5 Halbtönen, die die Saiten hinaufgehen. Wenn Sie das niedrigste E als 0 nehmen, bedeutet dies, dass Sie durch das Anschlagen aller Saiten der Gitarre die Tonhöhen nummerieren 0 5 10 15 19 24
, die Modulo 12 entspricht 0 5 10 3 7 0
, oder die Noten E A D G B E
.
Arbeitsbeispiele
Wenn Ihre Eingabe so ist 0 2 2 0 0 0
, entspricht dies den Noten E B E G B E
, also nur E, B und G. Diese bilden den Akkord Em
, der sichtbar wird, indem Sie sie mit dem Grundton als E nummerieren und uns geben 0 3 7
. (Das Ergebnis wäre dasselbe für X 2 X 0 X 0
, oder 12 14 14 12 12 12
.)
Wenn Ihre Eingabe lautet 4 4 6 4 6 4
, nummerieren Sie diese mit einer Wurzel aus C♯ ergibt 7 0 7 10 4 7
oder 0 4 7 10
, lautet die Antwort C#7
(oder Db7
). Wenn es stattdessen 4 4 6 4 5 4
wäre, würde die Nummerierung geben 7 0 7 10 3 7
, oder 0 3 7 10
, was ist C#m7
(oder Dbm7
).
Testfälle
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 durch die Logarithmen ihrer Frequenzen
2 oder, in solfège , Namen wie do, re, mi . Verwenden Sie in dieser Herausforderung die Buchstabennamen.
3 Dies könnte auch als Dur-Sechstel-Akkord bezeichnet werden, mit einer anderen Wahl des Grundtons. Nennen Sie es in dieser Herausforderung beim untergeordneten siebten Namen.