任意のランダム性


26

ランダムネスは楽しいです。意味のない挑戦は楽しいです。

整数入力が与えられると、すべての整数の合計がに等しくなるように(両端を含む)の完全にランダムな整数のセット(順序なし、一意)をn出力する関数を記述します。n1n^2n^2

有効な各セットに発生する可能性がゼロ以外であれば、ランダム性は均一である必要はありませ

バイト単位の最短回答(各言語ごと)が勝ちです。

Input (n) = 1, Target (n^2) = 1
Sample of possible outputs:
1

Input = 2, Target = 4
Sample of possible outputs:
3, 1
1, 3

Input = 3, Target = 9
Sample of possible outputs:
6, 1, 2
3, 5, 1
4, 3, 2

Input = 4, Target = 16
Sample of possible outputs:
1, 3, 5, 7
2, 4, 1, 9
8, 3, 1, 4

Input = 5, Target = 25
Sample of possible outputs:
11, 4, 7, 1, 2
2, 3, 1, 11, 8
6, 1, 3, 7, 8

Input = 8, Target = 64
Sample of possible outputs:
10, 3, 9, 7, 6, 19, 8, 2
7, 16, 2, 3, 9, 4, 13, 10
7, 9, 21, 2, 5, 13, 6, 1

ボーナスタスク:特定の有効な順列の数を計算する式はありnますか?


2
関連するが、まったく異なる
ジュゼッペ

1
(p / s:高速アルゴリズムを使用しているが、より多くのバイトを使用する場合は、スピードエディション(現在サンドボックス内)がポストするまで待つことを検討してください。)
user202729

1
@EriktheOutgolferすべてのセットを生成してランダムなセットを選択するよりも(はるかに)優れた方法がありますが、それらは実装がはるかに難しく、おそらくより長くなります。スピード版のためにそれらを保管してください。
user202729

2
セット数はOEIS A107379です。
nwellnhof

1
両方です。「n ^ 2のn個の異なる部分へのパーティションの数も」というコメントを参照してください。
-nwellnhof

回答:


9

Brachylog(v2)、15バイト(ランダム)または13バイト(すべての可能性)

ランダム

~lℕ₁ᵐA+√?∧A≜₁ᵐ≠

オンラインでお試しください!

関数の送信(TIOでラッパーを使用して完全なプログラムにします)。

説明

~lℕ₁ᵐA+√?∧A≜₁ᵐ≠
~l               Specify a property of a list: its length is equal to the input,
    ᵐ              and it is composed entirely of
  ℕ₁                 integers ≥ 1,
       √           for which the square root of the
      +              sum of the list
        ?              is the input.
     A   ∧A      Restricting yourself to lists with that property,
           ≜₁      pick random possible values
             ᵐ       for each element in turn,
              ≠    until you find one whose elements are all distinct.

すべての可能性

~lℕ₁ᵐ<₁.+√?∧≜

オンラインでお試しください!

可能なすべての出力を生成する関数送信。

説明

~lℕ₁ᵐ<₁.+√?∧≜
~l               Specify a property of a list: its length is equal to the input,
    ᵐ              it is composed entirely of
  ℕ₁                 integers ≥ 1,
     <₁            it is strictly increasing,
         √         and the square root of the
        +            sum of the list
          ?            is the input.
       .   ∧≜    Generate all specific lists with that property.

私はかなり驚いてい∧≜ます(通常∧~≜、入力ではなく出力をブルートフォースするために書く必要があります)が、それは入力=出力の仮定を持っていることが判明しているので、あなたの周りの方法は関係ありませんそれを実行します。

ボーナスタスク

可能性の数のシーケンスを理解するために、連続した整数でプログラムを実行して出力カウントのシーケンスを提供する別のTIOラッパーを作成しまし

1,1,3,9,30,110,436,1801,7657,33401

OEISへの旅行は、これが既知のシーケンスであるA107379であることを発見します。これは質問とほぼ同じです(奇数に制限すると、明らかに同じシーケンスになります)。このページには、シーケンスのいくつかの式がリストされています(特に単純なものはありません。2番目は値の直接式のように見えますが、表記法がわかりません)。


第二式は「係数でx^(n*(n-1)/2)の級数展開にProduct_{k=1..n} 1/(1 - x^k)(残念ながら、全く指示しない)」
user202729

