Учитывая непустой список целых чисел, выведите каждое возможное разбиение списка, где каждый раздел является непустым подсписком.
Итак, для списка [1, 2, 3, 4]
результат:
[[1, 2, 3, 4]]
[[1, 2, 3], [4]]
[[1, 2], [3, 4]]
[[1, 2], [3], [4]]
[[1], [2, 3, 4]]
[[1], [2, 3], [4]]
[[1], [2], [3, 4]]
[[1], [2], [3], [4]]
Порядок списков в выходных данных не имеет значения, поэтому [[1, 2, 3, 4]]
может быть первым, последним или где угодно. Порядок элементов должен быть сохранен.
Это код-гольф, поэтому выигрывает самый короткий ответ.
Связанный: Разделите список!
[...]
в выходном формате? (До тех пор, пока разделы четко разделены, например, переводом строки.):
в качестве разделителя списка, но в выходных данных сами разделы не включаются в дополнительную пару[...]
.[
и последний]
из каждой строки?Ответы:
Желе , 2 байта
Попробуйте онлайн!
источник
Сетчатка ,
2719 байтКоличество байтов предполагает кодировку ISO 8859-1.
Попробуйте онлайн!
объяснение
Конечно, это вычисляет все разделы, используя обработку строк. Основная идея заключается в том, что мы можем генерировать все разделы, решая для каждого
,
индивидуально, хотим ли мы разделить список там. Такого рода вещи могут быть сделаны в Retina путем сопоставления каждого,
по очереди и использования замены, которая дает оба возможных выхода.Входные данные действуют как базовый вариант: раздел, где все элементы все еще находятся в одном списке.
Теперь мы повторно (
+
) сопоставляем первую (1
) запятую (,
) в каждой строке (%
) (обрабатывая эту строку как отдельную строку, которая важна для$'
`` $ 1 `в подстановке).Эта запятая заменяется на:
Помните, что все, что находится перед совпадением и после совпадения, остается в строке в любом случае, поэтому на самом деле полный результат
$`;$'¶$`];[$'
объясняет, почему мы вставляем суффикс и префикс в таком порядке.Этот цикл останавливается, когда все запятые исчезают.
Наконец, замените точку с запятой снова запятой, чтобы соответствовать формату ввода.
источник
Чистый Баш, 28
Здесь списки разделены двоеточиями и заключены в квадратные скобки. Например, в вопросе список ввода будет иметь следующий вид
1:2:3:4
:Попробуйте онлайн .
${1//:/REPLACEMENT}
заменяет двоеточие в$1
с{:,]:[\}
[1{:,]:[}2{:,]:[}3{:,]:[}4]
\
побеги) приводит к тому, что расширение фигурной скобки происходит последним и дает желаемый результат.Если необходимо точно соответствовать данному
[[ , , ...]]
формату, тогда мы можем сделать это вместо этого:Чистый Баш, 47
Попробуйте онлайн .
источник
Pyth , 2 байта
С вводом
[1, 2, 3, 4]
(например).Пояснение :
./
это оператор раздела. Он возвращает все деления входного списка в непересекающиеся подсписки. Ввод неявно подается в программу.Проверьте это онлайн!
источник
05AB1E , 5 байтов
Попробуйте онлайн!
источник
.œ
: Попробуйте онлайн.Python 3 ,
827266 байтПопробуйте онлайн!
-5 байт благодаря @JonathanAllan
источник
l
в конце концовHaskell ,
595549 байтПопробуйте онлайн!
Рекурсивное решение. Пример использования:
p [1,2,3]
возвращает[[[1,2,3]],[[1,2],[3]],[[1],[2,3]],[[1],[2],[3]]]
.-6 байт благодаря xnor !
источник
do a:b<-p r;[(x:a):b,[x]:a:b]
(это меняет порядок списков).<*>
делает именно то, что вы хотите[\(a:b)->(x:a):b,([x]:)]<*>p r
, хотя это дольше, чемdo
потому, что первая лямбда, кажется, нуждается в сопоставлении с образцом.J , 42 байта
Создает все разделы подсписка, создавая ключи для подсписков разделов длиной 1 и итерируя по длине списка ввода. Каждый раздел списка затем формируется путем выбора из ключей.
Например, вот процесс создания ключей для списка длиной 4.
Попробуйте онлайн!
источник
J ,
2624 байтаПопробуйте онлайн!
источник
Брахилог , 2 байта
Попробуйте онлайн!
Представление функции, которая производит вывод, действуя как генератор. (Ссылка TIO содержит дополнительный код для превращения его в полноценную программу для целей тестирования.)
Между прочим, хотя технически это не встроенная функция, она так часто используется в Brachylog, что а) она, вероятно, заслуживает однобайтового представления, и б)
c
встроенная функция может принимать параметр, чтобы делать утверждения о своем входном сигнале (тогда как в большинстве встроенных функций это параметр говорит о том, как произвести вывод ).объяснение
источник
APL, 26 байт
Тест:
Объяснение:
X←⍴1↓⍵
:X
длина⍵
(входного списка) с первым пропущенным элементом⍳2*X
: числа [1..2 ^ X](X⍴2)⊤
: base-2 представление этих чисел, сX
позициями (то есть,X
само будет переходить в0
).↓⍉
: повернуть матрицу и разделить ее по линиям (⊤
в результате получим матрицу с числами вдоль столбцов), получив массив битовых векторов1,¨
: добавьте 1 к каждому битовому вектору.⊂∘⍵¨
: для каждого битового вектора, разделить⍵
на каждый 1.источник
Haskell , 45 байт
Попробуйте онлайн!
Я нашел это решение некоторое время назад, размышляя о чаевых на Haskell .
источник
питон , 90 байт
переиграл овцами (делая что-то, что я думал, что попробовал работать: p)
Рекурсивная функция, которая создает список разделов из срезов ввода с хвостом, достигнутым, когда срезы имеют длину 1.
Попробуйте онлайн!
exec
Сохраняет 4 байта в течениеwhile
или 3 в течениеfor
цикла (ниже) , так как это означает , что только два\n
сек , а не два уровня отступа, позволяя все функции , чтобы находиться на одной линии ( в то время как порядок нарезки не имеет значения).источник
Python 3 , 67 байт
Попробуйте онлайн!
источник
Haskell, 59 байт
источник
Рубин ,
6257 байтПопробуйте онлайн!
Как это работает:
источник
JavaScript (ES6), 87 байт
Объяснение:
b
это список предыдущих подсписков,c
это текущий подсписок (который начинается как первый элемент массива, поскольку он должен быть в первом подсписке), аd
список всех подсписков. Остальные элементы массива затем рекурсивно обрабатываются. В каждом случае есть две опции: либо следующий элемент добавляется к текущему подсписку, либо текущий подсписок завершается, а следующий элемент запускает новый подсписок. Затем рекурсивные результаты объединяются вместе. Когда массив исчерпан, список списка всех подсписков является результатом.источник
APL (NARS) 38 символов, 76 байтов
здесь используется функция Nars 11 1‼ kk, но она очень медленная, ее уже нельзя использовать для массива arg из 9 элементов ...
ниже приведена функция, которая не использует встроенную функцию:
мы выбираем тип каждого результата:
Я не знаю, как это работает, это всего лишь эвристическая попытка ...
Возможно я сделаю какую-то ошибку; обе функции строят разделы списка независимо от ввода, а не только 1 2 ... n.
источник
Аксиома, 251 байт
Если кто-то найдет что-то лучше ... ungof и проверить
Если это слишком много места, скажите это, и я уберу примеры ...
источник