Название написано с ошибкой специально. Читайте больше, чтобы узнать почему.
Ваша задача: с учетом строки или списка с разделителями, включая символы A,B,C,D
, вывести индексы всех соседних одинаковых символов. Выходными данными могут быть несколько строк / целых чисел в нескольких строках, список / массив или строка с разделителями.
Весь вывод должен быть в виде списка или строки, или нескольких напечатанных строк. Каждая напечатанная строка, если их несколько, должна содержать только 1 строку или число. С трейлером все в порядке.
Стандартные методы ввода / вывода. Применяются стандартные лазейки.
Например, ввод 'ABCDDCBA'
должен выводить 3,4
или 4,5
, в зависимости от того, проиндексирован ли он от 0 до 1, потому что эти числа являются индексами D
и следуют за D
ним.
Тестовые случаи:
Тестовые случаи имеют входные данные в виде одной строки и выходные данные в виде ,
строки с -delimited. Выходы индексируются 0, добавьте 1 к каждому выводимому элементу, чтобы он был 1 проиндексирован.
Input: 'ABCDCABCD'
Output: ''
Input: 'AABBCCDD'
Output: '0,1,2,3,4,5,6,7'
Input: 'ABCDDDCBA'
Output: '3,4,5'
Input: 'ABBCDD'
Output: '1,2,4,5'
Это код-гольф , поэтому выигрывает самый короткий код!
3,4,4,5
верно?AABBCD
->
1,2,3,4
Ответы:
MATL ,
87 байтВыход основан на 1.
Попробуйте онлайн!
Пояснение с примером
Рассмотрим ввод
'ABCDDDCBA'
.источник
Retina ,
332923 байтаСохранено 6 байтов благодаря Мартину Эндеру
Вывод списка индексов, разделенных переводом строки.
Попробуйте онлайн!
объяснение
Транслитерировать серии одного и того же символа в двоеточие, чтобы пометить позиции, где есть повторяющиеся символы.
Затем замените каждое двоеточие на длину текста перед ним, за которой следует перевод строки.
Наконец, удалите все оставшиеся буквы.
источник
Желе , 7 байт
1 на основе; возвращает список списков прогонов индексов, разрешенных OP.
Попробуйте онлайн!
Как?
источник
ṁ
- Что бы я хотел, чтобы 05AB1E мог сделать за 500, пожалуйста.Brain-Flak ,
5746 байтовВключает +2 для
-ar
Использует индексирование на основе 0.
Попробуйте онлайн!
источник
Mathematica, 32 байта
Чистая функция, которая возвращает 1-индексированные позиции символов рядом с идентичным символом.
Объяснение:
StringPosition["string","sub"]
дает список начальных и конечных позиций символов, в которых"sub"
отображается подстрока"string"
.x_~~x_
этоStringExpression
соответствует двум соседним, одинаковым символам. Так , например,StringPosition["ABCDDDCBA",x_~~x_]
дает{{4, 5}, {5, 6}}
. ПрименениеUnion
объединяет списки, сортирует и удаляет дубликаты.источник
Brain-Flak ,
69, 59, 56 байтовПопробуйте онлайн!
+2 байта для
-ar
флагов, которые разрешают ввод ASCII и переворачивают стек.Использует индексирование на основе 0. Сэкономил 10 байтов, уменьшив избыточность push-pop . Сохранены еще 4 байта путем переключения с 1 на 0 на основе индексации.
Это в значительной степени единственная струнная задача, в которой хорош мозговой зенит. Это потому, что мозговая ловушка хороша при сравнении последовательных символов, хотя и ужасна при обработке строк в целом. Вот читаемая версия кода с комментариями, чтобы объяснить, как это работает:
источник
-r
. Это подводит меня к 46.Брахилог , 19 байт
Попробуйте онлайн!
объяснение
Брахилог обычно ужасен с индексами, что снова показывает здесь.
Если
false.
это допустимый вывод в случаях, когда нет соседних символов, то это будет на 1 байт меньше, если заменитьᶠd
наᵘ
.источник
Октава , 35 байт
Попробуйте онлайн!
Похоже на мой ответ MATL . Здесь
unique
автоматически сортируется. Входные данныеdiff
должны быть преобразованы вdouble
, что делается унарным+
.источник
Cubix,
37 32 31 2928 байтСпасибо ETHProductions за то, что указал мне в сторону трехбайтовой экономии
Попробуй это здесь ! Обратите внимание, что выходные индексы основаны на 1, а не в порядке возрастания.
Expanded:
объяснение
Это работает путем чтения ввода символ за символом. Чтобы сравнить два символа, мы просто вычитаем их коды символов, а если результат равен 0, мы печатаем текущую длину стека, пробел, текущую длину стека - 1 и другой пробел. Затем мы немного очистим стек и снова начнем цикл чтения. Если достигнут конец входной строки, программа останавливается.
источник
#
для получения длины стека, когда вам это нужно. (Также, LOL'ed в;_;
в коде;))!$w
вместо!w
и переместили часть логики пятого ряда в четвертый ряд? (Не могу попробовать прямо сейчас, потому что я выхожу за дверь)C, 75 байтов
Использует пробелы в качестве разделителей. (Завершающая запятая не выглядит слишком хорошо.)
Попробуйте онлайн!
источник
C # , 115 байт
Golfed
Ungolfed
Ungolfed читаемый
Полный код
релизы
115 bytes
- Исходное решение.Заметки
Нечего добавить
источник
Желе , 8 байт
Попробуйте онлайн!
источник
Ṗ=ḊTµ2Ḷ+€
к, 18 байт
Примеры:
Перевод
q
легче понять:источник
JavaScript, 52 байта
Спасибо @Neil за игру в 1 байт
Получает входные данные в виде массива с 0 индексами.
Возвращает выходные данные в виде массива с 1 индексом.
объяснение
Для каждого символа в строке
Если он равен предыдущему или следующему символу, вернуть индекс + 1, в противном случае не вернуть (оставляет неопределенным в массиве)
Удалить все неопределенные элементы из результирующего массива
Попробуйте онлайн!
источник
&&i
сохранить байты над(...)*i
?0|0&&6
0,1|0&&6
6,0|1&&6
6,1|1&&6
6. Разве это не то, что вы хотите?Python 2,
5554 байтаПопробуйте онлайн!
Выводит индексы, разделенные пробелами (обратите внимание, что некоторые индексы отображаются дважды, как это разрешено OP)
источник
Perl 5 , 37 байт
35 байт кода +
pl
флаги.Попробуйте онлайн!
(?<=(.))\1|(.)(?=\2)
будет соответствовать либо между двумя повторяющимися символами ((?<=(.))\1
), либо перед повторяющимся символом ((.)(?=\2)
).Затем
print pos
печатает позицию матча. (pos
содержит индекс текущего соответствия при использовании в регулярном выражении с/g
модификатором).источник
Perl 6 ,
6657 байтПопытайся
Попытайся
источник
PHP, 100 байт
источник
Рубин , 51 + 1 = 52 байта
Использует
-n
флаг.Попробуйте онлайн!
источник
Пакет, 139 байт
Принимает участие в STDIN. Работает, отслеживая, сколько чисел нужно напечатать в
c
переменной, которая сбрасывается до 2 при обнаружении пары. Примечание. Стоимость 6 байт может быть усилена для работы с большинством символов ASCII, а не только с нимиABCD
.источник
C #, 89 байт
Если в строке три или более символов, индексы повторяются. Что @Comrade SparklePony разрешено в комментариях.
Развёрнутая полная программа:
источник
QBIC , 42 байта
Пример вывода:
Объяснение:
РЕДАКТИРОВАТЬ: QBIC теперь имеет подстроку! Эта задача теперь может быть решена в 32 байта:
Где:
источник
k, 14 байтов
Это функция, она принимает строку и возвращает список индексов.
Объяснение:
Попробуйте онлайн!
Как использовать:
источник
PHP, 70 байт
принимает входные данные от STDIN; беги с
-R
.источник