Це зворотний бік музики: що в цьому акорді? , що полягає у друкуванні нот у заданому акорді. Цього разу вхід - це список нот у акорді, а ваше завдання - вивести, який саме акорд він.
Ваша програма повинна підтримувати наступні тріадні акорди. Приклади наведено з коренем 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. Ви можете випустити будь-яку, але є бонус, якщо ви виведете їх усі.
А сьомі акорди за бонус вказані в наступній таблиці:
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
Правила
- Можна написати або повну програму, або функцію.
- Вхід - це список приміток, розділених пробілом або іншим зручним символом. Це також може бути масив рядків (якщо він бере вхід з аргументу функції) або рядкове представлення такого масиву.
- Введення даних не повинно бути в певному порядку.
- На вводі можуть бути дублюються нотатки. До них треба ставитися так само, як є лише один з них.
- Вихід - назва акорду. У випадку, якщо він виведе кілька імен, застосовується те саме правило для введення.
- Якщо вхід не підтримується акордом, слід надрукувати нотатки як є. Ваша програма також може підтримувати інші акорди, які не вказані у наведених вище таблицях (що є дійсним, але не має бонусу).
- Ви можете використовувати інші позначення, перелічені в статті Вікіпедії . Але якщо ви виберете
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, якщо він також підтримує сьомі акорди.
- -200, якщо він приймає вхід MIDI і друкує кожен отриманий акорд. Зауважте, що нотатки не повинні починатись і закінчуватися одночасно. Ви вирішуєте, що відбувається в проміжних станах (до тих пір, поки воно не вийде з ладу або перестане працювати). Ви можете припустити, що в ударних каналах немає приміток (або є лише один канал, якщо це зручно). Рекомендується також надати текстову (або масив) версію для тестування, особливо якщо це залежить від платформи.
B#
, Cb
і т.д.
Csus4 is the same as Gsus2
. Я думаю, ти маєш на увазі, Csus2 is the same as Gsus4
чи не так?