Recamánのシーケンスは次のように定義されます。
または擬似コードで:
a(0) = 0,
if (a(n - 1) - n) > 0 and it is not
already included in the sequence,
a(n) = a(n - 1) - n
else
a(n) = a(n - 1) + n.
最初の番号は(OEIS A005132)です。
0, 1, 3, 6, 2, 7, 13, 20, 12, 21, 11, 22, 10, 23, 9, 24, 8, 25, 43, 62, 42, 63, 41, 18, 42
このシーケンスを調べると、たとえば重複a(20) = a(24) = 42
(0インデックス)があることに気付くでしょう。シーケンスの前に同じ番号が少なくとも1つある場合、その番号を重複と呼びます。
チャレンジ:
整数入力kを取得し、Recamánのシーケンスで重複として検出された順番で最初のk個の重複する番号、またはk番目の番号のみを出力します。
この最初に重複した番号は次のとおりです。
42, 43, 78, 79, 153, 154, 155, 156, 157, 152, 265, 261, 262, 135, 136, 269, 453, 454, 257, 258, 259, 260, 261, 262
注意すべき点がいくつかあります。
- a(n)は、a(n + m)== a(n)であっても、a(0)... a(n-1)に同じ数がない場合、重複としてカウントされません。
- 42は43の前になります。43の複製の前にその複製が発生するためです。
- シーケンスはソートされていません
- このシーケンスにも要素が重複しています。たとえば、12番目と23番目の数値は両方とも262(0から始まる)です。
テストケース(0インデックス付き)
k Output
0 42
9 152
12 262
23 262
944 5197
945 10023
10000 62114
これはcode-golfなので、各言語で最も短いコードが優先されます!
説明が奨励されています!
2
関連
—
ngm
なぜ
—
ルイスメンドー
43
以前に出力されないの42
ですか?Recamánのシーケンスの最初に表示されます。最初に重複と判明したものを最初に出力するということですか?
また、最近人気のmath.SE質問を見ました:P
—
orlp
@orlp?リンクできますか?私は...それを見ていない
—
Stewieグリフィン