ランダムなラベル付けステップ(例A≠≜₁ᵐ)の前に「すべて異なる」制約を配置すると、実行時間が平均してはるかに速くなります。
18年

これをコミュニティWikiにした理由がわかりません。これらは、編集可能になる前に編集可能な投稿を作成するための古風な方法です。
パイプ


7

05AB1E、11 バイト

nÅœʒDÙQ}sùΩ

オンラインそれを試してみたり、すべてのテストケースを確認してください

説明:

n             # Take the square of the (implicit) input
              #  i.e. 3 → 9
 Ŝ           # Get all integer-lists using integers in the range [1, val) that sum to val
              #  i.e. 9 → [[1,1,1,1,1,1,1,1,1],...,[1,3,5],...,[9]]
   ʒ   }      # Filter the list to only keep lists with unique values:
    D         # Duplicate the current value
     Ù        # Uniquify it
              #  i.e. [2,2,5] → [2,5]
      Q       # Check if it's still the same
              #  i.e. [2,2,5] and [2,5] → 0 (falsey)
        s     # Swap to take the (implicit) input again
         ù    # Only leave lists of that size
              #  i.e. [[1,2,6],[1,3,5],[1,8],[2,3,4],[2,7],[3,6],[4,5],[9]] and 3
              #   → [[1,2,6],[1,3,5],[2,3,4]]
          Ω   # Pick a random list from the list of lists (and output implicitly)


5

R68、75 48バイト(ランダム)および70バイト(確定的)

@Giuseppeの拒否サンプリング方法:

function(n){while(sum(F)!=n^2)F=sample(n^2,n);F}

オンラインでお試しください!

ゴルフしたオリジナル:

function(n,m=combn(1:n^2,n))m[,sample(which(colSums(m)==n^2)*!!1:2,1)]

オンラインでお試しください!

*!!1:2ビジネスは奇妙な方法で回避することですsample最初の引数は長さ1を持っていたときに行動します。


@ジュゼッペ「修正」:-)
ngm

非常に素晴らしい。p計算して再利用するのではなく、インデックスとして直接使用すると、バイトを節約できます。
ジュゼッペ

1
私が持っているfunction(n){while(sum(F)!=n^2)F=sample(n^2,n);F}だけでなく48 ...
ジュゼッペ

1
@ J.Doeは、sample(2,1)で発生するような何かを呼び出すときの問題を回避しn=2ます。したがってrep、これが決して起こらないことを保証するだけです。より良い方法があるかもしれませんが、これは迅速で、私は怒っていましたsample
ngm

1
あなたのメタ質問がノーになった場合、x*!!1:2オーバーでバイトを保存できますrep(x,2)
J.Doe


4

Javaの10、250の 242 222バイト

import java.util.*;n->{for(;;){int i=n+1,r[]=new int[i],d[]=new int[n];for(r[n<2?0:1]=n*n;i-->2;r[i]=(int)(Math.random()*n*n));var S=new HashSet();for(Arrays.sort(r),i=n;i-->0;)S.add(d[i]=r[i+1]-r[i]);if(!S.contains(0)&S.size()==n)return S;}}

@nwellnhofのおかげで-20バイト。

Javaが通過することに注意してください。他の4つの答えを合わせた場合の5倍の長さしかないので、悪くないでしょう。ただし、2秒未満で(組み合わせて)
実行さn=1れるn=25ので、おそらくこのチャレンジのスピードバージョン(現在はサンドボックスにある)に修正バージョンを投稿するでしょう。

オンラインでお試しください。

説明:

擬似コードでは、次のことを行います。

1)サイズの配列を生成n+1:含む0n乗、およびn-1範囲内のランダムな整数の量[0, n squared)
2)ソートこの配列
3)サイズの二番目の配列を作成nペアの前方違い含む
これらの最初の3つのステップは、私たちに含む配列与えるnランダムに整数([0, n squared)合計がn2乗する範囲
。4a)すべてのランダム値が一意ではない場合、またはそれらのいずれかが0の場合:ステップ1から再試行
4b)その他:結果としてこの差の配列を返す

実際のコードに関して:

