Это обратная сторона музыки: что в этом аккорде? , который должен напечатать ноты в данном аккорде. На этот раз вход представляет собой список нот в аккорде, и ваша задача - вывести, какой это аккорд.
Ваша программа должна поддерживать следующие триадические аккорды. Примеры приведены с корнем 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 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
, не так ли?Ответы:
Pyth 190 символов - 30 - 70 = 90
Не очень доволен этим. Используются жестко запрограммированные аккорды.
Применение:
Попробуйте это здесь: Pyth Compiler / Executor . Отключить режим отладки и использовать в
"C D# G"
качестве ввода.Объяснение:
Сначала немного подготовки:
Затем функция, которая преобразует заметки в целое число
Затем для каждой ноты сдвиньте координаты и найдите их в таблице.
источник
Perl 5: 183 - 100 = 83
Изменить: мне удалось вырезать некоторые дополнительные символы, поэтому я также изменил имена аккордов, как в решении Python, так что я могу на мгновение притворяться, что я веду.
Пример:
источник
Python 2, 335 байт - 30 - 70 = 235
Первая попытка немного длиннее гольф, поэтому я могу пропустить некоторые очевидные трюки.
Комментарии:
Образец вывода
источник