バックグラウンド
フラクタルシーケンスは、あなたがすべての整数の最初の発生を削除し、前と同じ配列で終わることができ整数シーケンスです。
このような非常に単純なシーケンスは、キンバリングの言い換えと呼ばれます。正の自然数から始めます。
1, 2, 3, 4, 5, 6, 7, 8, 9, ...
次に、いくつかの空白をリフルします。
1, _, 2, _, 3, _, 4, _, 5, _, 6, _, 7, _, 8, _, 9, ...
そして、空白自体にシーケンス自体(空白を含む)を繰り返し入力します。
1, 1, 2, _, 3, 2, 4, _, 5, 3, 6, _, 7, 4, 8, _, 9, ...
1, 1, 2, 1, 3, 2, 4, _, 5, 3, 6, 2, 7, 4, 8, _, 9, ...
1, 1, 2, 1, 3, 2, 4, 1, 5, 3, 6, 2, 7, 4, 8, _, 9, ...
1, 1, 2, 1, 3, 2, 4, 1, 5, 3, 6, 2, 7, 4, 8, 1, 9, ...
これがフラクタルシーケンスです!次に、部分的な合計を見てみましょう。
1, 2, 4, 5, 8, 10, 14, 15, 20, 23, 29, 31, 38, 42, 50, 51, 60, ...
しかし、このプロセスを繰り返すとどうなりますか?新しいシーケンスをフラクタル化します(つまり、上記の手順で取得した部分和)。
1, _, 2, _, 4, _, 5, _, 8, _, 10, _, 14, _, 15, _, 20, _, 23, ...
1, 1, 2, _, 4, 2, 5, _, 8, 4, 10, _, 14, 5, 15, _, 20, 8, 23, ...
1, 1, 2, 1, 4, 2, 5, _, 8, 4, 10, 2, 14, 5, 15, _, 20, 8, 23, ...
1, 1, 2, 1, 4, 2, 5, 1, 8, 4, 10, 2, 14, 5, 15, _, 20, 8, 23, ...
1, 1, 2, 1, 4, 2, 5, 1, 8, 4, 10, 2, 14, 5, 15, 1, 20, 8, 23, ...
そして、部分和をもう一度取ります。
1, 2, 4, 5, 9, 11, 16, 17, 25, 29, 39, 41, 55, 60, 75, 76, 96, ...
すすぎ、繰り返します。このプロセスは収束することがわかりました。このプロセスを繰り返すたびに、シーケンスの大きなプレフィックスが固定されたままになります。無限の反復の後、OEIS A085765になります。
面白い事実:元のシーケンスがで始まる限り、自然数から始めなくても、このプロセスは同じシーケンスに収束し1
ます。元のシーケンスがother x
で始まる場合、x*A085765
代わりに取得します。
チャレンジ
正の整数を指定すると、収束シーケンスのth番目の要素をN
出力しN
ます。
プログラムまたは関数を作成し、STDIN(または最も近い代替)、コマンドライン引数または関数引数を介して入力を取得し、STDOUT(または最も近い代替)、関数の戻り値または関数(out)パラメーターを介して結果を出力できます。
インデックスN
が0ベースか1ベースかを選択できます。
テストケース
シーケンスは次で始まります:
1, 2, 4, 5, 9, 11, 16, 17, 26, 30, 41, 43, 59, 64, 81, 82, 108, 117, 147, 151, 192, 203, 246, 248, 307, 323, 387, 392, 473, 490, 572, 573, 681, 707, 824, 833, 980, 1010, 1161, 1165, 1357, 1398, 1601, 1612, 1858, 1901, 2149, 2151, 2458, 2517
したがって、入力5
はoutputになります9
。
これは、最初のN
数値(N
STDINで指定)を生成する単純なCJamリファレンス実装です。コードはN
、プレフィックス全体ではなく、th要素のみを返すことに注意してください。
N
th項を出力していますか?