Le jeu de calculviar est, comme son nom l'indique, basé sur des œufs de poissons. Chaque race de poisson se reconnaît à
sa couleur, qui est la même que celle de l'œuf dont il provient. Une source de chaleur située sur la gauche fait que l'œuf de gauche est
toujours le premier à éclore. Alors par exemple
La population initiale (liste des œufs) est décrite par une chaîne de caractères appelée axiome (on suppose qu'elle est "vraie" dès le départ). Par exemple si au départ il y avait 3 œufs bleus l'axiome est bbb ce qu'on note
Voici la version graphique, les générations (ou théorèmes) successives étant dessinées l'une en-dessous de l'autre:
Pour récupérer la première lettre de l'axiome
, on fait axiome[0]
; pour récupérer les lettres sauf les deux
premières (modélisation de la destruction des œufs), on fait axiome[2..]
(les deux premières lettres ayant les indices 0 et 1,
on garde tout ce qui est à partir de l'indice 2, soit effectivement toutes les lettres qui restent). Pour ajouter les lettres r
et v à la fin de l'axiome, on fait axiome += "rv"
; pour séparer les différents cas qui se présentent,
on utilise switch ... when
:
On peut modifier ce script pour tester des variantes ou afficher une liste de théorèmes plus grande...
Ci-dessus on simule la suite de Collatz. La conjecture de Syracuse dit que pour tout nombre d'œufs bleus initial, la population finit par fluctuer périodiquement comme on le voit ci-dessus.
Dans ce problème, qui est le premier exemple de tague-système, on a un 3-tague système à deux couleurs (il n'y a que des poissons rouges et bleus). Et les règles de production sont les suivantes:
Par exemple, en testant ci-dessous, on constate qu'avec l'axiome rrrbr on a un nombre fini de théorèmes avant épuisement total de la population:
Pour certains axiomes, ce système de Post s'éteint. Mais pour d'autres il donne lieu à une population qui évolue périodiquement dans le temps. Par exemple avec l'axiome r r r b r b b b r b r r b on a une 6-période visible sur le graphique:
Ne pas hésiter à jouer avec le simulateur CoffeeScript ci-dessus, pour voir quelles périodes sont possibles, et qui sait, peut-être répondre à la question posée en 1921 par Post: Existe-t-il un algorithme permettant, à partir d'un axiome donné, de savoir s'il y a extinction ou périodisme? En effet Post n'a jamais trouvé la réponse...
On peut calculer certaines suites de nombres avec un 1-tague système, c'est-à-dire lorsque l'œuf qui éclot ne casse pas d'œuf dans son voisinage. Et même si les œufs et les poissons sont tous bleus. Voici quelques exemples:
Là il faut deux couleurs (rouge et bleu); les termes de la suite sont les populations où il n'y a que des œufs bleus à l'exception d'un unique œuf rouge au début: Le nombre d'œufs bleus est alors une puissance de 2
Voici le calcul des puissances de 2 par cet algorithme:
Pour les 1-tague systèmes de cette partie, les entiers sont représentés comme cardinaux de l'ensemble des œufs; par exemple le nombre 5 est représenté par la chaîne bbbbb parce qu'il y a 5 fois la lettre b. Le script suivant permet la conversion inverse:
On peut copier-coller le résultat d'un des scripts précédents pour convertir sans avoir à compter les "b"; ou on peut rajouter à l'un des scripts précédents une conversion pour améliorer l'affichage.