지루하면 재미있는 게임이 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
종종 게임에는 목표가 없습니다. 머릿속에서 산술을함으로써 시간을 입찰하는 것입니다. 그러나이 게임을하는 것을 즐거워 할 때 나의 목표는 항상 마침표를 고르고 특정 마침표가 반복되는 게임을 구성하는 것입니다.
모든 게임이주기적인 것은 아니며, 위의 예제는 예를 들어 모든 0이있는 게임에 도달하여 게임을 시작 위치로 되돌릴 수 없기 때문에 주기적이 아닙니다. 실제로 대다수의 게임은 희귀 한 보석 인 몇 가지 게임을 주기적으로 제작하지 않는 것 같습니다.
특정 기간 동안 반복되는 게임이 주어지면 시퀀스를 두 배로 늘림으로써 동일한 기간으로 반복되는 다른 게임을 만드는 것은 사소한 일입니다. 예를 들어 게임 :
1 0 1
게임과 정확히 동일하게 재생됩니다.
1 0 1 1 0 1
실제로, 우리는 둘 다 실제로 무한 반복되는 게임이라고 생각할 수 있습니다.
... 1 0 1 ...
우리는이 도전을 위해 하나의 게임을 고려할 것입니다.
비슷한 방식으로 전체 시퀀스에 상수를 곱하면 기간도 사소하게 유지되므로 상수 요인에 따라 다른 두 게임을 같은 게임으로 계산합니다.
무한한 문자열 ... 1 0 1 ...
이며 ... 0 1 1 ...
분명히 한 문자만큼 이동 된 동일한 문자열입니다. 우리는 이것들을 다른 게임으로 계산하지는 않지만, 한 게임이 다른 게임에 도달하면 게임 기간을 결정할 때 사이클의 끝으로 간주되지 않습니다. 예를 들면 다음과 같습니다.
두 게임
... 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 요소만큼 위치가 이동했을 것입니다. 그러나 우리는 차세대가 절반 요소 오프셋으로 생산되는 것을 고려하지 않으므로 하나는 4 요소 시프트로 반올림하고 다른 하나는 3 요소 시프트로 반올림하여주기를 제공합니다. 5 개 중
이러한 이유로 우리는 사이클이 어떤 의미에서 동형 일지라도 비대칭 스트링과 그것의 반사는 뚜렷한 것으로 간주한다. 물론, 동일한 사이클의 일부를 구성하면 하나의 사이클로 만 계산됩니다.
이러한 제한 사항을 통해 약간의 수학을 통해 주어진 유한 기간에 한정된 수의 Diffy주기가 있음을 알 수 있습니다. 또한 유한 기간을 갖는 모든 무한 문자열은 유한 문자열의 무한 반복입니다.
문자열은 마침표보다 크거나 짧을 수 있습니다. 예를 들어, 기간 15의 길이 5의 문자열과 기간 5의 길이 15의 문자열이 있습니다. 기간 19의 모든 문자열 길이는 9709입니다.
태스크
n
표준 입력 방법을 통해 n이 1보다 큰 숫자가 주어지면 정확히주기가 다른 고유 한 Diffy주기의 수를 결정합니다 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 게임에는 0과 단일 상수 만 포함됩니다. 즉, 모든 정기 게임은 0과 1로만 구성된 일부 diffy 게임과 동형이됩니다.
010001->111001->000101->100111->010100->011110->010001
와 110110->101101->011011->110110
별개?