모든 서브리스트 파티션 생성 [3, 4]] [[1, 2],

비어 있지 않은 정수 목록이 제공되면 각 파티션이 비어 있지 않은 하위 목록 인 목록의 가능한 모든 파티션을 출력하십시오.

따라서 목록 [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]]처음, 마지막 또는 어디에서나 될 수 있습니다. 요소의 순서는 유지되어야합니다.

이것은 코드 골프이므로 최단 답변이 이깁니다.


관련 : 목록을 파티션!



답변


답변

망막 , 27 19 바이트

바이트 수는 ISO 8859-1 인코딩을 가정합니다.

+1%`,
;$'¶$`];[
;
,

온라인으로 사용해보십시오!

설명

물론 이것은 문자열 처리를 사용하여 모든 파티션을 계산합니다. 기본 아이디어는 ,목록을 분할할지 여부를 개별적 으로 결정하여 모든 파티션을 생성 할 수 있다는 것입니다. 이런 종류의 것들은 Retina에서 각각 일치시켜 수행 할 수 있습니다, 에서 을 차례로 시키고 가능한 모든 출력을 제공하는 대체품을 사용하여 .

입력은 기본 사례로 작동합니다. 모든 요소가 여전히 단일 목록에있는 파티션입니다.

+1%`,
;$'¶$`];[

이제 각 줄 +에서 첫 번째 ( 1) 쉼표 ( ,)를 반복적으로 ( ) 일치시킵니다 (% ) 해당 줄은 별도의 문자열로 처리합니다 $'.

해당 쉼표는 다음으로 대체됩니다.

;   A semicolon. This is just a stand-in for the comma, so we know we've already
    processed it and it won't be substituted again by the next iteration.
$'  Everything after the match. This completes the first (unchanged) version of
    the current line.
¶   A linefeed. Since the next iteration will scan for all lines again, this doubles
    the number of strings we're working with.
$`  Everything before the match. This completes the second (split) version of
    the current line.
];[ A semicolon around which we split the list.

경기 전과 경기 후의 모든 것이 어쨌든 문자열에 남아 있으므로 전체 결과는 실제로 $`;$'¶$`];[$' 접미사와 접두사를 순서대로 삽입하는 이유를 설명합니다.

모든 쉼표가 사라지면이 루프가 중지됩니다.

;
,

마지막으로 입력 형식과 일치하도록 세미콜론을 쉼표로 다시 바꿉니다.


답변

퓨어 배쉬, 28

eval echo [${1//:/{:,]:[\}}]

여기에서 목록은 콜론으로 구분되며 대괄호 안에 들어 있습니다. 예를 들어 질문에서 입력 목록은 다음 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//:/REPLACEMENT}콜론 $1{:,]:[\}
  • 이것은 같은 중괄호 확장을 생성합니다 [1{:,]:[}2{:,]:[}3{:,]:[}4]
  • 평가 (및 신중한 \이스케이프)는 가새 확장이 마지막에 발생하고 원하는 결과를 제공합니다.

주어진 [[ , , ...]]형식 과 정확히 일치 해야하는 경우 대신 다음을 수행 할 수 있습니다.

순수한 배쉬, 47

eval printf '%s\\n' ${1//, /{\\,\\ ,]\\,\\ [\}}

온라인으로 사용해보십시오 .


답변

Pyth , 2 바이트

./

입력 포함 [1, 2, 3, 4](예 :).

설명 : ./파티션 연산자입니다. 입력 목록의 모든 부분을 분리 된 하위 목록으로 반환합니다. 입력은 프로그램에 내재적으로 공급됩니다.

온라인으로 테스트하십시오!


답변

05AB1E , 5 바이트

Œæʒ˜Q

온라인으로 사용해보십시오!

Œæʒ˜Q  Main link. Argument l
Π     Get all sublists of l
 æ     Powerset of those lists
  ʒ˜Q  Filter: Keep the lists that when flattened equal the input

답변

파이썬 3 , 82 72 66 바이트

f=lambda l:[k+[l[i:]]for i in range(len(l))for k in f(l[:i])]or[l]

온라인으로 사용해보십시오!

@JonathanAllan 덕분에 -5 바이트


답변

하스켈 , 59 55 49 바이트

p[x]=[[[x]]]
p(x:r)=do a:b<-p r;[(x:a):b,[x]:a:b]

온라인으로 사용해보십시오!

재귀 솔루션. 사용 예 : p [1,2,3]returns [[[1,2,3]],[[1,2],[3]],[[1],[2,3]],[[1],[2],[3]]].

xnor 덕분에 -6 바이트 !