introduction
La méthode du carré central est utilisée pour la génération de nombres pseudo-aléatoires. Cependant, ce n'est pas une bonne méthode dans la pratique, car sa période est généralement très courte et présente de graves faiblesses. Comment cela marche-t-il? Prenons un exemple:
Pour la graine, nous choisissons 123456
:
Seed 123456
La graine au carré (graine × graine), est égale à:
Seed² 15241383936
Nous avons commencé avec un numéro à 6 chiffres . Cela signifie que la graine au carré doit fournir un nombre à 12 chiffres . Si ce n'est pas le cas, des zéros de tête sont ajoutés pour compenser:
Seed² 015241383936
Nous prenons ensuite la partie médiane du nombre, de la même taille que la graine:
Seed² 015241383936
^^^^^^
Voici donc notre nouvelle semence : 241383
. Nous répétons le même processus que celui indiqué ci-dessus. Nous obtenons ce qui suit:
0: 123456
015241383936
| |
1: 241383
058265752689
| |
2: 265752
070624125504
| |
3: 624125
389532015625
| |
4: 532015
283039960225
| |
5: 039960
001596801600
| |
6: 596801
Et cela continue dans un certain temps ... Maintenant que nous savons ce qu'est la méthode du carré central, relevons le défi:
La tâche
Chaque graine a une période . La période d'une graine à n chiffres ne peut pas dépasser 8 n . Par exemple, la graine 82
. Cela donnerait la séquence suivante:
82 > 72 > 18 > 32 > 02 > 00 > 00 > 00 > 00 > 00
|____|____|____|____|____|____|____|____|____|___...
0 1 2 3 4 5 6 7 8 9
Vous pouvez voir que la période est égale à 5 , avant de contenir à nouveau le même chiffre. Votre tâche consiste, si une graine supérieure à 0 ne contient pas de zéros non significatifs, à sortir la période de la graine . Donc, dans ce cas, vous devez sortir 5
.
Un autre exemple est:, 24
qui donne ce qui suit:
24 > 57 > 24
|____|____|___...
0 1 2
Comme vous pouvez le voir, toutes les séquences ne se terminent pas 0
. Ce cycle a une période de 1 .
Cas de test
Input > Output
24 > 1
82 > 5
123456 > 146
8989 > 68
789987 > 226
Les bacs à pâte avec les séquences pour 123456 , 8989 , 789987
C'est du code-golf , donc la soumission avec le moins d'octets gagne!
Vous pouvez supposer que l'entrée n'aura jamais un nombre impair de chiffres.
24
est périodique (avec la période 2, je dirais),82
est finalement périodique (avec la période 1).