N의 파티션을 계산


22

당신의 도전은 간단하다 : 정수 주어진 N 에 금액이 양의 정수의 모든 목록 OUPUT N . 예를 들어 입력이 5 인 경우 출력해야합니다.

[1, 1, 1, 1, 1]
[1, 1, 1, 2]
[1, 1, 3]
[1, 2, 2]
[1, 4]
[2, 3]
[5]

이 목록은 특정 순서로 출력되거나 각 목록 내부의 숫자를 출력하지 않아도됩니다. 예를 들어, 이것은 '5'에 허용되는 출력입니다.

[1, 1, 1, 2]
[5]
[3, 1, 1]
[2, 1, 2]
[4, 1]
[1, 1, 1, 1, 1]
[2, 3]

입력이 양의 정수라고 안전하게 가정 할 수 있으며이 숫자를 적절한 형식으로 취할 수 있습니다.

이를 수행하는 내장 함수를 사용할 수 없습니다 .

프로그램이 실패하거나 큰 N에 대해 너무 오래 걸리는 경우 이는 정상이지만 최소한 처음 15 개에 대한 올바른 출력을 생성해야합니다.

표준 허점이 적용되고 바이트 단위의 최단 답변이 승리합니다!

IO 테스트

1:
[[1]]

2:
[[1, 1], [2]]

3:
[[1, 1, 1], [1, 2], [3]]

4:
[[1, 1, 1, 1], [1, 1, 2], [1, 3], [2, 2], [4]]

5:
[[1, 1, 1, 1, 1], [1, 1, 1, 2], [1, 1, 3], [1, 2, 2], [1, 4], [2, 3], [5]]

7:
[[1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 2], [1, 1, 1, 1, 3], [1, 1, 1, 2, 2], [1, 1, 1, 4], [1, 1, 2, 3], [1, 1, 5], [1, 2, 2, 2], [1, 2, 4], [1, 3, 3], [1, 6], [2, 2, 3], [2, 5], [3, 4], [7]]

10:
[[1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 2], [1, 1, 1, 1, 1, 1, 1, 3], [1, 1, 1, 1, 1, 1, 2, 2], [1, 1, 1, 1, 1, 1, 4], [1, 1, 1, 1, 1, 2, 3], [1, 1, 1, 1, 1, 5], [1, 1, 1, 1, 2, 2, 2], [1, 1, 1, 1, 2, 4], [1, 1, 1, 1, 3, 3], [1, 1, 1, 1, 6], [1, 1, 1, 2, 2, 3], [1, 1, 1, 2, 5], [1, 1, 1, 3, 4], [1, 1, 1, 7], [1, 1, 2, 2, 2, 2], [1, 1, 2, 2, 4], [1, 1, 2, 3, 3], [1, 1, 2, 6], [1, 1, 3, 5], [1, 1, 4, 4], [1, 1, 8], [1, 2, 2, 2, 3], [1, 2, 2, 5], [1, 2, 3, 4], [1, 2, 7], [1, 3, 3, 3], [1, 3, 6], [1, 4, 5], [1, 9], [2, 2, 2, 2, 2], [2, 2, 2, 4], [2, 2, 3, 3], [2, 2, 6], [2, 3, 5], [2, 4, 4], [2, 8], [3, 3, 4], [3, 7], [4, 6], [5, 5], [10]]

초대형 테스트 케이스 : 15는 이것을 출력해야합니다

