{"id":1913,"date":"2026-04-05T19:14:30","date_gmt":"2026-04-05T15:14:30","guid":{"rendered":"https:\/\/iremi.univ-reunion.fr\/?p=1913"},"modified":"2026-04-05T19:26:46","modified_gmt":"2026-04-05T15:26:46","slug":"modelisation-python-du-jeu-de-welter","status":"publish","type":"post","link":"https:\/\/iremi.univ-reunion.fr\/?p=1913","title":{"rendered":"Mod\u00e9lisation Python du jeu de Welter"},"content":{"rendered":"\n<h2 class=\"wp-block-heading\">Le jeu de Welter<\/h2>\n\n\n\n<p>C&rsquo;est dans le cadre de recherches sur les <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Alg%C3%A8bre_de_Kac-Moody\">alg\u00e8bres de Kac-Moody<\/a> en physique th\u00e9orique, que dans les ann\u00e9es 1950, P.C. Welter d&rsquo;une part, Mikio Sato de l&rsquo;autre, ont invent\u00e9 le jeu \u00e9tudi\u00e9 ici. Le jeu se joue sur un plateau similaire \u00e0 celui de <a href=\"https:\/\/iremi.univ-reunion.fr\/?p=689\">Sowing<\/a>, avec des cases align\u00e9es. Des pions ou des jetons sont pos\u00e9s sur le plateau de jeu, de telle mani\u00e8re qu&rsquo;il n&rsquo;y ait jamais plus d&rsquo;un pion par case.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"720\" height=\"135\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welter1-1.jpg\" alt=\"\" class=\"wp-image-1920\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welter1-1.jpg 720w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welter1-1-300x56.jpg 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/figure>\n\n\n\n<p>Un tour de jeu consiste \u00e0 d\u00e9placer un pion <strong>vers la gauche<\/strong>, d&rsquo;au moins une case, et vers une case vide (sinon il y aurait plusieurs pions dans une m\u00eame case, ce qui est interdit par la r\u00e8gle du jeu). Par exemple \u00e0 partir de la situation ci-dessus il y a 8 possibilit\u00e9s dont celle-ci :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"720\" height=\"121\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welter2-1.jpg\" alt=\"\" class=\"wp-image-1921\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welter2-1.jpg 720w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welter2-1-300x50.jpg 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/figure>\n\n\n\n<p>(le pion le plus dextre est parti dans la troisi\u00e8me case)<\/p>\n\n\n\n<p>Le coup ci-dessus est d&rsquo;ailleurs un mauvais coup, parce que l&rsquo;adversaire peut alors jouer \u00e0 son tour le pion le plus dextre et arriver \u00e0 cette situation bloquante :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"720\" height=\"135\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welter3-1.jpg\" alt=\"\" class=\"wp-image-1922\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welter3-1.jpg 720w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welter3-1-300x56.jpg 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/figure>\n\n\n\n<p>En effet, d\u00e8s que tous les pions sont tass\u00e9s \u00e0 gauche comme ci-dessus, le jeu est termin\u00e9, et <em>le premier qui ne peut plus bouger aucun pion a perdu<\/em> le jeu.<\/p>\n\n\n\n<p>Ce jeu est praticable d\u00e8s lors qu&rsquo;on sait<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>distinguer le nombre 1 des nombres sup\u00e9rieurs \u00e0 1 (il est interdit d&rsquo;avoir plus d&rsquo;un pion par case),<\/li>\n\n\n\n<li>distinguer la gauche et la droite (on joue vers la gauche),<\/li>\n<\/ul>\n\n\n\n<p>ce qui vise la fin du CP et les classes suivantes.<\/p>\n\n\n\n<p>Conway consacre \u00e0 ce jeu un chapitre entier (le 13) de son livre <a href=\"https:\/\/fr.wikipedia.org\/wiki\/On_Numbers_and_Games\">On Numbers And Games<\/a> :<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"91\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/Capture-decran-2026-04-04-075820-1024x91.png\" alt=\"\" class=\"wp-image-1923\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/Capture-decran-2026-04-04-075820-1024x91.png 1024w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/Capture-decran-2026-04-04-075820-300x27.png 300w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/Capture-decran-2026-04-04-075820-768x68.png 768w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/Capture-decran-2026-04-04-075820.png 1283w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>La strat\u00e9gie gagnante est en effet bas\u00e9e sur des notions subtiles de th\u00e9orie des groupes et de physique th\u00e9orique, et n&rsquo;est pas tr\u00e8s simple \u00e0 d\u00e9crire. Ceci dit, le cadre du jeu est lui-m\u00eame assez simple avec des jetons sur une bande, comme cette figure de Conway :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"987\" height=\"162\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/Capture-decran-2026-04-04-080007.png\" alt=\"\" class=\"wp-image-1924\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/Capture-decran-2026-04-04-080007.png 987w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/Capture-decran-2026-04-04-080007-300x49.png 300w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/Capture-decran-2026-04-04-080007-768x126.png 768w\" sizes=\"auto, (max-width: 987px) 100vw, 987px\" \/><\/figure>\n\n\n\n<p>(on constate que Conway utilise bien des jetons plats, empilables, mais des pions comme ceux du jeu d&rsquo;\u00e9checs sont \u00e9galement possibles, d&rsquo;autant que ci-dessus il n&rsquo;y en a que 8, en effet il est mat\u00e9riellement difficile de mettre des pions du jeu d&rsquo;\u00e9checs l&rsquo;un au-dessus de l&rsquo;autre)<\/p>\n\n\n\n<p>Le jeu de Welter est <a href=\"https:\/\/iremi.univ-reunion.fr\/?p=586\">impartial<\/a>, donc on peut chercher une strat\u00e9gie gagnante sans utiliser l&rsquo;arsenal th\u00e9orique de Conway : il suffit de tracer le <a href=\"https:\/\/iremi.univ-reunion.fr\/?p=1865\">graphe du jeu<\/a> et de le colorier pour trouver une strat\u00e9gie gagnante. Pour cela, il est int\u00e9ressant de mod\u00e9liser le jeu (et son plateau) en Python.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Codage du plateau<\/h3>\n\n\n\n<p>Le plateau du d\u00e9part :<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"720\" height=\"135\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welter1.jpg\" alt=\"\" class=\"wp-image-1919\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welter1.jpg 720w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welter1-300x56.jpg 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/figure>\n\n\n\n<p>est assez naturellement cod\u00e9 par un tableau de bool\u00e9ens :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#091;True,False,False,True,False,True,True,False]<\/code><\/pre>\n\n\n\n<p>ou (ce qui revient au m\u00eame) par un  tuple d&rsquo;entiers :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>(1,0,0,1,0,1,1,0)<\/code><\/pre>\n\n\n\n<p>ou encore (c&rsquo;est ce qu&rsquo;on ferait en C ou Rust) par un octet <code>10010110<\/code> soit le nombre entier 150) mais aucune de ces repr\u00e9sentations ne permet facilement de coder un tour de jeu. Ceci dit, on constate la pr\u00e9sence<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>d&rsquo;un variant : la somme des indices des cases o\u00f9 il y a un pion (un tour de jeu consiste \u00e0 faire d\u00e9cro\u00eetre l&rsquo;un de ces indices, donc leur somme),<\/li>\n\n\n\n<li>d&rsquo;un invariant : le nombre de pions est toujours \u00e9gal au nombre initial de pions, puisqu&rsquo;on ne retire ni ne rajoute un pion au cours du jeu (comme disait Lavoisier, <a href=\"https:\/\/fr.wikipedia.org\/wiki\/Rien_ne_se_perd,_rien_ne_se_cr%C3%A9e,_tout_se_transforme\">rien ne se perd, rien ne se cr\u00e9e, tout se transforme<\/a>).<\/li>\n<\/ul>\n\n\n\n<p>Or il y a un moyen de coder cet invariant, non dans une variable, mais comme longueur d&rsquo;une collection, celle des abscisses des jetons. Finalement le plateau <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"720\" height=\"135\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welter1.jpg\" alt=\"\" class=\"wp-image-1919\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welter1.jpg 720w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welter1-300x56.jpg 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/figure>\n\n\n\n<p>sera cod\u00e9 par l&rsquo;expression <code>(0,3,5,6)<\/code> donnant (dans l&rsquo;ordre croissant) les abscisses des 4 pions, le pion le plus \u00e0 gauche ayant pour abscisse 0. C&rsquo;est cette mod\u00e9lisation qui sera choisie dans la suite, ne serait-ce que parce que le tuple  <\/p>\n\n\n\n<p><code>(0,3,5,6)<\/code> <\/p>\n\n\n\n<p>occupe 56 octets de m\u00e9moire, alors que la cha\u00eene de caract\u00e8res <\/p>\n\n\n\n<p><code>|o| | |o| |o|o| <\/code><\/p>\n\n\n\n<p> en occupe 64.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Utilitaires<\/h3>\n\n\n\n<p>Tout d&rsquo;abord, on regarde les pions de gauche \u00e0 droite, sans tenir compte de l&rsquo;historique de leurs d\u00e9placements, donc <code>(0,3,5,2)<\/code> peut aussi \u00eatre repr\u00e9sent\u00e9 sous la forme <code>(0,2,3,5)<\/code> o\u00f9 les abscisses sont tri\u00e9es dans l&rsquo;ordre croissant. On d\u00e9finit alors une fonction <code>can<\/code> donnant la forme canonique d&rsquo;un tuple (ou plateau de jeu) :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def can(p):\n    return tuple(sorted(list(p)))<\/code><\/pre>\n\n\n\n<p>(on convertit le tuple en une liste, qui est mutable, on trie cette liste et on convertit le r\u00e9sultat \u00e0 nouveau en un tuple)<\/p>\n\n\n\n<p>Ainsi, dans le dessin du graphe d&rsquo;un jeu de Welter, on \u00e9vitera d&rsquo;avoir plusieurs sommets correspondant \u00e0 la m\u00eame situation de jeu.<\/p>\n\n\n\n<p>Ensuite, on d\u00e9finit une fonction <code>str1<\/code>, destin\u00e9e \u00e0 remplacer <code>str<\/code>, qui donne une cha\u00eene de caract\u00e8res plus lisible que le tuple, avec des pions repr\u00e9sent\u00e9s par la lettre <code>o<\/code> et des bords de cases repr\u00e9sent\u00e9s par des traits verticaux :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def str1(p):\n    tab = &#091;' ']*(1+max(p))\n    for x in p:\n        tab&#091;x] = 'o'\n    return '|'+'|'.join(tab)+'|'<\/code><\/pre>\n\n\n\n<p>avec \u00e7a on dessine des tuples lisibles :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt;&gt; str1((0,3,5,6))\n'|o| | |o| |o|o|'\n&gt;&gt;&gt; str1(can((0,3,5,2)))\n'|o| |o|o| |o|'<\/code><\/pre>\n\n\n\n<p>On constate au passage que les cases vides \u00e0 droite ne sont plus repr\u00e9sent\u00e9es, en effet elles ne servent plus \u00e0 rien dans le jeu.<\/p>\n\n\n\n<p>Enfin, un dernier utilitaire pour la suite est la v\u00e9rification que chaque case ne contient au maximum qu&rsquo;un seul pion :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def ok(p):\n    return all(p&#091;i]!=p&#091;j] for i in range(len(p)) for j in range(i))<\/code><\/pre>\n\n\n\n<p>En effet, dire qu&rsquo;aucune case ne contient plus d&rsquo;un pion, c&rsquo;est v\u00e9rifier qu&rsquo;aucune abscisse n&rsquo;est pr\u00e9sente plus d&rsquo;une fois dans le tuple. A priori, c&rsquo;\u00e9tait le point faible de cette mod\u00e9lisation (avec un tableau d&rsquo;entiers on aurait juste eu \u00e0 \u00e9crire all <code>(x in (0,1) for x in tab)<\/code>)  et le fait d&rsquo;avoir r\u00e9ussi \u00e0 exprimer la condition en termes d&rsquo;abscisses est garante de la r\u00e9ussite du mod\u00e8le.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">R\u00e8gle du jeu<\/h3>\n\n\n\n<p>On d\u00e9finit maintenant une fonction <code>tenter<\/code> qui modifie le plateau (un tuple d&rsquo;abscisses enti\u00e8res) en respectant la r\u00e8gle du jeu :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def tenter(p,i,j):\n    if j&lt;p&#091;i]:\n        q = list(p)\n        q&#091;i] = j\n        if ok(q):\n            return can(q)<\/code><\/pre>\n\n\n\n<p>La fonction prend en entr\u00e9e un plateau de jeu <code>p<\/code> (un tuple d&rsquo;abscisses de pions), un indice de d\u00e9part <code>i<\/code> (<code>p[i]<\/code> est l&rsquo;abscisse du pion \u00e0 bouger) et une abscisse <code>j<\/code> d&rsquo;arriv\u00e9e (l\u00e0 o\u00f9 ira le pion si possible). Si on peut bouger le pion d&rsquo;indice <code>i<\/code>, son abscisse sera <code>j<\/code>, et si on ne peut pas (parce que <code>j<\/code> est trop grand &#8211; trajet vers la droite ce qui est interdit par la r\u00e8gle du jeu &#8211; ou parce que cela aboutirait \u00e0 plus d&rsquo;un pion sur une case) alors la fonction ne renvoie rien, ou plut\u00f4t elle renvoie <code>None<\/code>. Si le mouvement est possible, la fonction renvoie le nouveau plateau <code>can(q)<\/code>.<\/p>\n\n\n\n<p>La mod\u00e9lisation du jeu de Welter en Python est, \u00e0 ce stade, termin\u00e9e. Il reste juste \u00e0 construire le graphe du jeu. <\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Graphe du jeu<\/h3>\n\n\n\n<p>Fid\u00e8le au programme de NSI (Terminale), on choisit de repr\u00e9senter le graphe par listes d&rsquo;adjacences. Dans un graphe orient\u00e9, on dit qu&rsquo;un sommet est enfant d&rsquo;un autre s&rsquo;il y a un arc les joignant, et la liste d&rsquo;adjacence d&rsquo;un sommet est la liste de ses enfants. On la calcule par une fonction, en tenant compte du fait que l&rsquo;indice <code>i<\/code> ne peut pas d\u00e9passer la longueur du tuple, et que l&rsquo;abscisse <code>j<\/code> ne peut pas d\u00e9passer <code>p[i]<\/code> :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def enfants(p):\n    tab = &#091;]\n    for i in range(len(p)):\n        for j in range(p&#091;i]):\n            t = tenter(p,i,j)\n            if t is not None:\n                tab.append(t)\n    return tab<\/code><\/pre>\n\n\n\n<p>Dans la liste <code>tab<\/code>, on n&rsquo;a gard\u00e9 que les positions possibles \u00e0 partir de <code>p<\/code>, c&rsquo;est-\u00e0-dire celles pour lesquelles la tentative renvoie autre chose que <code>None<\/code>. <\/p>\n\n\n\n<p>On a alors les 8 coups possibles :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt;&gt; enfants((0,3,5,6))\n&#091;(0, 1, 5, 6), (0, 2, 5, 6), (0, 1, 3, 6), (0, 2, 3, 6), (0, 3, 4, 6), (0, 1, 3, 5), (0, 2, 3, 5), (0, 3, 4, 5)]<\/code><\/pre>\n\n\n\n<p>Pour construire le graphe (un dictionnaire dont les valeurs sont des listes d&rsquo;adjacence), on utilise le fait que  <code>sum(p)<\/code> est un variant, donc que sa valeur initiale majore le nombre de boucles \u00e0 parcourir :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def graphe(p):\n    g = {p: enfants(p)}\n    for n in range(sum(p)):\n        gr = {k:v for k,v in g.items()}\n        for k,v in g.items():\n            for u in v:\n                if u not in gr:\n                    gr&#091;u] = enfants(u)\n        g = gr.copy()\n    return g<\/code><\/pre>\n\n\n\n<p>On travaille sur une copie <code>gr<\/code> du graphe, parce que Python interdit (\u00e0 juste titre) de modifier un objet mutable en cours de parcours dudit objet. Avec cette fonction on peut construire le graphe d&rsquo;un jeu (utile pour chercher la strat\u00e9gie gagnante) :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&gt;&gt;&gt; graphe((0,3,5,6))\n{(0, 3, 5, 6): &#091;(0, 1, 5, 6), (0, 2, 5, 6), (0, 1, 3, 6), (0, 2, 3, 6), (0, 3, 4, 6), (0, 1, 3, 5), (0, 2, 3, 5), (0, 3, 4, 5)], (0, 1, 5, 6): &#091;(0, 1, 2, 6), (0, 1, 3, 6), (0, 1, 4, 6), (0, 1, 2, 5), (0, 1, 3, 5), (0, 1, 4, 5)], (0, 2, 5, 6): &#091;(0, 1, 5, 6), (0, 1, 2, 6), (0, 2, 3, 6), (0, 2, 4, 6), (0, 1, 2, 5), (0, 2, 3, 5), (0, 2, 4, 5)], (0, 1, 3, 6): &#091;(0, 1, 2, 6), (0, 1, 2, 3), (0, 1, 3, 4), (0, 1, 3, 5)], (0, 2, 3, 6): &#091;(0, 1, 3, 6), (0, 1, 2, 6), (0, 1, 2, 3), (0, 2, 3, 4), (0, 2, 3, 5)], (0, 3, 4, 6): &#091;(0, 1, 4, 6), (0, 2, 4, 6), (0, 1, 3, 6), (0, 2, 3, 6), (0, 1, 3, 4), (0, 2, 3, 4), (0, 3, 4, 5)], (0, 1, 3, 5): &#091;(0, 1, 2, 5), (0, 1, 2, 3), (0, 1, 3, 4)], (0, 2, 3, 5): &#091;(0, 1, 3, 5), (0, 1, 2, 5), (0, 1, 2, 3), (0, 2, 3, 4)], (0, 3, 4, 5): &#091;(0, 1, 4, 5), (0, 2, 4, 5), (0, 1, 3, 5), (0, 2, 3, 5), (0, 1, 3, 4), (0, 2, 3, 4)], (0, 1, 2, 6): &#091;(0, 1, 2, 3), (0, 1, 2, 4), (0, 1, 2, 5)], (0, 1, 4, 6): &#091;(0, 1, 2, 6), (0, 1, 3, 6), (0, 1, 2, 4), (0, 1, 3, 4), (0, 1, 4, 5)], (0, 1, 2, 5): &#091;(0, 1, 2, 3), (0, 1, 2, 4)], (0, 1, 4, 5): &#091;(0, 1, 2, 5), (0, 1, 3, 5), (0, 1, 2, 4), (0, 1, 3, 4)], (0, 2, 4, 6): &#091;(0, 1, 4, 6), (0, 1, 2, 6), (0, 2, 3, 6), (0, 1, 2, 4), (0, 2, 3, 4), (0, 2, 4, 5)], (0, 2, 4, 5): &#091;(0, 1, 4, 5), (0, 1, 2, 5), (0, 2, 3, 5), (0, 1, 2, 4), (0, 2, 3, 4)], (0, 1, 2, 3): &#091;], (0, 1, 3, 4): &#091;(0, 1, 2, 4), (0, 1, 2, 3)], (0, 2, 3, 4): &#091;(0, 1, 3, 4), (0, 1, 2, 4), (0, 1, 2, 3)], (0, 1, 2, 4): &#091;(0, 1, 2, 3)]}<\/code><\/pre>\n\n\n\n<p>Mais un graphe, \u00e7a se dessine, du coup avec<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>from graphviz import Digraph<\/code><\/pre>\n\n\n\n<p>on peut d\u00e9finir une fonction de dessin :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def dessin(p):\n    g = graphe(p)\n    gr = Digraph(engine='dot')\n    for k,v in g.items():\n        for u in v:\n            gr.edge(str1(k),str1(u))\n    return gr<\/code><\/pre>\n\n\n\n<p>qui d\u00e9finit un graphe en essayant autant que possible de mettre au m\u00eame niveau des sommets de m\u00eame nombre de Grundy. Alors<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>gragra = dessin((0,3,5,6))\ngragra.render('welt0356',format='pdf')<\/code><\/pre>\n\n\n\n<p>donne le graphe suivant :<\/p>\n\n\n\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welt0356.pdf\" type=\"application\/pdf\" style=\"width:100%;height:430px\" aria-label=\"Contenu embarqu\u00e9 welt0356.\"><\/object><a id=\"wp-block-file--media-d12473cb-a329-48c4-8455-c25257d4fd08\" href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welt0356.pdf\">welt0356<\/a><a href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welt0356.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-d12473cb-a329-48c4-8455-c25257d4fd08\">T\u00e9l\u00e9charger<\/a><\/div>\n\n\n\n<p>Pour trouver la strat\u00e9gie gagnante, il n&rsquo;y a m\u00eame pas besoin de calculer tous les nombres de Grundy, mais seulement colorier en vert les sommets de nombre de Grundy nul (et en rouge les autres). Cela revient \u00e0 l&rsquo;algorithme suivant :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>si un sommet a au moins un enfant vert, alors il est rouge,<\/li>\n\n\n\n<li>si un sommet n&rsquo;a que des enfants rouges (ou pas d&rsquo;enfant du tout) alors il est vert.<\/li>\n<\/ul>\n\n\n\n<p>La strat\u00e9gie gagnante est alors de syst\u00e9matiquement viser un sommet vert. Mais avec le jeu<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"720\" height=\"135\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welter1.jpg\" alt=\"\" class=\"wp-image-1919\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welter1.jpg 720w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welter1-300x56.jpg 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/figure>\n\n\n\n<p>qui est vert :<\/p>\n\n\n\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welt0356color.pdf\" type=\"application\/pdf\" style=\"width:100%;height:430px\" aria-label=\"Contenu embarqu\u00e9 welt0356color.\"><\/object><a id=\"wp-block-file--media-989a3515-4cfe-4069-8534-ff7f95f79909\" href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welt0356color.pdf\">welt0356color<\/a><a href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welt0356color.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-989a3515-4cfe-4069-8534-ff7f95f79909\">T\u00e9l\u00e9charger<\/a><\/div>\n\n\n\n<p>il n&rsquo;y a pas de strat\u00e9gie gagnante puisque tous les enfants de la position de d\u00e9part sont, par d\u00e9finition, rouges.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Exemples<\/h3>\n\n\n\n<p>Voici d&rsquo;autres exemples de jeux de Welter, o\u00f9 on peut calculer la strat\u00e9gie gagnante. Nombre de Grundy 1 :<\/p>\n\n\n\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welt13.pdf\" type=\"application\/pdf\" style=\"width:100%;height:600px\" aria-label=\"Contenu embarqu\u00e9 welt13.\"><\/object><a id=\"wp-block-file--media-da807dee-e538-4ca9-8e0e-e33df74fdd16\" href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welt13.pdf\">welt13<\/a><a href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welt13.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-da807dee-e538-4ca9-8e0e-e33df74fdd16\">T\u00e9l\u00e9charger<\/a><\/div>\n\n\n\n<p>nombre de Grundy 0 :<\/p>\n\n\n\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welt23.pdf\" type=\"application\/pdf\" style=\"width:100%;height:600px\" aria-label=\"Contenu embarqu\u00e9 welt23.\"><\/object><a id=\"wp-block-file--media-9eb6f738-9b3f-496f-bfd0-3875dd20c0df\" href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welt23.pdf\">welt23<\/a><a href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welt23.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-9eb6f738-9b3f-496f-bfd0-3875dd20c0df\">T\u00e9l\u00e9charger<\/a><\/div>\n\n\n\n<p>Nombre de Grundy  2 :<\/p>\n\n\n\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welt14.pdf\" type=\"application\/pdf\" style=\"width:100%;height:600px\" aria-label=\"Contenu embarqu\u00e9 welt14.\"><\/object><a id=\"wp-block-file--media-dde63e96-6f80-49cd-a7b1-3d5e4a2a2b48\" href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welt14.pdf\">welt14<\/a><a href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welt14.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-dde63e96-6f80-49cd-a7b1-3d5e4a2a2b48\">T\u00e9l\u00e9charger<\/a><\/div>\n\n\n\n<p><\/p>\n\n\n\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welt25.pdf\" type=\"application\/pdf\" style=\"width:100%;height:600px\" aria-label=\"Contenu embarqu\u00e9 welt25.\"><\/object><a id=\"wp-block-file--media-c9dd971d-0534-4c0e-84cf-69b0605d22b7\" href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welt25.pdf\">welt25<\/a><a href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welt25.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-c9dd971d-0534-4c0e-84cf-69b0605d22b7\">T\u00e9l\u00e9charger<\/a><\/div>\n\n\n\n<p><\/p>\n\n\n\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welt124.pdf\" type=\"application\/pdf\" style=\"width:100%;height:600px\" aria-label=\"Contenu embarqu\u00e9 welt124.\"><\/object><a id=\"wp-block-file--media-ffd08d69-d6e0-4dd8-a51e-accd3a0528bd\" href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welt124.pdf\">welt124<\/a><a href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welt124.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-ffd08d69-d6e0-4dd8-a51e-accd3a0528bd\">T\u00e9l\u00e9charger<\/a><\/div>\n\n\n\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welt125.pdf\" type=\"application\/pdf\" style=\"width:100%;height:600px\" aria-label=\"Contenu embarqu\u00e9 welt125.\"><\/object><a id=\"wp-block-file--media-03098854-497b-4fdd-8913-233c473d8aca\" href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welt125.pdf\">welt125<\/a><a href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welt125.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-03098854-497b-4fdd-8913-233c473d8aca\">T\u00e9l\u00e9charger<\/a><\/div>\n\n\n\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welt1235.pdf\" type=\"application\/pdf\" style=\"width:100%;height:600px\" aria-label=\"Contenu embarqu\u00e9 welt1235.\"><\/object><a id=\"wp-block-file--media-d52c2c3a-a03c-4912-bc92-d4c91f4db557\" href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welt1235.pdf\">welt1235<\/a><a href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welt1235.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-d52c2c3a-a03c-4912-bc92-d4c91f4db557\">T\u00e9l\u00e9charger<\/a><\/div>\n\n\n\n<p><\/p>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Jeu du dollar d&rsquo;argent<\/h2>\n\n\n\n<p>C&rsquo;est \u00e0 Nicholas de Bruijn que Conway et Gardner attribuent ce jeu. La variante sans le dollar d&rsquo;argent est peut-\u00eatre inspir\u00e9e d&rsquo;un jeu que Conway attribue \u00e0 un certain Northcott, mais que Charles B\u00e9art d\u00e9crit comme traditionnel de l&rsquo;Ouest africain, sous le nom de <a href=\"https:\/\/ludii.games\/details.php?keyword=T%27uk%20T%27uk\">Tiouk Tiouk<\/a>. Quoiqu&rsquo;il en soit, le jeu du dollar d&rsquo;argent sans le dollar est une variante du jeu de Welter, o\u00f9 il n&rsquo;est plus permis de sauter par-dessus un jeton, mais seulement de glisser un jeton (et il est toujours interdit d&#8217;empiler les jetons, contrairement \u00e0 la version avec le dollar). Le plateau de jeu est donc le m\u00eame que pour le jeu de Welter, comme en t\u00e9moigne cette figure de Conway :<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"230\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/Capture-decran-2026-04-04-080353-1024x230.png\" alt=\"\" class=\"wp-image-1942\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/Capture-decran-2026-04-04-080353-1024x230.png 1024w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/Capture-decran-2026-04-04-080353-300x68.png 300w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/Capture-decran-2026-04-04-080353-768x173.png 768w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/Capture-decran-2026-04-04-080353.png 1071w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>La th\u00e9orie de ce jeu est plus simple que celle du jeu de Welter : dans la position ci-dessus, on est face \u00e0 un jeu de Nim dont les tas ont pour hauteurs respectives 0, 2, 4, 5 et 3. Pour ce qui est de la mod\u00e9lisation en Python, la seule diff\u00e9rence avec le jeu de Welter est qu&rsquo;on ne peut pas sauter par-dessus un pion, ce qui s&rsquo;exprime par une contrainte suppl\u00e9mentaire dans la fonction <code>tenter<\/code> :<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>def tenter(p,i,j):\n    if j&lt;p&#091;i] and (i==0 or j&gt;p&#091;i-1]):\n        q = list(p)\n        q&#091;i] = j\n        if ok(q):\n            return can(q)<\/code><\/pre>\n\n\n\n<p>(<code>j<\/code> doit \u00eatre plus petit que <code>p[i]<\/code> parce qu&rsquo;on va toujours vers la gauche, mais en plus il doit \u00eatre plus grand que l&rsquo;abscisse <code>p[i-1]<\/code> du pion pr\u00e9c\u00e9dent &#8211; \u00e0 condition que celui-ci existe c&rsquo;est-\u00e0-dire que <code>i<\/code> soit non nul &#8211; parce que sinon on a saut\u00e9 par-dessus un pion, ce qui est autoris\u00e9 dans le jeu de Welter mais pas celui du dollar d&rsquo;argent sans le dollar)<\/p>\n\n\n\n<p>Avec cette contrainte suppl\u00e9mentaire, les graphes de jeu ne sont pas les m\u00eames que pour Welter. Par exemple avec<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"720\" height=\"135\" src=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welter1.jpg\" alt=\"\" class=\"wp-image-1919\" srcset=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welter1.jpg 720w, https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/welter1-300x56.jpg 300w\" sizes=\"auto, (max-width: 720px) 100vw, 720px\" \/><\/figure>\n\n\n\n<p>le graphe est :<\/p>\n\n\n\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/silver0356.pdf\" type=\"application\/pdf\" style=\"width:100%;height:870px\" aria-label=\"Contenu embarqu\u00e9 silver0356.\"><\/object><a id=\"wp-block-file--media-0aa75d64-46ac-4c00-8bda-c347d7be0689\" href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/silver0356.pdf\">silver0356<\/a><a href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/silver0356.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-0aa75d64-46ac-4c00-8bda-c347d7be0689\">T\u00e9l\u00e9charger<\/a><\/div>\n\n\n\n<p>et sa coloration<\/p>\n\n\n\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/silver0356color.pdf\" type=\"application\/pdf\" style=\"width:100%;height:880px\" aria-label=\"Contenu embarqu\u00e9 silver0356color.\"><\/object><a id=\"wp-block-file--media-3a6f10cb-6790-42c8-bf84-8dc743029a81\" href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/silver0356color.pdf\">silver0356color<\/a><a href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/silver0356color.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-3a6f10cb-6790-42c8-bf84-8dc743029a81\">T\u00e9l\u00e9charger<\/a><\/div>\n\n\n\n<p>montre que, cette fois-ci, il y a une strat\u00e9gie gagnante, elle consiste \u00e0 glisser le plus \u00e0 gauche possible le second jeton.<\/p>\n\n\n\n<p>Voici d&rsquo;autres graphes du jeu du dollar d&rsquo;argent sans le dollar :<\/p>\n\n\n\n<p>Nombre de Grundy 1 :<\/p>\n\n\n\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/silver13.pdf\" type=\"application\/pdf\" style=\"width:100%;height:600px\" aria-label=\"Contenu embarqu\u00e9 silver13.\"><\/object><a id=\"wp-block-file--media-515c4e92-4c48-4766-936a-7375c7e3391b\" href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/silver13.pdf\">silver13<\/a><a href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/silver13.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-515c4e92-4c48-4766-936a-7375c7e3391b\">T\u00e9l\u00e9charger<\/a><\/div>\n\n\n\n<p>Nombre de Grundy 0 :<\/p>\n\n\n\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/silver23.pdf\" type=\"application\/pdf\" style=\"width:100%;height:600px\" aria-label=\"Contenu embarqu\u00e9 silver23.\"><\/object><a id=\"wp-block-file--media-c8219d5c-6fe0-4e9e-a576-05abd99ca954\" href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/silver23.pdf\">silver23<\/a><a href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/silver23.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-c8219d5c-6fe0-4e9e-a576-05abd99ca954\">T\u00e9l\u00e9charger<\/a><\/div>\n\n\n\n<p>Nombre de Grundy 3 :<\/p>\n\n\n\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/silver14.pdf\" type=\"application\/pdf\" style=\"width:100%;height:600px\" aria-label=\"Contenu embarqu\u00e9 silver14.\"><\/object><a id=\"wp-block-file--media-a26c1a78-9555-4d95-8cf1-8f0952615d93\" href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/silver14.pdf\">silver14<\/a><a href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/silver14.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-a26c1a78-9555-4d95-8cf1-8f0952615d93\">T\u00e9l\u00e9charger<\/a><\/div>\n\n\n\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/silver35.pdf\" type=\"application\/pdf\" style=\"width:100%;height:900px\" aria-label=\"Contenu embarqu\u00e9 silver35.\"><\/object><a id=\"wp-block-file--media-451df157-854d-4d1e-b1e2-8ff34516698e\" href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/silver35.pdf\">silver35<\/a><a href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/silver35.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-451df157-854d-4d1e-b1e2-8ff34516698e\">T\u00e9l\u00e9charger<\/a><\/div>\n\n\n\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/silver125.pdf\" type=\"application\/pdf\" style=\"width:100%;height:730px\" aria-label=\"Contenu embarqu\u00e9 silver125.\"><\/object><a id=\"wp-block-file--media-75be0ced-d662-488b-b283-e44713815164\" href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/silver125.pdf\">silver125<\/a><a href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/silver125.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-75be0ced-d662-488b-b283-e44713815164\">T\u00e9l\u00e9charger<\/a><\/div>\n\n\n\n<p>Nombre de Grundy 1 :<\/p>\n\n\n\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/silver1235.pdf\" type=\"application\/pdf\" style=\"width:100%;height:730px\" aria-label=\"Contenu embarqu\u00e9 silver1235.\"><\/object><a id=\"wp-block-file--media-4b0adcf8-35e7-4d3d-a0b7-4cbc9f608a48\" href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/silver1235.pdf\">silver1235<\/a><a href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/silver1235.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-4b0adcf8-35e7-4d3d-a0b7-4cbc9f608a48\">T\u00e9l\u00e9charger<\/a><\/div>\n\n\n\n<div data-wp-interactive=\"core\/file\" class=\"wp-block-file\"><object data-wp-bind--hidden=\"!state.hasPdfPreview\" hidden class=\"wp-block-file__embed\" data=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/silver12358.pdf\" type=\"application\/pdf\" style=\"width:100%;height:470px\" aria-label=\"Contenu embarqu\u00e9 silver12358.\"><\/object><a id=\"wp-block-file--media-605df69e-070a-489a-aca0-64e310bc8520\" href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/silver12358.pdf\">silver12358<\/a><a href=\"https:\/\/iremi.univ-reunion.fr\/wp-content\/uploads\/2026\/04\/silver12358.pdf\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-605df69e-070a-489a-aca0-64e310bc8520\">T\u00e9l\u00e9charger<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Le jeu de Welter C&rsquo;est dans le cadre de recherches sur les alg\u00e8bres de Kac-Moody en physique th\u00e9orique, que dans les ann\u00e9es 1950, P.C. Welter d&rsquo;une part, Mikio Sato de l&rsquo;autre, ont invent\u00e9 le jeu \u00e9tudi\u00e9 ici. Le jeu se joue sur un plateau similaire \u00e0 celui de Sowing, avec des cases align\u00e9es. Des pions [&hellip;]<\/p>\n","protected":false},"author":6,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[9,12,10],"tags":[29,35,17],"coauthors":[54],"class_list":["post-1913","post","type-post","status-publish","format-standard","hentry","category-algorithmes-programmation-et-langages","category-jeux-mathematiques","category-machines-information-codage","tag-cycle-2","tag-nsi","tag-python"],"_links":{"self":[{"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=\/wp\/v2\/posts\/1913","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=\/wp\/v2\/users\/6"}],"replies":[{"embeddable":true,"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1913"}],"version-history":[{"count":18,"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=\/wp\/v2\/posts\/1913\/revisions"}],"predecessor-version":[{"id":1959,"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=\/wp\/v2\/posts\/1913\/revisions\/1959"}],"wp:attachment":[{"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1913"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1913"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1913"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/iremi.univ-reunion.fr\/index.php?rest_route=%2Fwp%2Fv2%2Fcoauthors&post=1913"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}