「押韻構成は、」文字の文字列であるa
とz
から出発して文字の最初の発生が(隙間なく)昇順になるように、、 a
。例(最初の出現がマークされている):
abccdbebdcfa
^^^ ^ ^ ^
長さの韻体系の数はベル番号N
によって与えられます B(N)
。(OEIS A000110)
チャレンジ
あなたの仕事は、これらの韻律体系の列挙、すなわち整数から韻律体系への全単射マッピングを実装することです。正の整数N <= 26
と負でない整数が与えられます0 <= i < B(N)
。または、範囲を使用できます1 <= i <= B(N)
。N
すべてi
が異なる文字列を生成するように、lengthの韻体系を出力する必要があります。
プログラムまたは関数を作成し、STDIN(または最も近い代替)、コマンドライン引数または関数引数を介して入力を取得し、STDOUT(または最も近い代替)、関数の戻り値または関数(out)パラメーターを介して結果を出力できます。
小文字または大文字を(一貫して)使用できます。
あなたのコードは、妥当な時間内で有効な任意の入力を処理できなければなりません(例えば、数時間を超えないためN = 26
、最悪の場合、i
)。これによりN
、遅い言語でも指数関数的にスケーリングするソリューション(小さなベースの場合)を許可しますが、線形にスケーリングするソリューションi
(つまりB(N)
)を禁止する必要があります。特に、スキームをN
破棄するまで、長さのあるすべての有効なライムスキームを繰り返し処理することはできませんi
。
標準のコードゴルフ規則が適用されます。
例
i
スキームへの正確な割り当て(つまり、特定のスキームの順序N
)はユーザー次第です。ただし、辞書式順序を選択した場合、ソリューションは次の表に対応する必要があります(-
無効な入力を示します)。
N\i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
1 a - - - - - - - - - - - - - -
2 aa ab - - - - - - - - - - - - -
3 aaa aab aba abb abc - - - - - - - - - -
4 aaaa aaab aaba aabb aabc abaa abab abac abba abbb abbc abca abcb abcc abcd
これは、指定された長さのすべての有効な韻律スキームを生成する短いCJamスクリプトです(ただし、10を超えて試さないでください。
N
かなり些細なことではないことがわかり、それを見つけるにはあまりにも愚かだったのであれば、(よくゴルフされた)多項式時間の解決策(に)に賞金をかけるかもしれません。