To jest odwrotność muzyki: co jest w tym akordzie? , czyli wydrukować nuty w danym akordie. Tym razem wejściem jest lista nut akordu, a Twoim zadaniem jest wyprowadzenie, który to akord.
Twój program powinien obsługiwać następujące akordy triadyczne. Przykłady podano z rdzeniem C. Akordy z innymi rdzeniami są tymi samymi akordami ze wszystkimi nutami obróconymi, więc C stanie się tą nutą, np. Dmaj składa się z D, F # i 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
Zauważ, że Caug jest taki sam jak Eaug i G # aug, a Csus4 jest taki sam jak Fsus2. Możesz wypisać jeden, ale jest bonus, jeśli wypiszesz je wszystkie.
A siódme akordy bonusu wymieniono w poniższej tabeli:
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
Zasady
- Możesz napisać pełny program lub funkcję.
- Dane wejściowe to lista notatek oddzielonych spacją lub innym wygodnym znakiem. Może to być również tablica ciągów znaków (jeśli pobiera dane wejściowe z argumentu funkcji) lub ciąg znaków takiej tablicy.
- Dane wejściowe nie muszą być w określonej kolejności.
- Dane wejściowe mogą zawierać duplikaty. Należy je traktować tak samo, jak tylko jeden z nich.
- Wyjście to nazwa akordu. W przypadku, gdy wyświetli wiele nazw, obowiązuje ta sama zasada wprowadzania.
- Jeśli wejście nie jest obsługiwanym akordem, powinieneś wydrukować nuty tak, jak jest. Twój program może także obsługiwać inne akordy niewymienione w powyższych tabelach (co jest ważne, ale nie ma bonusu).
- Możesz użyć innych notacji wymienionych w artykule w Wikipedii . Ale jeśli wybierzesz
C
C-dur, w obu przypadkach dodaj przedrostek czytelny dla człowieka, aby rozróżnić akord za pomocą jednej nuty. - Nie można używać wbudowanych funkcji do tego zadania (jeśli takie istnieją).
- To jest golf golfowy. Najkrótszy kod w bajtach wygrywa.
Przykłady
- Wejście:
C D# G
Wyjście:Cm
. - Wejście:
C Eb G
Wyjście:Cm
. - Wejście:
C Eb F#
Wyjście:Cdim
. - Wejście:
F A C#
Wyjście:Faug
,Aaug
,C#aug
,Dbaug
lubFaug Aaug C#aug
,Faug Aaug Dbaug
w dowolnej kolejności. - Wejście:
F D F F F F A A F
Wyjście:Dm
. - Wejście:
C D
Wyjście:C D
.
Bonusy
- -30, jeśli wypisze je wszystkie, jeśli istnieje więcej niż jedna interpretacja (dla aug, sus4 / sus2 i dim7).
- -70, jeśli obsługuje także siódme akordy.
- -200, jeśli akceptuje wejście MIDI i drukuje każdy otrzymany akord. Pamiętaj, że nuty nie muszą zaczynać się ani kończyć w tym samym czasie. Ty decydujesz, co stanie się w stanach pośrednich (o ile nie ulegnie awarii lub przestanie działać). Możesz założyć, że nie ma nut w kanałach perkusyjnych (lub jest tylko jeden kanał, jeśli jest to wygodne). Zaleca się również zapewnienie wersji testowej (tekstowej lub tablicowej), szczególnie jeśli zależy ona od platformy.
B#
, Cb
itd
Csus4 is the same as Gsus2
. Myślę, że masz na myśli Csus2 is the same as Gsus4
, prawda?