あなたが退屈している場合にプレイする楽しいゲームは、Diffy Gameです。それは非常にシンプルで、多くの時間を消費できるワンプレイヤーゲームです。
Diffyゲームは次のように機能します。まず、負でない整数のリストから始めます。この例では、
3 4 5 8
次に、隣接する番号の絶対差を取ります
(8) 3 4 5 8
5 1 1 3
その後、繰り返します。ループに入ったことに気付くまで繰り返します。そして、一般的にゲームは最初から再び始まります。
3 4 5 8
5 1 1 3
2 4 0 2
0 2 4 2
2 2 2 2
0 0 0 0
0 0 0 0
多くの場合、ゲームには目標がなく、頭の中で算術を行うことで時間を割いています。しかし、このゲームをプレイする喜びがあるとき、私の目標は常にある期間を選択して、その特定の期間でループするゲームを構築することです。
すべてのゲームが定期的であるわけではありません。たとえば、上の例は最終的にすべてゼロのゲームに到達し、開始位置に戻せないため、定期的ではありません。実際、ほとんどのゲームは、まれな宝石であるいくつかのゲームを定期的に作っているわけではないようです。
特定の期間でループするゲームを考えると、シーケンスを2倍にするだけで同じ期間でループする別のゲームを作成するのは簡単です。たとえば、ゲーム:
1 0 1
ゲームとまったく同じようにプレイします。
1 0 1 1 0 1
実際、両方が実際に無限に繰り返されるゲームであると考えることができます。
... 1 0 1 ...
この課題のために、それらを1つのゲームと見なします。
同様に、シーケンス全体に定数を乗算すると、期間が自明に保存されるため、一定の要因で異なる2つのゲームを同じゲームであると再度カウントします。
無限文字列... 1 0 1 ...
と... 0 1 1 ...
は、明らかに1文字シフトされた同じ文字列です。これらを異なるゲームとしてカウントしませんが、一方が他方に到達しても、ゲームの期間を決定する際にサイクルの終わりとはみなされません。例えば:
2つのゲーム
... 0 0 0 1 0 1 ... = A
... 0 0 1 1 1 1 ... = B
... 0 1 0 0 0 1 ... = A << 4
... 1 1 0 0 1 1 ... = B << 4
... 0 1 0 1 0 0 ... = A << 2
... 1 1 1 1 0 0 ... = B << 2
そして
... 0 0 1 0 1 0 ... = A << 1
... 0 1 1 1 1 0 ... = B << 1
... 1 0 0 0 1 0 ... = A << 5
... 1 0 0 1 1 1 ... = B << 5
... 1 0 1 0 0 0 ... = A << 3
... 1 1 1 0 0 1 ... = B << 3
期間6と両方のゲームは、彼らは、ループ内の任意の時点でお互いに何の用語を共有していない(とは違っている... 1 1 0 ...
と... 1 0 1 ...
どれが相互に到達)が、彼らはお互いのバージョンをシフトしているので、彼らは時にカウント同じゲームと考えられています。
無限の文字列を反映(または反転)すると、基本的に同じ動作が得られますが、必ずしも同じ期間が得られるとは限りません。たとえば、
... 0 0 0 1 0 0 1 1 0 1 0 1 1 1 1 ...
そしてその反映
... 1 1 1 1 0 1 0 1 1 0 0 1 0 0 0 ...
キャラクターの中間地点で次世代を生産すると考えた場合:
... 0 0 0 1 0 0 1 1 0 1 0 1 1 1 1 ...
... 0 0 1 1 0 1 0 1 1 1 1 0 0 0 1 ...
... 1 1 1 1 0 1 0 1 1 0 0 1 0 0 0 ...
... 0 0 0 1 1 1 1 0 1 0 1 1 0 0 1 ...
その場合、両方とも3.5の要素だけ位置がシフトします。ただし、次の世代はその半要素オフセットで生成されるとは考えないため、1つは4要素シフトに切り上げられ、期間は15になり、もう1つは3要素シフトに切り下げられて期間が与えられます5。
このため、サイクルが何らかの意味で同型であっても、非対称ストリングとその反射は明確であると考えます。もちろん、それらが同じサイクルの一部を形成する場合、それは1サイクルとしてのみカウントされます。
これらの制限により、実際には、任意の有限期間で有限数のDiffyサイクルが存在することを少し数学的に示すことができます。さらに、有限の周期を持つ無限ストリングはすべて、有限ストリングの無限の繰り返しです。
文字列は、ピリオドより大きくても短くてもかまいません。たとえば、期間15の長さ5のストリングと期間5の長さ15のストリングがあります。期間19のストリングはすべて長さが9709です。
仕事
数所与のn
正確の期間と異なるDiffyサイクルの数を決定する標準的な入力方法を介して1より大きくなるようNことn
。
(文献で0
は、定期的なDiffyゲームとは見なされないことが多いようです。これは灰色の領域なので、解決を求めません。n = 1
)
これはcode-golfなので、目標はソースコードのバイト数を最小限にすることです。
テストケース
2 -> 0
3 -> 1
4 -> 0
5 -> 1
6 -> 1
7 -> 3
8 -> 0
9 -> 4
10 -> 4
11 -> 3
12 -> 5
13 -> 5
14 -> 24
15 -> 77
16 -> 0
17 -> 259
18 -> 259
19 -> 27
20 -> 272
21 -> 811
22 -> 768
23 -> 91
24 -> 340
25 -> 656
ヒント
すべての定期的なdiffyゲームには、ゼロと1つの定数のみが含まれます。つまり、すべての定期的なゲームは、0と1のみで構成されるいくつかのdiffyゲームと同形になります。
010001->111001->000101->100111->010100->011110->010001
と110110->101101->011011->110110
明確な?