Описание задачи
Учитывая список / массив элементов, отобразите все группы последовательных повторяющихся элементов.
Описание ввода / вывода
Ваш ввод - это список / массив элементов (можно предположить, что все они одного типа). Вам не нужно поддерживать каждый тип, который есть у вашего языка, но он должен поддерживать хотя бы один int
тип (желательно , но такие типы, как boolean
, хотя и не очень интересные, тоже подойдут). Пример выходов:
[4, 4, 2, 2, 9, 9] -> [[4, 4], [2, 2], [9, 9]]
[1, 1, 1, 2, 2, 3, 3, 3, 4, 4, 4, 4] -> [[1, 1, 1], [2, 2], [3, 3, 3], [4, 4, 4, 4]]
[1, 1, 1, 3, 3, 1, 1, 2, 2, 2, 1, 1, 3] -> [[1, 1, 1], [3, 3], [1, 1], [2, 2, 2], [1, 1], [3]]
[9, 7, 8, 6, 5] -> [[9], [7], [8], [6], [5]]
[5, 5, 5] -> [[5, 5, 5]]
['A', 'B', 'B', 'B', 'C', 'D', 'X', 'Y', 'Y', 'Z'] -> [['A'], ['B', 'B', 'B'], ['C'], ['D'], ['X'], ['Y', 'Y'], ['Z']]
[True, True, True, False, False, True, False, False, True, True, True] -> [[True, True, True], [False, False], [True], [False, False], [True, True, True]]
[0] -> [[0]]
Что касается пустых списков, вывод не определен - это может быть ничто, пустой список или исключение - все, что лучше всего подходит для ваших целей игры в гольф. Вам также не нужно создавать отдельный список списков, так что это также совершенно правильный вывод:
[1, 1, 1, 2, 2, 3, 3, 3, 4, 9] ->
1 1 1
2 2
3 3 3
4
9
Важно, чтобы группы были каким-то образом разделены.
code-golf
array-manipulation
shooqie
источник
источник
int
s, разделенный, например,0
s, был бы плохой идеей, поскольку0
во входных данных могут быть s ...[4, 4, '', 2, 2, '', 9, 9]
или[4, 4, [], 2, 2, [], 9, 9]
.Ответы:
Mathematica, 5 байтов
... есть встроенный для этого.
источник
Желе , 5 байт
Работает для всех числовых типов. Попробуйте онлайн! или проверьте все числовые тестовые случаи .
Как это работает
источник
Сетчатка ,
158 байтСпасибо Линн за предложение более простого формата ввода / вывода.
Обрабатывает ввод как список символов (и использует перевод строки для разделения групп).
Попробуйте онлайн!
Это просто работает путем сопоставления групп и печати их всех (при этом автоматически используется разделение строк).
источник
abbcccddd
→a bb ccc ddd
быть приемлемый формат ввода / вывода, и ОП одобрил, так что я думаю ,!`(.)\1*
это хорошо?JavaScript (ES6),
3937 байтРаботает с любыми разделенными пробелами словоподобными токенами. Сохранено 2 байта благодаря @ MartinEnder ♦. Лучшее, что я мог сделать для ввода массива и возврата 68:
источник
MATL , 9 байт
Ввод является строка массив чисел , с пробелами или запятыми в качестве разделителей.
Попробуйте онлайн! Тест с нецелыми числами .
MATL, 11 байт
Ввод - это массив столбцов, состоящий из цифр или символов , в
;
качестве разделителя.Попробуйте онлайн! Тест с произвольными числами . Тест с персонажами .
источник
gs2, 2 байта
Попробуйте онлайн!
c
это встроенная группировка, которая делает именно это, поэтому мы вызываем ее на STDIN (который является строкой, то есть списком символов) и получаем список строк. К сожалению, результат неотличим от ввода, поэтому нам нужно добавить разделители!-
(объединить пробелами) делает свое дело.Альтернативный ответ
cα
(2 байта CP437), который простоc
превращается в анонимную функцию.источник
Брахилог , 13 байт
Предупреждение: это крайне неэффективно, и вы поймете почему в объяснении.
Это ожидает список (например
[1:1:2:2:2]
) в качестве ввода. Элементы внутри списка могут быть практически чем угодно.объяснение
Это работает только из-за способа объединения
s - Subset
: самые маленькие наборы находятся в конце. Поэтому первое, что он находит, что конкатенации к входу - это самые длинные прогоны, например,[[1:1]:[2:2:2]]
а не, например[[1:1]:[2:2]:[2]]
.источник
J 13 байт
Поскольку J не поддерживает рваные массивы, каждый цикл равных элементов заключен в квадрат. Входные данные - это массив значений, а выходные данные - это массив штучных массивов.
Применение
объяснение
источник
Дьялог АПЛ , 9 байт
⊢
аргумент⊂⍨
делится на1
первый элемент,,
а затем,2≠/
где последующие пары отличаются⊢
аргументомисточник
Python 2, 43 байта
Работает со списками логических значений. Пример:
Перебирает список ввода, сохраняя последний увиденный элемент. Разделитель выводится перед каждым элементом, отличным от предыдущего, и проверяется как имеющий битовое значение xor, равное
^
0. При инициализацииp=-1
исключается разделитель перед первым элементом.источник
groupby
что такая боль ...CJam, 9 байт
Два решения:
Проверьте это здесь.
объяснение
Или
источник
Haskell, 22 байта
Там есть встроенный. Работает на любом типе, который поддерживает равенство.
источник
MATL,
87 байтУдалено 1 байт благодаря @Suever
Работает с целыми числами / числами с плавающей запятой / символами / логическими значениями / точками единорога / другими мнимыми входами.
Для логических значений входы есть
T/F
, выходы есть1/0
.Попробуйте онлайн!
Сгруппированы и повторены
источник
C #, 117 байт
негольфированный (не совсем)
источник
Pyth,
97 байтовКредит @LeakyNun за 2 байта!
Объяснение:
Старый ответ, 12 байт
Забыл о встроенной длине пробега, но я думаю, что это нормальный подход, поэтому я сохранил его.
Объяснение:
источник
m
.Pyth ,
3635 байтТестовая ссылка
Изменить: объяснение:
источник
Сетчатка ,
2422 байта2 байта благодаря Мартину Эндеру.
15 байт ответ уже существует, так что это просто еще один подход , который стоит больше байт.
Попробуйте онлайн!
Он разбивается на пространства, чье предыдущее число отличается от продолжающегося.
Это демонстрация внешности.
источник
05AB1E, 13 байтов
Разъяснения
Должен работать для любого списка.
Проверено на int и char.
Попробуйте онлайн
источник
Swift, 43 байта
Предполагается, что я являюсь массивом уравниваемых объектов; работает для всего: от целых до строк и пользовательских объектов. Отчасти дерзкий в том, что вывод содержит много новых строк, но создание этого красивее будет стоить байтов.
Более симпатичная, негольфированная версия:
Эта версия печатает каждую группу на новой строке за счет большего количества кода.
Идеи для улучшения
Эта версия имеет 47 байтов, но это другой подход, так что, может быть, там есть что оптимизировать? Самая большая проблема - это обратное утверждение.
источник
C
8877 байтПереместил
strmcmp
внутрьprintf
экономию 11 байтПрименение:
Пример ввода:
(параметры командной строки)
Пример вывода:
Проверено на:
Я пытаюсь исправить ошибку сегментации 5.3.0.
88 версия
источник
Java 134 байта
перебирает и решает, следует ли разделить новой строкой или пробелом.
источник
public
иstatic
ключевые слова. также вы можете удалить фигурные скобки для циклаListSharp , 134 байта
ListSharp не поддерживает функции, поэтому массив сохраняется в локальном файле с именем
l.txt
источник
Рубин , 24 байта
В
Array
инстансах ruby есть встроенный методgroup_by
Таким образом, решение будет:
источник
TSQL, 132 байта
Это немного отличается от других ответов - sql не имеет массивов, очевидным вводом для sql является таблица.
Golfed:
Ungolfed:
скрипка
источник
Perl 5 - 39 байт
источник
Пайк, 2 байта (неконкурентный)
Поддерживает только целые числа
Попробуй это здесь!
Добавлен узел split_at, разделяет ввод, когда 2-й аргумент правдив
источник
sed,
3323 + 1 = 24 байтаНужна
-r
опция.Пример использования:
источник
JavaScript (ES6), 56
Ввод: массив чисел или строк
Вывод: массив массивов
Впервые использую точное сравнение в гольф-коде
источник
Clojure, 19 байт
Это встроенная функция, но она требует функции отображения. В этом случае
+
выполняет функцию идентичности.источник
Javascript (с использованием внешней библиотеки) (178 байт)
Отказ от ответственности: я использую библиотеку, которую я написал для реализации LINQ из C # в JS. Это не помогло мне победить, ну да ладно
источник