리스트의 파티션


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;

Howard의 솔루션과 동일한 입력 형식, 출력 형식 및 기능 이름. 무차별 강제는 없습니다. 이것은 외부 루프를 돌 때마다 입력 목록에서 파티션에 하나의 요소를 추가하는 간단한 반복적 인 접근 방식을 취합니다.


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

nimi 덕분에 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"]]

몇 바이트 저장 :의 두 번째 줄에 괄호를 재 배열 #: :map(y:)(x#s)및 포인트 - 무료 버전으로 람다를 설정 : foldr((=<<).(#))[[]].
nimi

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.