비어 있지 않은 정수 목록이 제공되면 각 파티션이 비어 있지 않은 하위 목록 인 목록의 가능한 모든 파티션을 출력하십시오.
따라서 목록 [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