В теории музыки интервал - это разница между двумя высотами. Каждый шаг определяется количеством полушагов (разница между C и C #) или целых шагов (разница между C и D). Один целый шаг такой же, как два полшага. Вот список всех интервалов по умолчанию и количество полушагов, которые они представляют:
0 Perfect Unison
2 Major Second
4 Major Third
5 Perfect Fourth
7 Perfect Fifth
9 Major Sixth
11 Major Seventh
12 Perfect Octave
Существует 3 варианта интервалов по умолчанию: незначительный , уменьшенный и расширенный .
Минорный интервал один полшага ниже основного интервала, но не идеальный интервал. Таким образом, у вас есть второстепенная секунда (1), малая третья (3), младшая шестая (8) и младшая седьмая (10). Нет такой вещи, как младшая четвертая, малая пятая, малая унисон или малая октава, так как все это идеальные интервалы.
Уменьшенный интервал один полшаг ниже , чем несовершеннолетний или совершенный интервал. Есть уменьшенная Вторая (0), уменьшенная третья (2), уменьшенная четвертая (4), уменьшенная пятая (6), уменьшенная шестая (7), уменьшенная седьмая (9) и уменьшенная октава (11).
Дополненной интервал один полшага выше , чем основной или идеальный интервал. У нас есть расширенный унисон (1), расширенный второй (3), расширенный третий (5), расширенный четвертый (6), расширенный пятый (8), расширенный шестой (10) и расширенный седьмой (12).
Соревнование:
Вы должны написать программу или функцию, которая выполняет несколько полушагов или целых шагов, а затем печатает одно из действительных английских описаний этого интервала. Неважно, какое описание вы выберете, если оно точно соответствует таблице ввода-вывода. Вы можете принять это как одну строку
"5w" == 5 whole steps
"3h" == 3 half steps
или как число и строка / символ.
5, "w" == 5 whole steps
3, "h" == 3 half steps.
Вы можете предположить, что каждый вход будет между 0 и 12 половинными шагами.
Таблица IO
Вот полный список, отображающий количество полушагов для всех приемлемых выходных данных.
0 Perfect unison, Diminished second
1 Minor second, Augmented unison
2 Major second, Diminished third
3 Minor third, Augmented second
4 Major third, Diminished fourth
5 Perfect fourth, Augmented third
6 Diminished fifth, Augmented fourth
7 Perfect fifth, Diminished sixth
8 Minor sixth, Augmented fifth
9 Major sixth, Diminished seventh
10 Minor seventh, Augmented sixth
11 Major seventh, Diminished octave
12 Perfect octave, Augmented seventh
Вот пример ввода / вывода:
5w Minor Seventh
5h Augmented Third
12h Perfect Octave
12w UNDEFINED
1w Diminished third
2h Major Second
Ответы:
Ruby, Rev B 138 байт
5 байтов сохранены, не повторяя
Augmented/Diminished
. 1 байт сохранен при использовании?h
.Ruby, Rev A 144 байта
Идея состоит в том, чтобы минимизировать количество основных интервалов (седьмой, пятый, третий и только унисон) и использовать тот факт, что седьмой и пятый имеют аналогичную связь с соотношением между третями и унисонами.
Существует четыре типа седьмого / третьего и 3 типа пятого / унисонного, поэтому переменная индекса
i
установлена равной 12 минус число полушагов, чтобы первый член выраженияi%7/4 + i/7*2
правильно выбирал тип базового интервала.разряженный в тестовой программе
выход
Неопределенные входные данные поведения: функция дает правильный ответ
diminished union
для -1 полушагов, но завершается с ошибкой для входов более 12. Например, она выводитperfect unison
14 полушагов , поскольку алгоритм основан на цикле 14, а не 12.источник
Python 2, 149 байт
Сначала целые шаги преобразуются в полшага.
Затем
Diminished
противAugmented
печатается. Они чередуются для смежных,n
за исключением того, чтоn=5
иn=6
дают то же самое, что достигается путем помещения их через границу по модулю нечетного числа.Наконец, расстояние печатается, рассчитывается с помощью трехбитной таблицы поиска. Это короче чем делать
int('6746543230210'[n])
.источник
Python 2.7, 155 байт
источник
Сетчатка, 153 байта
Входной номер сначала преобразуется в одинарный, затем удваивается, если за ним следуют
w
, и любые буквы удаляются, оставляя только унарный номер. Затем это число преобразуется обратно в десятичное число. Наконец, для поиска окончательного результата применяется поиск и замена.Пример работы:
Попробуйте онлайн!
источник
Витси , 166 байт
Ну, это, безусловно, может быть дальше в гольфе.
Это работает, определяя минимально возможное количество элементов, затем вызывая эти элементы через синтаксис метода.
Попробуйте онлайн!
источник
Javascript 189 байт
источник
Java,
225224 байтаДолжен быть лучший способ упаковать эти строки, но у меня нет никаких идей.
Отступ:
источник
if(s=='w')i*=2;
наi*=s=='w'?2:1;