バックグラウンド
次のように定義されたシーケンスを検討してください。
- 最初の要素は0です。
- 2番目の要素は4です。
- 3番目の要素以降、その値は次のように計算できます。
- 0からシーケンスの前の要素までの整数のセット(包括的または排他的、重要ではありません)を取得します。
- シーケンスの前の方で既に出現した整数をセットから削除します。
- セットの残りの要素を一緒に追加します。それがあなたが望む値です。
興味深いことに、このシーケンスはまだOEIS上にないようです。
タスク
入力として整数nを取り、シーケンスのn番目の要素を出力するプログラムまたは関数を作成します。
テストケース
シーケンスの最初のいくつかの要素は次のとおりです。
- 0
- 4
- 6(1 + 2 + 3)
- 11(1 + 2 + 3 + 5)
- 45(1 + 2 + 3 + 5 + 7 + 8 + 9 + 10)
- 969(1 + 2 + 3 + 5 + 7…10 + 12…44)
- 468930(1 + 2 + 3 + 5 + 7…10 + 12…44 + 46…968)
明確化
- あなたのプログラムは、無制限に大きな整数を持ち、無制限の量のメモリにアクセスする言語のバリアントで実行される場合、理論的には任意のnを処理できるはずです。(bignumのない言語が468930をはるかに超える可能性は低いですが、答えをハードコーディングすることは言い訳になりません。)
- シーケンスに対して0ベースまたは1ベースのインデックスを選択できます(たとえば、n = 1が最初の要素を返すか、n = 2が2番目の要素を返すか、n = 0が最初の要素を返すかどうかはユーザー次第です)、n = 1、2番目の要素など)。
- 使用するアルゴリズムにもその効率にも要件はありません。シーケンスの定義を(実際には非効率的であっても)直接実装できます。また、同じ結果をもたらす別のアルゴリズムを実装することもできます。
勝利条件
これはcode-golfであるため、バイト単位で測定した最短の正しいプログラムが勝ちます。