Fourmi de Langton

La fourmi de Langton est un automate cellulaire conçu par Christopher Langton pour étudier la simulation de systèmes vivants.
Les règles de l'automate sont très simples :
Les cases d'une grille plane peuvent être noires ou blanches. Au départ elles sont toutes de la même couleur.
La fourmi occupe au départ une case arbitraire et elle peut se déplacer à gauche, à droite, en haut ou en bas d'une case à chaque fois selon les règles suivantes :
Si la fourmi occupe une case noire, elle tourne de 90° vers la gauche, inverse la couleur de la case en blanc et avance d'une case.
Si la fourmi occupe une case blanche, elle tourne de 90° vers la droite, inverse la couleur de la case en noir et avance d'une case.

Comportement de l'automate
Pendant les 500 premiers mouvements l'aspect de la grille est pratiquement symétrique (symétrie d'ordre 4). Puis le comportement devient chaotique : on ne distingue aucune structure stable ni aucune symétrie mais vers 10000 mouvements apparaît un motif qui se réplique tous les 104 mouvements. La réplication de ce motif forme une structure rectiligne orienté selon une diagonale de la grille et qui se poursuit à l'infini sur une grille non bornée.
Cette structure est nommée "autoroute".
A ce jour personne ne peut expliquer le comportement de cet automate qui est toujours étudié. La modification des règles de coloration ne change pas l'apparition de l'autoroute.

Utilisation

Le bouton [RaZ] permet de réinitialiser la grille et la fourmi.
Le bouton [Départ]-[Stop] permet de lancer l'animation ou de faire une pause.
Le slider permet de modifier la vitesse de l'animation.
La liste de choix permet de choisir la taille de la grille.

Utiliser les grilles de petites dimensions et une vitesse faible pour examiner le fonctionnement de la fourmi et la période de marche symétrique. Le corps de la fourmi est schématisée par un trait et sa tête par un cercle. Pour les grilles de grande taille seule la tête est représentée.
Pour visualiser l'autoroute, il faut utiliser la grille 71x71.
Dans tous les cas le programme s'arrête à cause d'un débordement de tableau. Je n'ai pas mis de tests pour l'empêcher afin de ne pas ralentir l'exécution du programme.