Calcola le partizioni di N


22

La sfida è semplice: dato un intero N , ouput ogni lista di interi positivi che le somme a N . Ad esempio, se l'input era 5, è necessario eseguire l'output

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

Questi elenchi non devono essere emessi in alcun ordine particolare, né i numeri all'interno di ciascun elenco. Ad esempio, questo sarebbe anche un output accettabile per '5':

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

Puoi tranquillamente supporre che l'input sarà un numero intero positivo e puoi prendere questo numero in qualsiasi formato ragionevole.

Si può non utilizzare funzioni interne che fanno questo.

Se il tuo programma fallisce o impiega troppo tempo per N di grandi dimensioni, va bene, ma devi almeno produrre l'output corretto per i primi 15.

Si applicano scappatoie standard e vince la risposta più breve in byte!

Test 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]]

Caso di prova super grande: 15 dovrebbero produrre questo

[[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]]

Catalogare

Lo snippet di stack nella parte inferiore di questo post genera il catalogo dalle risposte a) come elenco della soluzione più breve per lingua eb) come classifica generale.

Per assicurarti che la tua risposta venga visualizzata, ti preghiamo di iniziare la risposta con un titolo, usando il seguente modello Markdown:

## Language Name, N bytes

dov'è Nla dimensione del tuo invio. Se si migliora il punteggio, è possibile mantenere i vecchi punteggi nel titolo, colpendoli. Per esempio:

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



2
Potresti chiarire cosa intendi per handle ?
Dennis,

@flawr Non sono d'accordo - trovare tutte le partizioni è sufficientemente diverso dal trovare partizioni rigide. Tuttavia, questo potrebbe essere un bersaglio ingannevole.
Mego,

Penso che cercare partizioni non ordinate e non limitare il numero di parti lo renda abbastanza diverso.
xnor

Puoi chiarire cosa intendi con buitin ?
Leaky Nun,

Risposte:


6

Pyth, 10 9 byte

