Moore Neighbourhood Moore Neighbourhood
Simple
RU JA French EN

"Animals and plants can reproduce themselves, but it was only recently shown that machines can be made which also reproduce themselves……. Other kinds of self-reproducing machines will be described, and one simple mechanical model, with no electrical or magnetic complications, will be there in working order for the audience to inspect and operate."

-- Edward Forrest Moore

"Les animaux et les plantes peuvent se reproduire, mais il n'a été prouvé que récemment que l'on peut concevoir des machines qui se reproduisent également……. D'autres sortes de machines qui s'auto-reproduisent seront décrites, et un modèle mécanique simple, sans sophistication électrique ou magnétique, sera présent ici en état de marche, pour que le public puisse l'observer et le manipuler."

-- Edward Forrest Moore

Dans un automate cellulaire sur... d'une cellule est constitué des huit cellules qui entourent cette cellule centrale. Ce voisinage porte le nom de Edward F. Moore, pionnier de la théorie des automates cellulaires. De nombreux jeux de plateau se jouent sur une grille rectangulaire composée de cellules carrées. Dans certains jeux, il est important de connaître la disposition des cellules voisines du pion afin de savoir comment le déplacer et d'élaborer une stratégie.

L'état du plateau rectangulaire d'un jeu vous est communiqué avec la position des pions, sous la forme d'une matrice où 1 représente un pion et 0 une case vide. Les lignes et les colonnes du plateau sont numérotées à partir de 0. Les coordonnées d'une cellule (numéro de ligne, numéro de colonne) vous sont également données. Il vous faut déterminer combien de pions sont près de cette cellule. Chaque cellule interagit avec ses huit cellules voisines : celles qui lui sont adjacentes horizontalement, verticalement, ou en diagonale.

example

Sur les exemples ci-contre (voir le shéma) on considère la même grille:

((1, 0, 0, 1, 0),
 (0, 1, 0, 0, 0),
 (0, 0, 1, 0, 1),
 (1, 0, 0, 0, 0),
 (0, 0, 1, 0, 0),)

Pour le premier exemple, les coordonnées de la case considérée sont (1, 2), et comme indiqué sur le schéma, cette case a trois pions dans les cases voisines. Pour le second exemple, les coordonnées sont (0, 0) et cette case contient un pion, mais on ne compte qu'un pion dans les cases voisines ; la réponse est ici 1.

Trois arguments. Une grille comme tuple de tuples d'entiers (1 ou 0), un numéro de ligne (int) et un numéro de colonne (int) pour les coordonnées de la case considérée.

Le nombre de cases voisines de cette case qui contiennent un pion (int).

count_neighbours(((1, 0, 0, 1, 0),
                  (0, 1, 0, 0, 0),
                  (0, 0, 1, 0, 1),
                  (1, 0, 0, 0, 0),
                  (0, 0, 1, 0, 0),), 1, 2) == 3
count_neighbours(((1, 0, 0, 1, 0),
                  (0, 1, 0, 0, 0),
                  (0, 0, 1, 0, 1),
                  (1, 0, 0, 0, 0),
                  (0, 0, 1, 0, 0),), 0, 0) == 1

Comme nous le mentionnons en introduction, cette idée est utile lors de développement d'algorithmes pour les jeux de plateau. De plus, les même principes peuvent être appliqués pour des logiciels de navigation, d'exploration géographique, ...


3 ≤ len(grid) ≤ 10
all(len(grid[0]) == len(row) for row in grid)

You should be an authorized user in order to see the full description and start solving this mission.