[[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 4], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3], [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 5], [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2], [1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4], [1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 3], [1, 1, 1, 1, 1, 1, 1, 1, 1, 6], [1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 3], [1, 1, 1, 1, 1, 1, 1, 1, 2, 5], [1, 1, 1, 1, 1, 1, 1, 1, 3, 4], [1, 1, 1, 1, 1, 1, 1, 1, 7], [1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2], [1, 1, 1, 1, 1, 1, 1, 2, 2, 4], [1, 1, 1, 1, 1, 1, 1, 2, 3, 3], [1, 1, 1, 1, 1, 1, 1, 2, 6], [1, 1, 1, 1, 1, 1, 1, 3, 5], [1, 1, 1, 1, 1, 1, 1, 4, 4], [1, 1, 1, 1, 1, 1, 1, 8], [1, 1, 1, 1, 1, 1, 2, 2, 2, 3], [1, 1, 1, 1, 1, 1, 2, 2, 5], [1, 1, 1, 1, 1, 1, 2, 3, 4], [1, 1, 1, 1, 1, 1, 2, 7], [1, 1, 1, 1, 1, 1, 3, 3, 3], [1, 1, 1, 1, 1, 1, 3, 6], [1, 1, 1, 1, 1, 1, 4, 5], [1, 1, 1, 1, 1, 1, 9], [1, 1, 1, 1, 1, 2, 2, 2, 2, 2], [1, 1, 1, 1, 1, 2, 2, 2, 4], [1, 1, 1, 1, 1, 2, 2, 3, 3], [1, 1, 1, 1, 1, 2, 2, 6], [1, 1, 1, 1, 1, 2, 3, 5], [1, 1, 1, 1, 1, 2, 4, 4], [1, 1, 1, 1, 1, 2, 8], [1, 1, 1, 1, 1, 3, 3, 4], [1, 1, 1, 1, 1, 3, 7], [1, 1, 1, 1, 1, 4, 6], [1, 1, 1, 1, 1, 5, 5], [1, 1, 1, 1, 1, 10], [1, 1, 1, 1, 2, 2, 2, 2, 3], [1, 1, 1, 1, 2, 2, 2, 5], [1, 1, 1, 1, 2, 2, 3, 4], [1, 1, 1, 1, 2, 2, 7], [1, 1, 1, 1, 2, 3, 3, 3], [1, 1, 1, 1, 2, 3, 6], [1, 1, 1, 1, 2, 4, 5], [1, 1, 1, 1, 2, 9], [1, 1, 1, 1, 3, 3, 5], [1, 1, 1, 1, 3, 4, 4], [1, 1, 1, 1, 3, 8], [1, 1, 1, 1, 4, 7], [1, 1, 1, 1, 5, 6], [1, 1, 1, 1, 11], [1, 1, 1, 2, 2, 2, 2, 2, 2], [1, 1, 1, 2, 2, 2, 2, 4], [1, 1, 1, 2, 2, 2, 3, 3], [1, 1, 1, 2, 2, 2, 6], [1, 1, 1, 2, 2, 3, 5], [1, 1, 1, 2, 2, 4, 4], [1, 1, 1, 2, 2, 8], [1, 1, 1, 2, 3, 3, 4], [1, 1, 1, 2, 3, 7], [1, 1, 1, 2, 4, 6], [1, 1, 1, 2, 5, 5], [1, 1, 1, 2, 10], [1, 1, 1, 3, 3, 3, 3], [1, 1, 1, 3, 3, 6], [1, 1, 1, 3, 4, 5], [1, 1, 1, 3, 9], [1, 1, 1, 4, 4, 4], [1, 1, 1, 4, 8], [1, 1, 1, 5, 7], [1, 1, 1, 6, 6], [1, 1, 1, 12], [1, 1, 2, 2, 2, 2, 2, 3], [1, 1, 2, 2, 2, 2, 5], [1, 1, 2, 2, 2, 3, 4], [1, 1, 2, 2, 2, 7], [1, 1, 2, 2, 3, 3, 3], [1, 1, 2, 2, 3, 6], [1, 1, 2, 2, 4, 5], [1, 1, 2, 2, 9], [1, 1, 2, 3, 3, 5], [1, 1, 2, 3, 4, 4], [1, 1, 2, 3, 8], [1, 1, 2, 4, 7], [1, 1, 2, 5, 6], [1, 1, 2, 11], [1, 1, 3, 3, 3, 4], [1, 1, 3, 3, 7], [1, 1, 3, 4, 6], [1, 1, 3, 5, 5], [1, 1, 3, 10], [1, 1, 4, 4, 5], [1, 1, 4, 9], [1, 1, 5, 8], [1, 1, 6, 7], [1, 1, 13], [1, 2, 2, 2, 2, 2, 2, 2], [1, 2, 2, 2, 2, 2, 4], [1, 2, 2, 2, 2, 3, 3], [1, 2, 2, 2, 2, 6], [1, 2, 2, 2, 3, 5], [1, 2, 2, 2, 4, 4], [1, 2, 2, 2, 8], [1, 2, 2, 3, 3, 4], [1, 2, 2, 3, 7], [1, 2, 2, 4, 6], [1, 2, 2, 5, 5], [1, 2, 2, 10], [1, 2, 3, 3, 3, 3], [1, 2, 3, 3, 6], [1, 2, 3, 4, 5], [1, 2, 3, 9], [1, 2, 4, 4, 4], [1, 2, 4, 8], [1, 2, 5, 7], [1, 2, 6, 6], [1, 2, 12], [1, 3, 3, 3, 5], [1, 3, 3, 4, 4], [1, 3, 3, 8], [1, 3, 4, 7], [1, 3, 5, 6], [1, 3, 11], [1, 4, 4, 6], [1, 4, 5, 5], [1, 4, 10], [1, 5, 9], [1, 6, 8], [1, 7, 7], [1, 14], [2, 2, 2, 2, 2, 2, 3], [2, 2, 2, 2, 2, 5], [2, 2, 2, 2, 3, 4], [2, 2, 2, 2, 7], [2, 2, 2, 3, 3, 3], [2, 2, 2, 3, 6], [2, 2, 2, 4, 5], [2, 2, 2, 9], [2, 2, 3, 3, 5], [2, 2, 3, 4, 4], [2, 2, 3, 8], [2, 2, 4, 7], [2, 2, 5, 6], [2, 2, 11], [2, 3, 3, 3, 4], [2, 3, 3, 7], [2, 3, 4, 6], [2, 3, 5, 5], [2, 3, 10], [2, 4, 4, 5], [2, 4, 9], [2, 5, 8], [2, 6, 7], [2, 13], [3, 3, 3, 3, 3], [3, 3, 3, 6], [3, 3, 4, 5], [3, 3, 9], [3, 4, 4, 4], [3, 4, 8], [3, 5, 7], [3, 6, 6], [3, 12], [4, 4, 7], [4, 5, 6], [4, 11], [5, 5, 5], [5, 10], [6, 9], [7, 8], [15]]