{SMlMM./U

Non sono troppo sicuro se questo non è un imbroglio, ma le regole dicono solo che non è possibile utilizzare la partizione intera (non è chiaramente indicato nella domanda stessa, ma un commento di OP nella domanda dice partizione intera). Sto usando la partizione dell'elenco di stringhe , che crea sezioni dell'elenco che si concatenano fino all'elenco "madre". Credo di dover ringraziare @Maltysen per l'idea di usare liste piuttosto che stringhe.

n = 15 richiede meno di un secondo sulla mia macchina.

Nello pseudocodice del flusso di dati:

              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

Provalo online qui.


{mSlMd./*Nsalva un byte
Leaky Nun

Puoi usare 7 byte se usi il partizionamento elenco invece della partizione stringa: pyth.herokuapp.com/?code=sMM.%2Fm1&input=5&debug=0
Maltysen

@LeakyNun Beh, in realtà ho provato e non ha salvato un byte. Quando ho visto il tuo commento, ho scoperto che la mia risposta era in realtà 10 byte, quindi ho effettivamente contato male (ho dimenticato i blocchi gedit a partire da 1).
Busukxuan,

@Maltysen È necessario ordinare ciascun elenco secondario, quindi deduplicare.
Busukxuan,

@Maltysen Avevi ragione, usare le liste lo accorcia. Ho provato ad aggiungere ordinamento e deduplicazione al codice a cui ti sei collegato e non mi ha aiutato, ma è grazie a te che ho avuto l'idea di sostituire * N con U. Grazie!
busukxuan,

6

Pyth, 18 byte

L?b{SM+R-bsdsyMb]Y

Provalo online! (Alla yfine si usa per chiamare la funzione)

Questo è abbastanza veloce.

Questo utilizza la ricorsione. Se l'input è b, il mio metodo genererà le partizioni da 0a b-1, quindi genererà le partizioni corrette da ciascuna.

Ad esempio, quando b=4:

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

Quindi, ad ogni partizione in b=0, aggiungi 4(per fare la somma 4); a ciascuna partizione in b=1, append 3(per fare la somma 4); eccetera.

Questo è principalmente come funziona.

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 byte

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

Provalo online!

Per l'input 15sono necessari circa 2 secondi nel compilatore online.

Spiegazione

Funziona generando punti di partizione e quindi convertendoli in lunghezze di partizione . Quello che intendo con questo è il seguente. Dato input N = 5, una possibile partizione è [2 2 1]. Questo è rappresentato da punti di partizione [0 2 4 5], in modo tale che differenze (o lunghezze) consecutive dei punti di partizione forniscano la partizione risultante del numero di input.

Tutte le matrici di punti di partizione iniziano con 0 e terminano con N . Il numero k di punti intermedi varia da 0 a N -1. Per N e k dati, i punti intermedi possono essere generati come una combinazione dei numeri [1, 2, ..., N -1] presi k alla volta.

Numerose matrici di punti di partizione possono generare lo stesso risultato in un ordine diverso. Ad esempio, i punti di partizione [0 1 3 5] darebbero le lunghezze di partizione [1 2 2], ovvero le stesse della precedente [2 2 1] solo in un ordine diverso. Questo deve essere preso in considerazione ordinando ogni array di lunghezze di partizione e rimuovendo i duplicati .

:        % 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
Bene, il concetto di punti di partizione è un modo molto intelligente di risolverlo.
Nick,

@Nick Grazie! E benvenuti a (essere attivi in) questo sito! :-)
Luis Mendo,


5

J, 49 42 36 35 32 byte

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

È tacito ora!

Crea la partizione intera di n costruendo le partizioni intere da 1 a n . Calcola il risultato per n = 15 in un millisecondo.

Partendo dalla partizione intera iniziale [[1]]che corrisponde a n = 1, costruisci la successiva partizione intera unendo i risultati di due operazioni: aggiungendo un 1 a ciascuna partizione; incrementando il valore più piccolo di 1 in ogni partizione. Naturalmente, le partizioni duplicate verranno rimosse. Per ottenere la partizione intera n = 2 e successive,

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

uso

   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

Spiegazione

Dato che J non supporta array irregolari, ogni partizione deve essere inscatolata in modo che non vengano riempite con zero quando vengono aggiunte ad altre partizioni.

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

Python, 65 byte

Python 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)]

Questa funzione accumula una partizione e stampa gli output, ramificando le scelte. Decide quanti 1 mettere nella partizione, quanti 2 e così via. Per ogni valore i, neanche

  • Aggiunge una parte della dimensione ie diminuisce na n-i, o
  • Passa a i+1

Se i>n, quindi non è possibile creare più parti, quindi si arresta. Se ncade 0, la partizione ha esito positivo e quindi viene stampata.

Python 2

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

Un metodo ricorsivo che genera un elenco di partizioni. Come con il codice Python 3, conta la dimensione della parte ie decide ad ogni passaggio se aggiungere un'altra parte della dimensione io interrompere.

Entrambi lo fanno n=15quasi all'istante.


3

Javascript, 194 byte

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);

Non-minified

Trovare unici ordinando e confrontando con una stringa è piuttosto un trucco, ma probabilmente risparmia spazio.

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 spaceQuesto è esattamente ciò di cui tratta questo sito. : D
DJMcMayhem

2

Python 3.5, 82 72 byte

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

Restituisce una serie di tuple. n = 15 termina all'istante.

Testarlo su repl.it .


2

Haskell, 44 byte

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

La funzione ausiliaria n%mfornisce le partizioni nin parti ≥m, usando la funzione principale m=1. Si ramifica di ogni prima voce jcon m≤j≤n, ricorrendo alla partizione rimanente n-jin parti che sono almeno j. Il caso base n==0fornisce solo la partizione vuota.



1

Gelatina , 9 byte

b1ŒṖḅ1Ṣ€Q

Provalo online!

Come funziona

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 byte

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

Questo è un verbo monadico che accetta un numero intero e restituisce una matrice di array inscatolati. Provalo qui. Uso:

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

Sull'ingresso 15, funziona per circa un secondo sulla mia macchina.

Spiegazione

Questa sfida sembrava immediatamente un lavoro per Catalog ( {) e Cut ( ;.). Lo schema dell'algoritmo è:

  • Produce tutti gli 0-1 array di lunghezza n.
  • Per ognuno di essi, tagliare un narray di lunghezza fittizio lungo gli 1 e elencare le lunghezze di ciascuna parte.
  • Ordinare le lunghezze e rimuovere le matrici duplicate dal risultato.

Apparentemente, anche Luis Mendo aveva avuto la stessa idea .

Spiegazione del codice:

[:~.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.

Molto bello l'uso del taglio di ;.nuovo.
miglia

1

Brachylog , 33 byte (non concorrenti)

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

Questo non è competitivo a causa di una correzione di bug.

Questo richiede circa 1 secondo per 15sulla mia macchina. Per 20e maggiore questo si blocca con Out of global stackun'eccezione.

Spiegazione

Questo non utilizza alcun partizionamento incorporato di alcun tipo e utilizza invece il fatto che +funziona in entrambi i modi attraverso la propagazione dei vincoli.

  • Predicato principale:

    :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
    
  • Predicato 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 byte

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

Le partizioni di un numero intero n possono essere trovate risolvendo n -tuple di numeri interi non negativi ( c 1 , c 2 , ..., c n ) tali che c 1 + 2 c 2 + ... + n c n = n . FrobeniusSolveè in grado di trovare tutte le soluzioni a questa equazione che vengono utilizzate per creare tante copie dei rispettivi valori al fine di trovare tutte le partizioni intere di n .


... e in che modo non è integrato?
Leaky Nun,

@LeakyNun FrobeniusSolvenon trova le partizioni intere, trova tutte le soluzioni di numeri interi non negativi x1 ... xN alle equazioni della forma a1 x1 + a2 x2 + ... aN xN = bdata a1 ... aNe b.
miglia

0

JavaScript (Firefox 30-57) 79 ES6, 65 byte

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

Porta della soluzione Python di @ xnor. (Se solo avessi notato che potresti ricorrere oltre mche n...)

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.