import java.util.*;      // Required import for HashSet and Arrays
n->{                     // Method with int parameter and Set return-type
  for(;;){               //  Loop indefinitely
    int i=n+1,           //   Set `i` to `n+1`
        r[]=new int[i];  //   Create an array of size `n+1`
    var S=new HashSet(); //   Result-set, starting empty
    for(r[n<2?           //   If `n` is 1:
           0             //    Set the first item in the first array to:
          :              //   Else:
           1]            //    Set the second item in the first array to:
             =n*n;       //   `n` squared
        i-->2;)          //   Loop `i` in the range [`n`, 2]:
      r[i]=              //    Set the `i`'th value in the first array to:
           (int)(Math.random()*n*n); 
                         //     A random value in the range [0, `n` squared)
    for(Arrays.sort(r),  //   Sort the first array
        i=n;i-->0;)      //   Loop `i` in the range (`n`, 0]:
      S.add(             //    Add to the Set:
        r[i+1]-r[i]);    //     The `i+1`'th and `i`'th difference of the first array
    if(!S.contains(0)    //   If the Set does not contain a 0
       &S.size()==n)     //   and its size is equal to `n`:
      return S;}}        //    Return this Set as the result
                         //   (Implicit else: continue the infinite loop)

1
n=252秒未満で印象的です!説明を読み、それがどのように機能するかを確認する必要があります。まだブルートフォース法ですか?
Skidsdev

均一ですか?-
user202729

@ user202729それを証明する方法がわかりませんが、そうだと思います。Javaビルトインは均一で、[0, n squared)最初に範囲内のランダムな値を取得するためにそれを使用し、次にソートされたランダムな値(先頭0と末尾を含む)の差を計算n squaredします。 、私はそれを証明するかどうかはわかりませんランダム性の均一性がTBH本当に私の専門知識ではありません。。
ケビンCruijssen

3
差分配列から読み取ったことはありませんdか、何か不足していますか?
nwellnhof



2

Pyth、13 12バイト

Ofq*QQsT.cS*

こちらからオンラインでお試しください。5を超える入力では、オンラインインタープリターがMemoryErrorに遭遇することに注意してください。

Ofq*QQsT.cS*QQQ   Implicit: Q=eval(input())
                 Trailing QQQ inferred
          S*QQQ   [1-Q*Q]
        .c    Q   All combinations of the above of length Q, without repeats
 f                Keep elements of the above, as T, where the following is truthy:
      sT            Is the sum of T...
  q                 ... equal to...
   *QQ              ... Q*Q?
O                 Choose a random element of those remaining sets, implicit print