목록

이 게시물의 맨 아래에있는 스택 스 니펫은 답변 a) 언어 당 가장 짧은 솔루션 목록으로, b) 전체 리더 보드로 카탈로그를 생성합니다.

답변이 표시되도록하려면 다음 마크 다운 템플릿을 사용하여 헤드 라인으로 답변을 시작하십시오.

## Language Name, N bytes

N제출물의 크기는 어디에 있습니까 ? 당신이 당신의 점수를 향상시킬 경우에, 당신은 할 수 있습니다 를 통해 눈에 띄는에 의해, 헤드 라인에 오래된 점수를 유지한다. 예를 들어 :

## Ruby, <s>104</s> <s>101</s> 96 bytes



2
핸들 이 의미하는 바를 명확하게 설명해 주 시겠습니까?
Dennis

@flawr 동의하지 않습니다-모든 파티션을 찾는 것은 엄격한 파티션을 찾는 것과는 다릅니다. 그러나 이것은 속임수 대상이 될 수 있습니다.
Mego

정렬되지 않은 파티션을 찾고 부품 수를 제한하지 않으면 이것이 충분히 달라집니다.
xnor

buitin 이 무슨 뜻인지 알 수 있습니까 ?
Leaky Nun

답변:


6

Pyth, 10 9 바이트

