Simulateur d'automates cellulaires (règles de Wolfram) en Haskell, générant et affichant l'évolution d'un automate 1D.
Telecharger & tester
make && ./wolfram -r regle -n iterations (generateur d'automates cellulaires 1D de Wolfram)
Wolfram est un projet Epitech (Tek4, module B-FUN-400) qui consiste a implementer en Haskell un automate cellulaire elementaire au sens de Stephen Wolfram, affiche directement dans le terminal. Le projet impose seulement les regles 30, 90 et 110 comme obligatoires (le support des 256 regles possibles etant un bonus), et l'espace de l'automate est considere comme infini a gauche, a droite et vers le bas : les parties non affichees a l'ecran continuent neanmoins d'influencer les generations futures, ce qui interdit une implementation naive limitee a la fenetre visible.
Le programme gere lui-meme le parsing des arguments de la ligne de commande (getopt est interdit) et accepte cinq options : --rule (obligatoire, numero de la regle), --start (generation de depart, 0 par defaut), --lines (nombre de lignes a afficher, illimite si omis), --window (largeur de la fenetre affichee en cellules, 80 par defaut, avec une regle precise de centrage quand la largeur est paire) et --move (translation horizontale de la fenetre, negative pour un decalage a gauche, positive pour un decalage a droite). Toute option manquante ou invalide doit produire un message d'usage et un code de retour 84.
Le sujet insiste sur la dimension pedagogique du projet, oriente vers la redecouverte des idiomes fonctionnels de Haskell : filtrage par motif (pattern matching), gardes, application partielle et curryfication, fonctions d'ordre superieur et fermetures, ainsi que la separation stricte entre code pur et code a effets de bord (I/O), autant de notions issues du seminaire sur les paradigmes de programmation attendues dans l'implementation.
Comme pour les autres projets Haskell du cursus, la construction passe par Stack (version 2.1.3 minimum) avec le variant hpack et un resolver fige sur la serie LTS 18.10, sans extra-dependencies, et avec base comme unique dependance autorisee dans les sections lib et executable. Les bonus proposent, au-dela des 256 regles completes, l'ajout d'un argument --generation permettant de lire une premiere generation directement depuis l'entree standard, ainsi que la generation d'images bitmap ou un affichage graphique en temps reel de l'automate.
Projet suivant