編集:代替アプローチをとることにより、バイトを保存しました。前のバージョン: Of&qQlT{IT./*


2

Pythonの3136の134 127 121 114バイト

from random import*
def f(n):
	s={randint(1,n*n)for _ in range(n)}
	return len(s)==n and sum(s)==n*n and s or f(n)

オンラインでお試しください!

コメンターが私を修正し、これはf(1)の代わりにf(5)で再帰最大深度に達するようになりました。本当の競合する答えにずっと近い。

f(5)を一度実行するのを見たことがあります、これをシャッフルで実装しようとしています。

のラムダ式を作成してみましたs=...が、バイト単位では役に立ちませんでした。たぶん他の誰かがこれで何かをすることができます: s=(lambda n:{randint(1,n*n)for _ in range(n)})(n)

さらに7バイトを削ってくれたKevinに感謝します。


1
生成されたセットが無効な場合、これは再帰を使用してセットを「再生成」しますか?確かに何かあなたのコードと間違って、それはで再帰の深さを打つならf(1)、発生可能であるべき唯一の可能な配列がn=1される[1]。また、ここで削除する余分な空白がたくさんあります。目標は最低:バイトを達成することであるので、これは、コードゴルフの挑戦であることを覚えている
Skidsdev

1
range(1,n)-> range(n)バグを解決する必要があると思います。
ジョナサンアラン

1
これでバグが修正され、余分な空白も削除されます。ゴルフの余地ももっとあると
思い

1
再帰は5から4にわずかに悪化しますが、次のように2つのreturnステートメントを組み合わせることができますreturn len(s)==n and sum(s)==n*n and s or f(n)オンラインで114バイト試してください)。
ケビンCruijssen

1
すべてを1行で使用できます。111バイト
ジョーキング

2

APL(Dyalog Unicode)、20 バイトSBCS

匿名プレフィックスラムダ。

{s=+/c←⍵?s←⍵*2:c⋄∇⍵}

オンラインでお試しください!

{} "dfn"; 引数です

⍵*2 引数を二乗する

s← 割り当てss quareの場合)

⍵?置換なしでn1…からランダムなインデックスを 見つけるs

c← 割り当てcc andidateの場合)

+/ それらを合計する

s= と比較する s

: 等しい場合

  c 候補者を返す

 他に

  ∇⍵ 議論を繰り返す


あなたが見たH.PWizの 18のバイトは?
ngn

@ngnいいえ、明らかにそうではありませんが、投稿する前にAPLソリューションが投稿されていないことを確認しました。なぜあなたは誰もいなかったのですか?
アダム

まあ、一度ゴルフをして果樹園に見せたら、投稿するインセンティブはほとんどありません:)
ngn

@ngnあなたには、いや、でも私にはあります。
アダム

1
確かに、あなたはここでaplを普及させる素晴らしい仕事をしていると思います。私はちょうどあなたが短いソリューションが発見されている知っている、それはそれらの1つ(または変動)を説明する方が良いだろうう代わりに作っていた
NGN

2

APL(Dyalog Classic)、18バイト

(≢?≢×≢)⍣(0=+.-∘≢)⍳

オンラインでお試しください!

使用する ⎕io←1

数字を生成します 1 2 ... n

(... )⍣(... )右側の関数がtrueを返すまで、左側の関数を適用し続けます

長さ、すなわち n

≢?≢×≢n1から2までのランダムに異なる整数を選択しますn

+.-∘≢ 各数から長さを引き、合計する

0= 合計が0の場合、ループを停止し、そうでない場合は再試行します


1

MATL18 13バイト

`xGU:GZrtsGU-

オンラインでお試しください!

`	# do..while:
x	# delete from stack. This implicitly reads input the first time
	# and removes it. It also deletes the previous invalid answer.
GU:	# paste input and push [1...n^2]
GZr	# select a single combination of n elements from [1..n^2]
tsGU-	# is the sum equal to N^2? if yes, terminate and print results, else goto top

私はこれをRで試さないでしょう-ランダムな文字はほとんど有効なプログラムを作成しません。
ngm

@ngm haha​​ha私は説明が正しいと思います。
ジュゼッペ

1

Japt、12バイト

²õ àU ö@²¥Xx

それを試してみてください

                 :Implicit input of integer U
²                :U squared
 õ               :Range [1,U²]
   àU            :Combinations of length U
      ö@         :Return a random element that returns true when passed through the following function as X
        ²        :  U squared
         ¥       :  Equals
          Xx     :  X reduced by addition

OPが行ったコメントによると、出力の要素の順序は無関係なので、問題àないはずです。
カミルドラカリ

ありがとう、@ KamilDrakari。更新しました。
シャギー

1

Java(JDK)、127バイト

n->{for(int s;;){var r=new java.util.TreeSet();for(s=n*n;s>0;)r.add(s-(s-=Math.random()*n*n+1));if(r.size()==n&s==0)return r;}}

オンラインでお試しください!

基準を持つセットが一致するまで無限ループ。

時間がありますように。タイムアウトせずに10にすることもできません。


に変更if(r.size()==n&s==0)すると、3バイトをゴルフできますif(r.size()+s==n)
ケビンクルーッセン

1. -私もそれについて考えていないしましたが、何も私はsがかもしれない可能性があるため-1とnサイズ()可能性があり@KevinCruijssen
オリヴィエ・グレゴワール

待ってください。セットにアイテムを追加し続ける限りs>0、サイズはより大きい場合がありnます。わかりました。その場合、実際には動作しません。nは定数ですが、残念ながら両方でsあり、r.size()両方とも下でも上でも0nそれぞれでもある変数です。
ケビンクルーイッセン

1

バッチ、182 145バイト

@set/an=%1,r=n*n,l=r+1
@for /l %%i in (%1,-1,1)do @set/at=n*(n-=1)/2,m=(r+t+n)/-~n,r-=l=m+%random%%%((l-=x=r+1-t)*(l^>^>31)+x-m)&call echo %%l%%

説明:数字が降順でピッキングされる場合、最小および最大許容ピッキングを計算し、範囲内のランダムな値を選択します。の入力例4

  • 残り16個から始めます。残りの3つのピックは少なくとも6に追加する必要があるため、11以上を選択することはできません。5だけを選択する場合、残りの3つのピックは9にしか追加できないため、少なくとも6を選択する必要があります。 16に十分です。6から10のランダムな値、たとえば6を選択します。
  • 残り10個です。残りの2つのピックは少なくとも3に追加する必要があるため、8つ以上をピックすることはできません。たまたま、前回6をピックしたため、6つ以上をピックすることはできません。また、4つだけを選択した場合、残りの2つの選択は5にしか追加できず、合計で15になるため、少なくとも5つ選択する必要があります。5から5までのランダムな値を選択します。
  • 残り5つです。残りのピックを少なくとも1に追加する必要があるため、また最後に5を選択したため、5つ以上を選択することはできません。また、少なくとも3つを選択する必要があります。2つだけを選択した場合、残りの選択は1のみになり、合計14になります。3から4までのランダムな値、たとえば4
  • 残り1つです。結局のところ、アルゴリズムは1〜1の範囲を選択し、最終的な数として1を選択します。

1

JavaScriptを、647の 291 261 260 259 251 239バイト

元のバージョンで-10バイトの@Veskahに感謝します。「ああ、そうです、あなたはすべてのセットを出力していますが、チャレンジはランダムなものを返すように要求します」

(n,g=m=n**2,r=[...Array(g||1)].map(_=>m--).sort(_=>.5-Math.random()).slice(-n),c=_=>eval(r.join`+`),i=_=>r.includes(_))=>[...{*0(){while(g>1&&c()!=g){for(z of r){y=c();r[m++%n]=y>g&&!(!(z-1)||i(z-1))?z-1:y<g&&!i(z+1)?z+1:z}}yield*r}}[0]()]

オンラインでお試しください!

n^21ベースのインデックスの配列を作成し、配列をランダムにソートし、配列nから要素をスライスします。ランダム要素の合計は、ランダム要素のn^2ループ配列と等しくありませんが、配列要素の合計がより大きくn^2、現在の要素-1がゼロに等しくない場合、または現在の要素-1が現在の配列にない場合は1、配列の合計がより小さくn^2、現在の要素+1が配列にない場合は、1要素に追加します。配列の合計がn^2ブレークループに等しい場合、配列を出力します。


1
z.joinを変数にプルすることにより637バイト、およびk++
ヴェスカ

@Veskah 2つのwhileループは、おそらくパラメーターを受け入れる単一の関数の本体に減らすこともできます。また、if..elseステートメントの代わりに条件演算子(三項)を使用できます。ゴルフ用に調整される可能性が非常に高いコードのその他の部分。つまり、letステートメントを削除します。
guest271314

@Veskah 601バイトのための三元を代入せずif..else
guest271314

1
ああ、すべてのセットを出力しているのに対し、チャレンジはランダムなセットを返すように要求します(詳細についてはOPコメントを参照してください)
-Veskah

@Veskahチャレンジと例を誤って解釈したか、質問ボーナスタスク:特定の有効な順列の数を計算する式はありnますか?」違いありません。。アルゴリズムn^2が関数の1回の呼び出しで生成された出力配列の期待される結果を一貫して返したかどうかをテストし、同時にこの質問Nで満たされたN次元N ^ N配列との類似性を考慮します。
guest271314

0

Japt、20バイト

²õ ö¬oU íUõ+)Õæ@²¥Xx

オンラインでお試しください!

「均一でない」ランダム性を非常に大きく活用し、ほとんどの場合、最初のn奇数を出力しn^2ます。理論的には、他の有効なセットを出力できますが、smallの場合のみ確認できましたn

説明:

²õ                      :Generate the range [1...n^2]
   ö¬                   :Order it randomly
     oU                 :Get the last n items
        í   )Õ          :Put it in an array with...
         Uõ+            : The first n odd numbers
              æ_        :Get the first one where...
                  Xx    : The sum
                ²¥      : equals n^2


0

C(gcc)128バイト

p(_){printf("%d ",_);}f(n,x,y,i){x=n*n;y=1;for(i=0;++i<n;p(y),x-=y++)while(rand()&&(n-i)*(n-i+1)/2+(n-i)*(y+1)+y<x)y++;p(x);}

オンラインでお試しください!

ceilingcatのおかげで-3バイト

注:確率は均一とは非常にかけ離れています。私が意味することの説明と、それが機能することをテストするためのより良い手段を参照してください(分布を均一に近づけることにより(ただし、まだまだ遠いです))。

どうやって?

基本的な考え方は、重複を心配しないように、増加する数値のみを選択することです。数値を選択するたびに、可能な場合はゼロ以外の可能性で「スキップ」します。

xky

y+y+1+y+2+
x
kk+12+ky+1+y<バツ

それにもかかわらず、ロジックはy上記の式を満たすものを破棄する機会を持つことです。

コード

p(_){printf("%d ",_);}  // Define print(int)
f(n,x,y,i){             // Define f(n,...) as the function we want
    x=n*n;              // Set x to n^2
    y=1;                // Set y to 1
    for(i=0;++i<n;){    // n-1 times do...
        while(rand()&&  // While rand() is non-zero [very very likely] AND
            (n-i)*      // (n-i) is the 'k' in the formula
            (n-i+1)/2+  // This first half takes care of the increment
            (n-i)*(y+1) // This second half takes care of the y+1 starting point
            +y<x)       // The +y takes care of the current value of y
        y++;            // If rand() returned non-zero and we can skip y, do so
    p(y);               // Print y
    x-=y++;             // Subtract y from the total and increment it
    }p(x);}             // Print what's left over.

私はより良いテストに言及トリックコードが含む置換rand()&&rand()%2&&任意のYはでなく1より、スキップされること50-50可能性があるようにRAND_MAX、任意の所与のyが使用される可能性が。


誰かが私の数学の一貫性をチェックしてくれたらそれが大好きです。また、このタイプのソリューションが均一なランダムスピードチャレンジを簡単にできるのではないかと思います。式は答えに上限と下限を設定しますが、その範囲の一様な乱数は一様なランダムな結果になりますか?なぜそうなのかはわかりませんが、しばらくはあまり組み合わせ論を行っていません。
ラムダベータ

提案するp(y),x-=y++)while(rand()&&(i-n)*((~n+i)/2+~y)+y<x)y++;代わりに){while(rand()&&(n-i)*(n-i+1)/2+(n-i)*(y+1)+y<x)y++;p(y);x-=y++;}
ceilingcat

@ceilingcatあなたが見つけたこれらの小さな改善が大好きです。私は常に実装のために最適化するのを忘れる全体的なアルゴリズムに集中します(ゴルフ以外のソ​​ースが動作するようになると、基本的に自動操縦のゴルフモードになります-だから多くの節約を逃します)
-LambdaBeta

ちょっと、それらの構文ゴルフを持っているのはあなただけではありません。そのようなC / C ++の回答の多くはほとんど改善されていません(あなたのものではない場合を除き、@ ceilingcatは通常それらをスナップアップします)。
ザカリー

ええ、私はあなた2人がおそらく最もアクティブなC / C ++パターであることに気づきました(ゴルフの類推を最後の数ストロークまで拡張するためにパッティングを使用できますか?それはあなたがそれを改善するのに十分なほど十分にゴルフのコードを理解することさえできることを常に印象づけます。
ラムダベータ




0

Mathematica 40バイト

RandomChoice[IntegerPartitions[n^2, {n}]]

1
まず、2 ^ nではなくn ^ 2です。第二に、あなたのプログラムは機能であり、ゴルフである必要があります。これを試してください RandomChoice@IntegerPartitions[#^2,{#}]&
-J42161217

1
また、結果は(順序なし、一意)でなければなりませんが、この関数は両方で失敗します
-J42161217

0

Wolfram言語(Mathematica)、49バイト

(While[Tr[s=RandomSample[Range[#^2],#]]!=#^2];s)&

オンラインでお試しください!

@ J42161217によるゴルフバージョン。


Wolfram言語(Mathematica)、62バイト

Range[#-1,0,-1]+RandomChoice@IntegerPartitions[#*(#+1)/2,{#}]&

オンラインでお試しください!

使い方

n2nn2n2n/2=n2+n/20n1n10


ボーナスタスクの答え

ボーナスタスク:特定の有効な順列の数を計算する式はありnますか?

partnknk

partnk=partn1k1+partnkk

「パーティションに1が含まれる場合は削除し、そうでない場合はすべての用語から1を引く」と理解できます。別のMath.SEの質問に関する詳細はこちら。初期条件と組み合わせるpartn1=1n<kpartnk=0、プログラムとそれを計算することができます。望ましい答えは次のとおりです。

partn2+n2n

つまり、Mathematicaでは:

Length@IntegerPartitions[#*(#+1)/2,{#}]&

オンラインでお試しください!


これはコードゴルフです(While[Tr[s=RandomSample[Range[#^2],#]]!=#^2];s)&
。49
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.