Le jeu de la vie de Conway en programmation par ensemble de réponse
*
Le jeu de la vie de Conway est un automate cellulaire bien connu. Les règles du jeu de la vie sont les suivantes: on dispose d’une grille à deux dimensions dont les cases, appelées cellules, sont soit mortes soit vivantes. À chaque itération, la grille est mise à jour de la façon suivante, en regardant l’état des 8 cellules du voisinage de chaque cellule de la grille:
- Une cellule morte possédant exactement trois cellules voisines vivantes devient vivante
- Une cellule vivante ne possédant pas exactement deux ou trois cellules vivantes meurt
L’objectif de ce petit billet de blog, est d’encoder ces règles en programmation par ensemble de réponses.
…ob-exec
I created a generic Org-babel mode, named ob-exec. This emacs-lisp script enable to execute any executable on a code fragment within Org-mode.
How it works
ob-exec simply execute the code sample with the provided command-line
For example, suppose you want to use the command line glpsol of the GNU Linear Programming Kit on a Linear program encoded in MathProg. To the best of my knowledge, there is no org-babel mode for GLPK.
It wouln’t be too difficult to build one, but suppose further that you feel lazy and want to execute GLPK solver directly.
Then, you can insert the following source code in emacs:
Phénologie des observations d'hirondelle rustique en France
Un peu de contexte
Avec le changement climatique, les plantes profittent des douceurs de début de printemps, les fleurs sont plus précoces, les populations d’insectes sont plus précoces; et certaines espèces d’oiseaux ont semble t’il déjà commencé à modifier leur habitudes migratoires et arrivent plus tôt sous nos latitudes. <citation needed>
Nous allons tenter dans ce billet de blog, d’explorer les données d’observation de l’avifaune de Faune-France pour tenter d’en extraire des tendances pour quelques espèces communes.
…Tent Game in Answer Set Programming
The Tent game is a logic puzzle on a square or rectangular grid. Each grid cell can have a tree, a tent or stay empty. <Nourry (2024)>
The following rules must be respected:
- Tent can be placed on empty cells.
- Each tent is attached to a tree placed on an adjacent cell.
- A tree cannot be attached to more than one tent.
- Two tents cannot be placed on adjacent, nor diagonal cells.
- The number of tents on each row and column is specified.
- Some cells are not accessible, no tent can be pitched there. <“Fiche: Jeux de Réflexion - Tentes” (n.d.);Nourry (2024)>
The aim of this article is to propose a implementation of the Tent game in Answer Set Programming.
…Carrés latins en Answer Set Programming
Un carré latin est un tableau dans lequel chaque ligne et chaque colonne contient le même ensemble de symboles. L’objectif de ce billet est de proposer un ensemble de règles Answer Set Programming pour générer les carrés latins en utilisant la programmation par contrainte.
Les règles du carré latin
alphabet(a;b;c;d;e;f;g;h;i;j;k;l;m;n;o;p;q;r;s;t;u;v;w;x;y;z).
% Chaque cellule a un symbole issu de l'alphabet.
1 { cell(R, C, S): alphabet(S) } 1 :- R = 1..side , C = 1..side.
% Une cellule ne peut contenir qu'une seule valeur
S1 = S2 :- cell(R, C, S1) , cell(R, C, S2).
% Une ligne ne peut contenir plusieurs fois la même valeur
S1 != S2 :- cell(R, C1, S1) , cell(R, C2, S2) , C1 != C2.
% Idem pour les colonnes.
S1 != S2 :- cell(R1, C, S1) , cell(R2, C, S2) , R1 != R2.
% On vérifie que chaque ensemble de symboles
% pour chaque ligne et chaque colonne est le même que la référence
symbol(S) :- cell(1, C, S) , C = 1..side.
:- - symbol(S) , cell(_, _, S).
:- symbol(S) , - cell(R, _, S) , R = 1..side.
:- symbol(S) , - cell(_, C, S) , C = 1..side.
Application avec trois exemples
Les exemples qui suivent sont issus des « Selected Papers on Fun and Games » de Donald E. Knuth, chapitre 36 Quadrata Obscura. Je me suis permis d’ajouter les cellules de la ligne du bas dans l’entrée des problèmes, correspondants aux mots anglais choisis par Knuth; ce qui a pour effet de limiter à un seul le nombre de carrés latins générés par Clingo pour chaque entrées, grâce aux choix judicieux des cellules indiquées dans l’entrée du problème. Une autre approche aurait pu être d’ajouter une contrainte sur les cellules de la ligne du bas pour qu’elle corresponde à un mot d’une liste donnée…
…