Dies ist das Gegenteil von Musik: Was ist in diesem Akkord? , das heißt, die Noten in einem bestimmten Akkord zu drucken. Diesmal ist die Eingabe eine Liste von Noten in einem Akkord, und Ihre Aufgabe besteht darin, den Akkord auszugeben, um den es sich handelt.
Ihr Programm sollte die folgenden Triadenakkorde unterstützen. Beispiele werden mit Grundton C angegeben. Akkorde mit anderen Grundtönen sind dieselben Akkorde, wobei alle Noten gedreht werden, sodass C zu diesem Grundton wird, z. B. besteht Dmaj aus D, F # und 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
Beachten Sie, dass Caug mit Eaug und G # aug identisch ist und Csus4 mit Fsus2 identisch ist. Sie können beide ausgeben, aber es gibt einen Bonus, wenn Sie alle ausgeben.
Die siebten Akkorde für den Bonus sind in der folgenden Tabelle aufgeführt:
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
Regeln
- Sie können entweder ein komplettes Programm oder eine Funktion schreiben.
- Die Eingabe ist eine Liste von Notizen, die durch ein Leerzeichen oder ein anderes geeignetes Zeichen getrennt sind. Es kann sich auch um ein Array von Zeichenfolgen handeln (wenn Eingaben vom Funktionsargument vorgenommen werden) oder um die Zeichenfolgendarstellung eines solchen Arrays.
- Die Eingabe muss nicht in einer bestimmten Reihenfolge erfolgen.
- Die Eingabe enthält möglicherweise doppelte Notizen. Sie müssen genauso behandelt werden, wie es nur einen von ihnen gibt.
- Die Ausgabe ist der Name des Akkords. Für den Fall, dass mehrere Namen ausgegeben werden, gilt dieselbe Regel für die Eingabe.
- Wenn die Eingabe kein unterstützter Akkord ist, sollten Sie die Noten unverändert drucken. Ihr Programm kann auch andere Akkorde unterstützen, die nicht in den obigen Tabellen aufgeführt sind (gültig, aber ohne Bonus).
- Sie können andere im Wikipedia-Artikel aufgeführte Notationen verwenden . Wenn Sie sich jedoch
C
für C-Dur entscheiden, sollten Sie in beiden Fällen ein lesbares Präfix hinzufügen, um einen Akkord mit einer einzelnen Note zu unterscheiden. - Sie können für diese Aufgabe keine integrierten Funktionen verwenden (falls vorhanden).
- Das ist Code-Golf. Der kürzeste Code in Bytes gewinnt.
Beispiele
- Eingabe:
C D# G
Ausgabe :Cm
. - Eingabe:
C Eb G
Ausgabe :Cm
. - Eingabe:
C Eb F#
Ausgabe :Cdim
. - Input:
F A C#
Output:Faug
,Aaug
,C#aug
,Dbaug
oderFaug Aaug C#aug
,Faug Aaug Dbaug
in beliebiger Reihenfolge. - Eingabe:
F D F F F F A A F
Ausgabe :Dm
. - Eingabe:
C D
Ausgabe :C D
.
Boni
- -30, wenn alle gedruckt werden, wenn mehr als eine Interpretation vorhanden ist (für aug, sus4 / sus2 und dim7).
- -70, wenn es auch Septakkorde unterstützt.
- -200, wenn es einen MIDI-Eingang akzeptiert und jeden empfangenen Akkord druckt. Beachten Sie, dass die Notizen nicht gleichzeitig beginnen oder enden müssen. Sie entscheiden, was in den Zwischenzuständen passiert (solange es nicht abstürzt oder nicht mehr funktioniert). Sie können davon ausgehen, dass die Percussion-Kanäle keine Noten enthalten (oder es gibt nur einen Kanal, wenn dies zweckmäßig ist). Es wird empfohlen, zum Testen auch eine Text- (oder Array-) Version bereitzustellen, insbesondere wenn diese plattformabhängig ist.
B#
, Cb
etc.
Csus4 is the same as Gsus2
. Ich denke du meinst Csus2 is the same as Gsus4
nicht wahr?