{SMlMM./U

이것이 부정 행위인지 여부는 확실하지 않지만 규칙은 정수 파티션을 사용할 수 없다고 말했습니다 (질문 자체에는 명확하게 언급되어 있지 않지만 질문에 OP의 의견은 정수 파티션이라고합니다). 내가 사용하고 문자열 목록 은 "어머니"목록까지 연결하여 목록의 조각을 만드는 파티션을. 문자열 대신 목록을 사용한다는 아이디어에 대해 @Maltysen에게 감사해야한다고 생각합니다.

내 컴퓨터에서 n = 15는 1 초 미만입니다.

데이터 흐름 의사 코드에서 :

              input       // initial data
        U     range       // makes a list of length equal to input
      ./      partition   // partitions string
   lMM        length      // length of each substring in each way to partition
 SM           sort        // sort each way to partition
{             deduplicate // removes all duplicate after sorting
              print       // implicit, output final result

여기에서 온라인으로 사용해보십시오.


{mSlMd./*N 바이트를 저장
Leaky Nun

문자열 파티션 대신 list partitioning을 사용하면 7 바이트를 사용할 수 있습니다. pyth.herokuapp.com/?code=sMM.%2Fm1&input=5&debug=0
Maltysen

@LeakyNun 글쎄 실제로 시도했지만 바이트를 저장하지 않았습니다. 귀하의 의견을 보았을 때 내 대답이 실제로 10 바이트라는 것을 알았으므로 실제로 잘못 계산되었습니다 (gedit 블록은 1부터 시작하는 것을 잊었습니다).
busukxuan

@Maltysen 각 하위 목록을 정렬 한 다음 중복 제거해야합니다.
busukxuan

@Maltysen 당신이 옳았다, 목록을 사용하면 그것을 단축합니다. 링크 된 코드에 정렬 및 중복 제거를 시도했지만 도움이되지는 않았지만 * N을 U로 대체한다는 아이디어를 얻었습니다. 감사합니다!
busukxuan

6

Pyth, 18 바이트

L?b{SM+R-bsdsyMb]Y

온라인으로 사용해보십시오! ( y끝은 함수를 호출하는 데 사용됩니다)

이것은 매우 빠릅니다.

재귀를 사용합니다. 입력 인 경우 b, 내 방법은 파티션을 생성 0하는 b-1다음 각에서 올바른 파티션을 생성한다.

예를 들어, b=4:

  • b=0 준다 [[]]
  • b=1 준다 [[1]]
  • b=2 준다 [[2], [1, 1]]
  • b=3 준다 [[3], [1, 2], [1, 1, 1]]

그런 다음 각 파티션에 b=04 (합계 4를 만들기 위해) 추가하십시오 . 의 각 파티션에 b=1추가 3(합산 4); 기타

이것이 주로 작동하는 방식입니다.

L?b{SM+R-bsdsyMb]Y

L                    define a function called "y" which takes an argument: "b"
 ?b                  test for truthiness of b (in this case, test if b>0).


   {SM+R-bsdsyMb     if truthy:

             yMb         call this function from 0 to b-1.
            s            unpack each list of partitions, generating only partitions.
      +R                 to each partition (d), append:
        -                    the difference of
         b                   b (the argument) and
          sd                 the sum of d (the partition).
    SM                   sort each partition.
   {                     remove duplicates.


                ]Y   if falsey:

                 Y       yield [].
                ]        yield [[]].

5

MATL , 20 바이트

:"0Gq:@XNG3$Yc!dS!Xu

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

15온라인 컴파일러에서 입력 하는 데 약 2 초가 걸립니다.

설명

이것은 파티션 포인트 를 생성 한 다음 파티션 길이 로 변환하여 작동합니다 . 이것이 의미하는 바는 다음과 같습니다. 입력 N = 5 인 경우 가능한 파티션은 [2 2 1]입니다. 이것은 연속적인 차이를 갖도록 분할 점 [0 2 4 5]으로 표시됩니다 으로 표시되므로 분할 지점의 (또는 길이)는 입력 번호의 결과 분할을 제공합니다.

파티션 지점의 모든 배열은 0으로 시작하고 N으로 끝납니다 . 중간 지점 의 수 k 는 0에서 N -1 까지 다양 합니다. 들면 Nk는 소정의 중간 점은 숫자 [1, 2, ...의 조합으로서 생성 될 수 N -1] 촬영 K 한번에.

여러 파티션 지점 배열에서 동일한 결과가 다른 순서로 나타날 수 있습니다. 예를 들어, 파티션 포인트 [0 1 3 5]는 파티션 길이 [1 2 2]를 제공합니다. 즉, 이전 [2 2 1]과 다른 순서로만 동일합니다. 각 파티션 길이 배열을 정렬 하고 중복을 제거하여이 점 을 고려해야합니다 .

:        % Implicitly input N. Push [1 2 ... N]. These are the possible values of k,
         % except with N instead of 0
"        % For each
  0      %   Push 0
  Gq:    %   Push [1 ... N-1]. These the possible intermediate points
  @XN    %   Push k and produce the combinations. Each k produces a 2D array with
         %   each combination on a row. The value k=N produces an empty array
  G      %   Push N
  3$Yc   %   Prepend a column of zeros and append a column of N to the array
  !d     %   Transpose. Consecutive differences of each column
  S!     %   Sort each column. Transpose
  Xu     %   Keep only unique rows
         % Implicitly end for and display all arrays in the stack

1
파티션 포인트의 개념은 이것을 해결하는 매우 영리한 방법입니다.
Nick

@ 닉 감사합니다! 이 사이트에 오신 것을 환영합니다! :-)
Luis Mendo


5

J, 49 42 36 35 32 바이트

a:1&([:~.@,(,;}./:~@,(+{.))&>)~]

지금은 암묵입니다!

의 정수 분할 빌드 N을 1 내지 정수 파티션을 구성하여 N . n = 15 의 결과를 밀리 초 단위로 계산합니다 .

n = 1에 [[1]]해당하는 초기 정수 파티션으로 시작하여 두 연산의 결과를 결합하여 다음 정수 파티션을 구성합니다. 각 파티션에 1을 추가합니다. 각 파티션에서 가장 작은 값을 1 씩 증가시킵니다. 물론 중복 파티션이 제거됩니다. 정수 파티션 n = 2 이상 을 얻으려면

Partition for n = 1
[[1]]

Partition for n = 2
[[1, 1]] join [[2]]
= [[1, 1], [2]]

Partition for n = 3
[[1, 2], [1, 1, 1]] join [[3], [1, 2]]
= [[3], [1, 2], [1, 1, 1]]

... and so on

용법

   f =: a:1&([:~.@,(,;}./:~@,(+{.))&>)~]
   f 1
┌─┐
│1│
└─┘
   f 2
┌───┬─┐
│1 1│2│
└───┴─┘
   f 3
┌─────┬───┬─┐
│1 1 1│1 2│3│
└─────┴───┴─┘
   f 5
┌─────────┬───────┬─────┬───┬─────┬───┬─┐
│1 1 1 1 1│1 1 1 2│1 2 2│2 3│1 1 3│1 4│5│
└─────────┴───────┴─────┴───┴─────┴───┴─┘
   # f 15
176

설명

J는 비정형 배열을 지원하지 않으므로 각 파티션은 상자로 묶어야하므로 다른 파티션에 추가 될 때 0으로 채워지지 않습니다.

a:1&([:~.@,(,;}./:~@,(+{.))&>)~]  Input: n
a:                                The empty box
                               ]  Get the input n
  1&(                        )~   Repeat n times with an initial array of one empty box
           (              )&>       Operate on each partition
                     (   )            Hook a partition
                       {.               Get its head (the smallest value)
  1                   +                 Add 1 to it
  1           }.                      Drop the first value in each partition
                    ,                 Join the previous two results
                /:~@                  Sort it
  1         ,                         Prepend a 1 to the initial partition
             ;                        Box the last two results and join them
     [:   ,                         Flatten the pairs of boxes
       ~.@                          Remove duplicates and return
                                  Return the final result where each box
                                  is a partition of n

4

파이썬, 65 바이트

파이썬 3

def f(n,i=1,l=[]):n or print(l);i>n or[f(n-i,i,[i]+l),f(n,i+1,l)]

이 기능은 파티션을 누적하고 선택에 따라 분기하여 출력을 인쇄합니다. 파티션에 넣을 1 수, 2 수 등을 결정합니다. 각 값 i에 대해

  • 크기의 부품을 추가 i하고 감소 nn-i, 또는
  • 로 이동 i+1

인 경우 i>n더 이상 부품을 만들 수 없으므로 중지됩니다. 로 n떨어지면 0파티션이 성공한 것이므로 인쇄됩니다.

파이썬 2

f=lambda n,i=1:n/i and[l+[i]for l in f(n-i,i)]+f(n,i+1)or[[]][n:]

파티션 목록을 출력하는 재귀 적 방법입니다. Python 3 코드와 마찬가지로 부품 크기를 계산하고 i각 단계에서 크기의 다른 부분을 추가할지 i중지 할지를 결정 합니다.

둘 다 n=15거의 즉시 수행됩니다.


3

자바 스크립트, 194 바이트

p=n=>{var a=[];for(var i=1;i<=n-i;i+=1){for(v of p(n-i)){v.push(i);a.push(v.sort())}}a.push([n]);return a};n=5;s=p(n).map(v=>JSON.stringify(v));s=s.filter((v,i)=>s.indexOf(v)==i);console.log(s);

축소되지 않은

문자열을 정렬하고 비교하여 고유성을 찾는 것은 꽤 해킹이지만 공간을 절약 할 수 있습니다.

p = n => {
    var a = [];

    for (var i = 1; i <= n-i; i++)
    {
        for (v of p(n-i)) {
            v.push(i);
            a.push(v.sort());
        }
    }

    a.push([n]);

    return a;
}

n = 5;
s = p(n).map(v =>  JSON.stringify(v));
s = s.filter((v,i) => s.indexOf(v) == i);
console.log(s);

4
Quite a hack but saves space그것이 바로이 사이트에 관한 것입니다. : D
DJMcMayhem

2

파이썬 3.5, 82 72 바이트

f=lambda n:{(*sorted([*p,i]),)for i in range(1,n)for p in f(n-i)}|{(n,)}

튜플 세트를 리턴합니다. n = 15 가 즉시 완료됩니다.

repl.it에서 테스트하십시오 .


2

하스켈, 44 바이트

0%m=[[]]
n%m=[j:r|j<-[m..n],r<-(n-j)%j]
(%1)

보조 기능 n%m은 주요 기능을 사용하여 n부분으로 파티션을 제공합니다 . 그것은 각각의 첫 번째 항목 으로 분기 하고, 나머지 부분은 최소한 부분으로 반복됩니다 . 기본 사례 는 빈 파티션 만 제공합니다.≥mm=1jm≤j≤nn-jjn==0



1

젤리 , 9 바이트

b1ŒṖḅ1Ṣ€Q

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

작동 원리

b1ŒṖḅ1Ṣ€Q  Main link. Argument: n (integer)

b1         Convert n to unary, i.e., a list A of n 1's.
  ŒṖ       Generate all partitions of the list A.
    ḅ1     Convert each flat list from unary to integer.
      Ṣ€   Sort each resulting list.
        Q  Unique; deduplicate the lists.

1

J, 39 바이트

[:~.i.<@\:~@(#;.1~"1 0)1,@{@;(<1 0)#~<:

이것은 정수를 취하고 박스형 배열의 배열을 반환하는 모나 딕 동사입니다. 여기에서 시도하십시오. 용법:

   p =: [:~.i.<@\:~@(#;.1~"1 0)1,@{@;(<1 0)#~<:
   p 3
+-----+---+-+
|1 1 1|2 1|3|
+-----+---+-+

입력 15에서 내 컴퓨터에서 약 1 초 동안 실행됩니다.

설명

이 과제는 즉시 카탈로그 ( {) 및 잘라 내기 ( ) 작업으로 보였습니다 ;.. 알고리즘의 개요는 다음과 같습니다.

  • 길이가 0-1 인 모든 배열을 생성합니다 n.
  • 각각에 n대해 1을 따라 더미 길이 배열을 자르고 각 부분의 길이를 나열하십시오.
  • 길이를 정렬하고 결과에서 중복 배열을 제거하십시오.

분명히 Luis Mendo도 같은 생각을 가지고있었습니다 .

코드 설명 :

[:~.i.<@\:~@(#;.1~"1 0)1,@{@;(<1 0)#~<:   Input is n.
                                     <:   n-1
                                   #~     copies of
                             (<1 0)       the boxed array [1 0].
                       1    ;             Prepend the boxed array [1].
                          {@              Catalog: produces all combinations of taking one
                                          item from each box, in a high-dimensional matrix.
                        ,@                Flatten the matrix. This results in a list of all
                                          boxed 0-1 arrays of length n that begin with a 1.
    i.                                    The array A =: 0, 1, ..., n-1.
            (     "1 0)                   For each of the boxed arrays B:
              ;.1~                          cut A along the occurrences of 1s in B,
             #                              take the length of each part,
        \:~@                                sort the lengths,
      <@                                    and put the result in a box.
[:~.                                      Remove duplicate boxes.

;.다시 잘 사용 합니다.
마일

1

Brachylog , 33 바이트 (비경쟁)

:1f:oad.
:1eI,.##lI,.:{.>0}a+?,.=

이것은 버그 수정으로 인해 경쟁이 아닙니다.

15내 컴퓨터에서 약 1 초가 걸립니다 . 들어 20더 큰이가와 충돌 Out of global stack예외입니다.

설명

이것은 어떤 종류의 파티션도 내장하지 않고 대신에 + 제한 전파를 통해 두 가지 방식으로 작동 .

  • 주요 술어 :

    :1f                       Find the list of all valid outputs of predicate 1
       :oa                    Sort each element of that list
          d.                  Output is that list of sorted lists minus all duplicates
    
  • 술어 1 :

    :1eI                      I is an integer between Input and 1
        .##lI,                Output is a list of length I
              .:{.>0}a        Elements of Output are integers greater than 0
                      +?,     The sum of the elements of Output is Input
                         .=   Assign values to the elements of Output
    

1

Mathematica, 62 54 바이트

Inner[#2~Table~#&,FrobeniusSolve[r=Range@#,#],r,Join]&

정수 n 의 파티션은 음수가 아닌 정수의 n- 튜플 ( c 1 , c 2 , ..., c n )을 구하여 c 1 + 2 c 2 + ... + n c n을 구 함으로써 구할 수 있습니다. = n 입니다. FrobeniusSolven의 모든 정수 파티션을 찾기 위해 해당 값의 많은 사본을 생성하는 데 사용되는이 방정식에 대한 모든 솔루션을 찾을 수 있습니다.


... 어떻게 내장되어 있지 않습니까?
Leaky Nun

@LeakyNun는 FrobeniusSolve이 모든 솔루션을 발견, 파티션을 정수 찾을 수없는 음이 아닌 정수를 x1 ... xN 형태의 방정식을 a1 x1 + a2 x2 + ... aN xN = b제공 a1 ... aN하고 b.
마일

0

JavaScript (Firefox 30-57) 79 ES6, 65 바이트

f=(n,m=1,a=[])=>n?m>n?[]:[...f(n-m,m,[...a,m]),...f(n,m+1,a)]:[a]

@xnor의 Python 솔루션 포트. (만약 당신이 m뿐만 아니라 재귀 할 수 있음을 알게 된 경우 n...)

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