Écrivez un programme ou une fonction qui accepte un entier positif impair N et une chaîne de chiffres décimaux ( 0123456789
). La chaîne représente un automate cellulaire unidimensionnel à dix états . Chaque chiffre occupe une cellule et la règle de mise à jour d'une génération à la suivante est que chaque cellule devient le chiffre résultant de la somme des N cellules centrées sur la cellule, modulo 10.
La première et la dernière cellule s'enroulent comme si elles étaient voisines, de sorte que les cellules peuvent toujours avoir N cellules centrées sur elles. Notez que N peut être plus grand que la longueur de la chaîne, ce qui signifie qu'il peut s'articuler plusieurs fois et que certains chiffres seront donc plusieurs fois dans la somme.
Par exemple, si N est 7 et la chaîne est 038
, pour visualiser les cellules à sommer, nous pouvons écrire en 038
répétant infiniment dans les deux directions
...038038038038038...
alors le chiffre dans lequel le 0
va changer est la somme des 7 chiffres centrés autour de tout 0
, modulo 10:
...038038038038038...
^_____^
|
sum all these
C'est (0+3+8+0+3+8+0)%10
, ce qui est 2
.
De la même manière, les chiffres 3
et et se 8
transforment en sont définis respectivement par (3+8+0+3+8+0+3)%10
= 5
et (8+0+3+8+0+3+8)%10
= 0
.
Ainsi, la génération suivante 038
est 250
lorsque N est 7.
Votre programme ou fonction doit imprimer ou renvoyer la chaîne de chiffres de la toute prochaine génération de la chaîne de chiffres d'entrée. c'est-à-dire appliquer la règle de mise à jour une fois à chaque cellule et donner la sortie. Le code le plus court en octets gagne.
Cas de test
[digit string] -> [N = 1], [N = 3], [N = 5], [N = 7], [N = 9], [N = 43]
0 -> 0, 0, 0, 0, 0, 0
1 -> 1, 3, 5, 7, 9, 3
2 -> 2, 6, 0, 4, 8, 6
3 -> 3, 9, 5, 1, 7, 9
4 -> 4, 2, 0, 8, 6, 2
5 -> 5, 5, 5, 5, 5, 5
6 -> 6, 8, 0, 2, 4, 8
7 -> 7, 1, 5, 9, 3, 1
8 -> 8, 4, 0, 6, 2, 4
9 -> 9, 7, 5, 3, 1, 7
00 -> 00, 00, 00, 00, 00, 00
07 -> 07, 47, 41, 81, 85, 47
10 -> 10, 12, 32, 34, 54, 12
11 -> 11, 33, 55, 77, 99, 33
12 -> 12, 54, 78, 10, 34, 54
34 -> 34, 10, 78, 54, 12, 10
66 -> 66, 88, 00, 22, 44, 88
80 -> 80, 86, 46, 42, 02, 86
038 -> 038, 111, 294, 250, 333, 472
101 -> 101, 222, 343, 545, 666, 989
987 -> 987, 444, 901, 765, 222, 543
1234 -> 1234, 7698, 3412, 9876, 1234, 7698
26697 -> 26697, 54128, 00000, 56982, 84413, 54128
001002 -> 001002, 211122, 331332, 335334, 455544, 113112
129577020 -> 129577020, 326194923, 474081605, 961120291, 333333333, 183342413
6023845292173530 -> 6023845292173530, 6853571632015189, 1197228291289874, 9238433109901549, 0110956118726779, 1982123699138828