Учитывая ввод строки, состоящей целиком из q
s, представляющих четвертные ноты, и e
s, представляющих восьмые ноты, выведите индексы четвертных нот, которые синкопированы.
Синкопация сложна, но для целей этой задачи наше определение «синкопированного» будет очень простым: четвертная нота, начинающаяся с «безударного» - то есть, удары считаются как «и» в n / 4 время.
В качестве альтернативы это может быть определено как любая четвертная нота, которой предшествует нечетное число восьмой ноты. Например, примечания, отмеченные *
ниже, считаются синкопированными, а также отображаются их индексы:
eqqeqqeqqe
** **
12 78
Output: 1 2 7 8
Ввод всегда будет состоять из целого числа мер в 4/4 времени (четвертная нота - это четверть меры, а восьмая нота - восьмая меры). (Входные данные также никогда не будут пустыми.) Выходные данные могут быть либо одной строкой с элементами, разделенными любым разделителем, который не содержит чисел, либо массивом / списком / и т. Д. Вывод может быть основан на 1 (т. Е. Первый индекс равен 1 вместо 0), если вы хотите, и он также может быть в любой числовой базе (унарной, десятичной и т. Д.).
Поскольку это код-гольф , выигрывает самый короткий код в байтах.
Тестовые случаи:
In Out
-----------------------------------------------
eqqqe 1 2 3
qeqeq 2
qqqeqqeeeeqeqeqeqqeqqeqq 4 5 10 14 19 20
eeeeeqeeqeeqqqqeqeqeeqe 5 8 11 12 13 14 18 21
qqqq <none>
eeeeeeee <none>
'eqqqe'
вместоeqqqe
Ответы:
Желе ,
129 байтКак программа, приведенный выше код требует кавычек вокруг ввода. Так как это не разрешено, это представление функции. Выход основан на 1.
Попробуйте онлайн!Как это работает
Обновить
Приведенный выше код больше не работает в последней версии Jelly, так как нам нужен символ e , но
“e”
выдает строку. Исправление, которое сохраняет байт, всего 8 байт .Это работает как полная программа. Попробуйте онлайн!
источник
Руби, 46
Вход в стандартный ввод. Вывод в stdout, разделение новой строки.
комментарии
источник
JavaScript ES7,
5048 байтДовольно коротко для JS, если вы спросите меня.
[for...of]
Синтаксис, в основном комбинированный map и filter, пригодится для этой задачи.Определяет анонимную функцию, которая выводит массив с 1 индексом.
Тестовый фрагмент
При этом используется версия кода без разглашения, не относящаяся к ES7.
источник
J,
20 1917 байтСпасибо Рэндомре за сохранение байта и Деннису за сохранение двух. Это безымянный монадический глагол, используемый следующим образом:
Попробуй это здесь.
объяснение
источник
GNU grep,
3 + 17 = 203 + 15 = 18 байтПрограмма требует опций
boP
. КодСохраните как
synco
, затем запустите какgrep -boPf synco
.Выходной разделитель
:q
сопровождается переводом строки. Например , выход дляeqqqe
ISЗначения флагов:
P
: Используйте регулярные выражения PCRE.o
Это означает, что нужно печатать только ту часть строки, которая соответствует регулярному выражению, но это не то, почему это важно.o
используется потому, что позволяет несколько совпадений в строке.b
: Вывести смещение в байтах начала каждого совпадения от начала файла.Шаблон проверяет, что после четвертной ноты нет четного числа восьмых нот.
источник
grep
язык как самостоятельный? Независимо от того, +1 за отличный ответMATL , 12
1416байтСпасибо Деннису за удаление 2 байтов (и за размещение MATL на его потрясающей онлайн-платформе!)
При этом используется текущая версия (9.3.0) языка / компилятора.
Ввод и вывод осуществляется через stdin и stdout. Результат основан на 1.
Пример :
Или попробуйте онлайн!
объяснение
источник
Python 2,
9485797566 байтРЕДАКТИРОВАТЬ: Спасибо Doorknob и Алекс А.
РЕДАКТИРОВАТЬ: Спасибо Алекс А.
РЕДАКТИРОВАТЬ: Теперь с помощью input (), поэтому ввод должен быть строка с кавычками.
РЕДАКТИРОВАТЬ: Спасибо Zgarb за то, что рекомендовал мне использовать перечислить.
Просто подсчитывает количество e и, если q, проверит, нечетное ли число e, затем выведите индекс.
Попробуй здесь
источник
if ...
всего лишьelse
на 8 байт.print
1 байтаelse: if e%2:
простоelif e%2:
.i[j]<"q"
вместоi[j]=="e"
.Haskell,
5851 байтПример использования:
f "eeeeeqeeqeeqqqqeqeqeeqe"
->[5,8,11,12,13,14,18,21]
.Просмотрите список и выведите текущий индекс
i
для каждого символа,'q'
если'e'
перед ним нечетное число s.источник
Минколанг 0,15 , 28 байт
Попробуй это здесь.
объяснение
источник
С (функция), 65
Спасибо @Dennis за дополнительную игру в гольф!
источник
i,n;f(char*m){for(i=n=0;*m;m++,i++)*m&4?++n:n%2?printf("%d ",i):0;}
должно работать.Питон 3,
109958090887668676664 байтаСчитает количество
q
с иe
s и добавляет индекс текущего,q
если число предшествующихe
s нечетно.Изменить: Теперь он печатает список индексов s, которые имеют
q
и имеют нечетное числоe
s перед ними. Восемь байтов сэкономлено благодаря Doorknob и еще два благодаря feersum .Ungolfed:
источник
input
иprint
?enumerate
, чем использоватьrange(len(...
.JavaScript ES6,
636058 байтАнонимная функция, которая выводит массив. Спасибо user81655 за сохранение двух байтов. Вот версия без гольфа, которая использует лучший поддерживаемый синтаксис.
источник
Mathematica, 76 байт
Что-то интересное я заметил. Все синкопированные части имеют форму
eqqq..qqe
, поэтому я просто обнаруживаю их и даю индексыq
s.источник
Джапт,
292321 байтБольше не соревноваться!
Попробуйте онлайн!
Как это работает
Неконкурентная версия, 18 байт
Попробуйте онлайн!
источник
Befunge, 43 байта
Попробуйте онлайн!
объяснение
Мы начнем с двух неявных нулей в стеке: номера ноты и количества ударов.
источник