最も近いパーティション番号


12

整数のパーティションの数は、整数を正の整数の合計として表すことができる方法の数です。

例えば:

5
4 + 1
3 + 2
3 + 1 + 1
2 + 2 + 1
2 + 1 + 1 + 1
1 + 1 + 1 + 1 + 1

番号5を表す方法は7つあります。したがって、7は番号5に対応するパーティション番号です。

パーティション番号:OEIS:#A000041

行き方

入力として正の整数を取り、入力番号に最も近い2つのパーティション番号を生成する2 つの数値を出力するプログラムを作成します。

  • 入力は1つの正の整数でなければなりません。
  • 入力がそうでない場合パーティション番号で番号に最も近い2つのパーティション番号を生成する2つの異なる正の整数でなければなりません。(2つのパーティション番号が出力番号の1つの候補に等しい場合、どちらを選択してもかまいません。)
  • 入力パーティション番号である場合、出力は入力番号を生成する1つの正の整数でなければなりません。
  • 入力および出力は、合理的な形式である可能性があります。
  • 入力が1億を超えないことを想定できます(たとえば、出力が95を超えることはありません)。
  • パーティション番号を計算する組み込み関数は、他の標準の抜け穴と一緒に許可されていません
  • これはなので、最小バイト数が勝ちます。

パーティション番号:OEIS:#A000041

Input: 66
Output: 11, 12

(番号11と12に対応するパーティション番号は56と77で、66に最も近い2つのパーティション番号です。)

Input: 42
Output: 10

(番号42はすでにパーティション番号です。そのため、パーティション番号に対応する番号を出力するだけです。)

Input: 136
Output: 13, 14

(136に最も近い2つのパーティション番号は、実際には両方とも136未満です(例:101と135)。したがって、出力は14と15ではなく13と14です。)

Input: 1
Output: 0   or   1

(この特殊なケースでは、0と1の両方が有効な出力です。)

Input: 2484
Output: 26, 25   or   26, 27

(2484が等しいDであるので、これらの出力の両方が、有効であるのスタンスは1958年から3010から)

Input: 4
Output: 3, 4

(うん)


パーティション番号を定義しませんでした
誇りに思ってhaskeller 14

@proudhaskellerパーティション番号は、リンクされているOEISシーケンス内の番号です。パーティション番号の説明5は上部にあります。(十分に明確でないと思われる場合は、説明を追加します。)
kukac67 14

1
これはこの初期のパーティション質問のだまされたものに非常に近いです。
ピーターテイラー14

回答:



4

Python 2、179バイト

Z=range(1,99)
R=Z+[1]
for i in Z:R[i]=sum(-(-1)**k*(3*k*k-k<=i*2and R[i-k*(3*k-1)/2])for k in range(-i,i+1)if k)
f=lambda n:zip(*sorted((abs(n-R[i]),i)for i in Z))[1][:2-(n in R)]

オイラーの五角形定理からの再帰式を使用します。

で呼び出しf(2484)ます。出力は、1つまたは2つの数字を持つタプルです。


2

Mathematica、124123バイト

f@n_:=(p=SeriesCoefficient[1/Product[1-x^k,{k,#}],{x,0,#}]&;s=SortBy[Range@95,Abs[n-p@#]&];If[p@s[[1]]==n,s[[1]],s~Take~2])

OEISページから取得したパーティション番号の式。(不正行為の可能性があります。

使用法:

In: f[136]

Out: {14, 13}

私は勝つために答えていません。そして、これはさらにゴルフができると確信しています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.