Розділи списку


9

Відповідь на це питання занадто довга

Ваше завдання - написати функцію розділення на найменшу кількість символів.

Приклад введення

['a', 'b', 'c']

Приклад виводу

[(('a'),('b'),('c')),
 (('a', 'b'), ('c')),
 (('a', 'c'), ('b')),
 (('b', 'c'), ('a')),
 (('a', 'b', 'c'))]

Вхід може бути списком / масивом / набором / рядком тощо, що найпростіше обробляти вашу функцію

Ви також можете вибрати вихідний формат, який підходить саме вам, поки структура чітка.

Ваша функція повинна працювати як мінімум для 6 елементів у вводі


чи пустий розділ також буде частиною виводу?
FUZxxl

Відповіді:


3

GolfScript (43 символи)

{[[]]:E\{:v;{:^E+1/{^1$-\[~[v]+]+}/}%}/}:P;

або

{[[]]:E\{:v;{:^E+1/{^1$-\{[v]+}%+}/}%}/}:P;

Той же формат введення, формат виводу та назва функції, як і рішення Говарда. Немає жодного грубого форсування: для цього потрібен простий ітеративний підхід додавання одного елемента зі вхідного списку до розділу кожного разу навколо зовнішньої петлі.


6

GolfScript, 51 символ

{[[]]\{[.;]`{1$[1$]+@@`1$`{[2$]-@@[+]+}++/}+%}/}:P;

Сценарій визначає змінну, Pяка бере масив зверху стека і відштовхує список усіх розділів, наприклад

[1 2] P            # => [[[1] [2]] [[1 2]]]
["a" "b" "c"] P    # => [[["a"] ["b"] ["c"]] [["b"] ["a" "c"]] [["a"] ["b" "c"]] [["a" "b"] ["c"]] [["a" "b" "c"]]]

Він також працює у великих списках:

6, P ,p            # prints 203, i.e. Bell number B6
8, P ,p            # 4140

Ви можете проводити власні тести в Інтернеті .


6

J, 51 символ

([:<a:-.~])"1~.((>:@i.#:i.@!)#l)<@;/."1[l=:;:1!:1[1

Здійснює введення з клавіатури, пункти, розділені пробілами:

   ([:<a:-.~])"1~.((>:@i.#:i.@!)#l)<@;/."1[l=:;:1!:1[1
a b c
+-----+------+------+------+-------+
|+---+|+--+-+|+--+-+|+-+--+|+-+-+-+|
||abc|||ab|c|||ac|b|||a|bc|||a|b|c||
|+---+|+--+-+|+--+-+|+-+--+|+-+-+-+|
+-----+------+------+------+-------+

1

Хаскелл, 90 87 71 66

Збережено 5 байт завдяки німі .

x#[]=[[[x]]]
x#(y:s)=((x:y):s):map(y:)(x#s)
p=foldr((=<<).(#))[[]]

Приклад:

*Main> p "abc"
[["abc"],["bc","a"],["ac","b"],["c","ab"],["c","b","a"]]

Кілька байтів для збереження: переставити дужки у 2 - й лінії #: :map(y:)(x#s)і перетворити лямбда в точку вільної версії: foldr((=<<).(#))[[]].
німі

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.