Un jeu amusant à jouer si vous vous ennuyez est le jeu Diffy . C'est un jeu à un joueur qui est assez simple et peut consommer une bonne partie de votre temps.
Le jeu Diffy fonctionne comme suit: Vous commencez avec une liste d'entiers non négatifs, dans cet exemple, nous utiliserons
3 4 5 8
Ensuite, vous prenez la différence absolue entre les nombres adjacents
(8) 3 4 5 8
5 1 1 3
Ensuite, vous répétez. Vous répétez jusqu'à ce que vous réalisiez que vous êtes entré dans une boucle. Et puis généralement le jeu recommence depuis le début.
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
Souvent, le jeu n'a pas de but, vous ne faites que gagner du temps en faisant de l'arithmétique dans votre tête. Cependant, quand j'ai le plaisir de jouer à ce jeu, mon objectif est toujours d'essayer de choisir une période et d'essayer de construire un jeu qui boucle avec cette période particulière.
Tous les jeux ne sont pas périodiques, l'exemple ci-dessus n'est pas périodique par exemple car il atteint finalement un jeu avec tous les zéros et ne peut donc jamais revenir à sa position de départ. En fait, il semble que la grande majorité des jeux ne soient pas périodiques, ce qui fait des quelques jeux qui sont un joyau rare.
Étant donné un jeu qui boucle avec une période particulière, il est trivial de créer un autre jeu qui boucle avec la même période en doublant simplement la séquence. Par exemple le jeu:
1 0 1
Joue exactement la même chose que le jeu:
1 0 1 1 0 1
En fait, nous pouvons considérer que les deux sont vraiment le jeu à répétition infinie:
... 1 0 1 ...
Nous les considérerons comme un jeu pour relever ce défi.
De la même manière, multiplier la séquence entière par une constante préservera également la période de manière triviale, nous allons donc une fois de plus compter deux jeux qui diffèrent par un facteur constant pour être le même jeu.
Les chaînes infinies ... 1 0 1 ...
et ... 0 1 1 ...
sont évidemment la même chaîne décalée d'un caractère. Nous ne les compterons pas comme des jeux différents, mais lorsque l'un atteint l'autre, il ne sera pas considéré comme la fin du cycle lors de la détermination de la période d'un jeu. Par exemple:
Les deux jeux
... 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
et
... 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
sont tous les deux des jeux avec la période 6. Ils ne partagent aucun terme les uns avec les autres à aucun moment de leurs boucles (contrairement ... 1 1 0 ...
et ... 1 0 1 ...
qui se rejoignent) mais parce qu'ils sont des versions décalées les uns des autres, ils sont considérés comme le même jeu lors du comptage.
La réflexion (ou l'inversion) d'une chaîne infinie donne essentiellement le même comportement, mais ne donne pas nécessairement la même période. Considérez, par exemple,
... 0 0 0 1 0 0 1 1 0 1 0 1 1 1 1 ...
et son reflet
... 1 1 1 1 0 1 0 1 1 0 0 1 0 0 0 ...
Si l'on considérait que la prochaine génération serait produite à mi-chemin entre les personnages:
... 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 ...
alors les deux auraient décalé la position de 3,5 éléments. Cependant, nous ne considérons pas que la prochaine génération soit produite avec ce décalage d'un demi-élément, donc l'un arrondit à un décalage à 4 éléments donnant une période de 15, et l'autre arrondit à un décalage à 3 éléments donnant une période de 5.
Pour cette raison, nous considérons une chaîne asymétrique et sa réflexion comme distinctes, même si les cycles sont en quelque sorte isomorphes. Bien sûr, s'ils font partie du même cycle, cela ne compte que pour un cycle.
Avec ces restrictions, un peu de mathématiques peuvent montrer qu'il existe en fait un nombre fini de cycles Diffy avec une période finie donnée. De plus, chaque chaîne infinie avec une période finie est une répétition infinie d'une chaîne finie.
Notez que les chaînes peuvent être plus grandes ou plus courtes que les périodes. Par exemple, il existe une chaîne de longueur 5 avec période 15 et une chaîne de longueur 15 avec période 5. Toutes les chaînes avec période 19 sont de longueur 9709.
Tâche
Étant donné un nombre n
tel que n est supérieur à 1 via des méthodes d'entrée standard, déterminez le nombre de cycles Diffy distincts avec une période d'exactement n
.
(Il semble que, dans la littérature, il 0
n'est souvent pas considéré comme un jeu Diffy périodique. Comme il s'agit d'une zone grise, je ne vous demanderai pas de la résoudre n = 1
)
C'est du code-golf , donc l'objectif est de minimiser le nombre d'octets dans votre code source.
Cas de test
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
Astuces
Tous les jeux périodiques diffy ne contiendront que zéro et une seule constante, cela signifie que chaque jeu périodique sera isomorphe à certains jeux diffy composés uniquement de zéros et de uns.
010001->111001->000101->100111->010100->011110->010001
et 110110->101101->011011->110110
distincts?