{"id":1922,"date":"2024-04-04T14:40:42","date_gmt":"2024-04-04T12:40:42","guid":{"rendered":"https:\/\/actilud.com\/info\/?p=1922"},"modified":"2025-04-02T15:52:48","modified_gmt":"2025-04-02T13:52:48","slug":"la-machine-de-turing-defis-de-programmeur","status":"publish","type":"post","link":"https:\/\/actilud.com\/info\/blog\/la-machine-de-turing-defis-de-programmeur\/","title":{"rendered":"La machine de Turing : d\u00e9fis de programmeur"},"content":{"rendered":"<h1>Addition des b\u00e2tons<\/h1>\n<p>L&rsquo;arithm\u00e9tique des b\u00e2tons est sans doute la plus facile \u00e0 mettre en \u0153uvre avec une machine de Turing. La collection \u00e0 utiliser est C={ \u2610, |, X, =, +}.<\/p>\n<p>On \u00e9crit sur la bande une addition avec des b\u00e2tons, comme par exemple: ||||+||=<\/p>\n<p>Le r\u00e9sultat doit \u00eatre de la forme : ||||+||=||||||<\/p>\n<p>On commence sur le signe = ou sur le b\u00e2ton imm\u00e9diatement \u00e0 sa droite, au choix. On doit terminer sur le premier blanc \u00e0 droite de la r\u00e9ponse.<\/p>\n<details>\n<summary>Description<\/summary>\n<p>La t\u00eate se rend d&rsquo;abord \u00e0 gauche. Si elle rencontre un X, le signe + ou le signe =, elle continue \u00e0 gauche. Si elle rencontre un b\u00e2ton, elle le transforme en X et se dirige vers la droite, jusqu&rsquo;\u00e0 ce qu&rsquo;elle rencontre un blanc. L\u00e0, elle \u00e9crit un X et recommence son d\u00e9placement vers la gauche. Si en allant \u00e0 gauche elle finit par trouver un blanc, elle retourne vers la droite en transformant tous les X en b\u00e2ton et s&rsquo;arr\u00eate sur le premier blanc.<\/p>\n<\/details>\n<h1>D\u00e9cr\u00e9mentation universelle d&rsquo;un entier naturel<\/h1>\n<p>Nous avons souvent besoin d&rsquo;\u00e9valuer la valeur d&rsquo;un nombre et pour cela, le plus facile avec la machine de Turing est de <em>d\u00e9cr\u00e9menter<\/em> le nombre. Nous allons r\u00e9aliser une machine de Turing r\u00e9utilisable dans des programmes plus importants. Il s&rsquo;agit de d\u00e9cr\u00e9menter un entier naturel pos\u00e9 sur la bande \u00e0 raison d&rsquo;un chiffre par case. Si l&rsquo;entier arrive \u00e0 sa valeur finale, 0, alors il faut effacer le 0; s&rsquo;il reste plusieurs 0 cons\u00e9cutifs, il faut tous les effacer. Le programme <em>doit <\/em>s&rsquo;arr\u00eater sur le dernier chiffre, ou sur le dernier blanc qu&rsquo;il a \u00e9crit s&rsquo;il a tout effac\u00e9. Pourquoi ? parce qu&rsquo;un autre programme qui utiliserait notre machine doit \u00ab\u00a0savoir\u00a0\u00bb si la machine a effectu\u00e9 une d\u00e9cr\u00e9mentation ou non. Tant qu&rsquo;elle s&rsquo;arr\u00eate sur un chiffre, c&rsquo;est que la d\u00e9cr\u00e9mentation a eu lieu. Si elle s&rsquo;arr\u00eate sur un blanc, c&rsquo;est que la d\u00e9cr\u00e9mentation est termin\u00e9e. C&rsquo;est ainsi que notre machine fait passer l&rsquo;information \u00e0 la machine appelante.<\/p>\n<p>Notre machine doit aussi pr\u00e9voir la possibilit\u00e9 qu&rsquo;il existe des signes diff\u00e9rents du blanc de part et d&rsquo;autre du nombre. Donc on utilisera de pr\u00e9f\u00e9rence le signe \u2200 pour rep\u00e9rer tout signe diff\u00e9rent des chiffres.<\/p>\n<p>Voici quelques exemples; la position de la t\u00eate indique le point de d\u00e9part et le point d&rsquo;arriv\u00e9e.<\/p>\n<figure id=\"attachment_1961\" aria-describedby=\"caption-attachment-1961\" style=\"width: 500px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1961 size-full\" src=\"https:\/\/actilud.com\/info\/wp-content\/uploads\/2024\/03\/turing_decrementer.png\" alt=\"\" width=\"500\" height=\"369\" srcset=\"https:\/\/actilud.com\/info\/wp-content\/uploads\/2024\/03\/turing_decrementer.png 500w, https:\/\/actilud.com\/info\/wp-content\/uploads\/2024\/03\/turing_decrementer-300x221.png 300w\" sizes=\"auto, (min-width: 960px) 75vw, 100vw\" \/><figcaption id=\"caption-attachment-1961\" class=\"wp-caption-text\">Positions de la t\u00eate avant et apr\u00e8s le traitement.<\/figcaption><\/figure>\n<details>\n<summary>Solution : la machine \u00e0 d\u00e9cr\u00e9menter (spoiler)<\/summary>\n<blockquote><p>Machine\u00a0: [D\u00e9cr\u00e9menteur]<br \/>\n# D\u00e9cr\u00e9mente un entier naturel. S&rsquo;il reste des 0, les remplace par des blancs. S&rsquo;arr\u00eate toujours sur le dernier chiffre, ou le blanc.<br \/>\n# D\u00e9but\u00a0: sur la donn\u00e9e la plus \u00e0 droite<br \/>\n# Fin\u00a0: sur la donn\u00e9e la plus \u00e0 droite<\/p>\n<p>\u00c9tat\u00a0: D\u00e9cr\u00e9ment<br \/>\nD\u00e9cr\u00e9ment, 9 , 8 , \u2192 , transitDroite<br \/>\nD\u00e9cr\u00e9ment, 8 , 7 , \u2192 , transitDroite<br \/>\nD\u00e9cr\u00e9ment, 7 , 6 , \u2192 , transitDroite<br \/>\nD\u00e9cr\u00e9ment, 6 , 5 , \u2192 , transitDroite<br \/>\nD\u00e9cr\u00e9ment, 5 , 4 , \u2192 , transitDroite<br \/>\nD\u00e9cr\u00e9ment, 4 , 3 , \u2192 , transitDroite<br \/>\nD\u00e9cr\u00e9ment, 3 , 2 , \u2192 , transitDroite<br \/>\nD\u00e9cr\u00e9ment, 2 , 1 , \u2192 , transitDroite<br \/>\nD\u00e9cr\u00e9ment, 1 , 0 , \u2192 , transitDroite<br \/>\nD\u00e9cr\u00e9ment, 0 , 9 , \u2190 , D\u00e9cr\u00e9ment<br \/>\nD\u00e9cr\u00e9ment, \u2200 , \u2200 , \u2192 , efface9<\/p>\n<p>\u00c9tat\u00a0: transitDroite<br \/>\n# Saute tous les chiffres jusqu&rsquo;au dernier. S&rsquo;arr\u00eate sur le dernier chiffre.<br \/>\ntransitDroite, 9 , 9 , \u2192 , transitDroite<br \/>\ntransitDroite, 8 , 8 , \u2192 , transitDroite<br \/>\ntransitDroite, 7 , 7 , \u2192 , transitDroite<br \/>\ntransitDroite, 6 , 6 , \u2192 , transitDroite<br \/>\ntransitDroite, 5 , 5 , \u2192 , transitDroite<br \/>\ntransitDroite, 4 , 4 , \u2192 , transitDroite<br \/>\ntransitDroite, 3 , 3 , \u2192 , transitDroite<br \/>\ntransitDroite, 2 , 2 , \u2192 , transitDroite<br \/>\ntransitDroite, 1 , 1 , \u2192 , transitDroite<br \/>\ntransitDroite, 0 , 0 , \u2192 , transitDroite<br \/>\ntransitDroite, \u2200 , \u2200 , \u2190 , stop<\/p>\n<p>\u00c9tat\u00a0: efface9<br \/>\n# Efface tous les 9 cons\u00e9cutifs; s&rsquo;arr\u00eate sur le dernier blanc pos\u00e9.<br \/>\nefface9, 9 , \u2610 , \u2192 , efface9<br \/>\nefface9, \u2200 , \u2200 , \u2190 , stop<\/p><\/blockquote>\n<\/details>\n<h1>Poser N pommes !<\/h1>\n<p>Dans certains cas, on a besoin d&rsquo;un grand nombre d&rsquo;objets sur la bande pour tester un programme. Par exemple, il faudrait 100 pommes pour v\u00e9rifier si un programme de comptage passe bien de\u00a0 1 \u00e0 100. \u00c9videmment, si on a du temps \u00e0 perdre, on peut placer manuellement les pommes une \u00e0 une sur la bande, et tester le programme.<\/p>\n<p>Mais on peut aussi r\u00e9aliser un programme de Turing ! On \u00e9crit un entier naturel sup\u00e9rieur \u00e0 0 sur la bande, la t\u00eate est plac\u00e9e sur le dernier chiffre.<\/p>\n<p>Et voici la situation finale; la t\u00eate se retrouve \u00e0 l&rsquo;arr\u00eat, sur la premi\u00e8re pomme d&rsquo;une s\u00e9rie. Le nombre initialement \u00e9crit sur la bande est effac\u00e9. Les pommes sont plac\u00e9es \u00e0 droite du nombre initial.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-1903 aligncenter\" src=\"https:\/\/actilud.com\/info\/wp-content\/uploads\/2024\/03\/turing_pommes4.png\" alt=\"\" width=\"500\" height=\"36\" srcset=\"https:\/\/actilud.com\/info\/wp-content\/uploads\/2024\/03\/turing_pommes4.png 500w, https:\/\/actilud.com\/info\/wp-content\/uploads\/2024\/03\/turing_pommes4-300x22.png 300w\" sizes=\"auto, (min-width: 960px) 75vw, 100vw\" \/><\/p>\n<p>Pratique, non ? Pour ex\u00e9cuter le programme, une fois la phase de mise au point termin\u00e9e, il est conseill\u00e9 d&rsquo;utiliser le mode de fonctionnement le plus rapide &#8211; le bouton \u00ab\u00a0cheval \u00e0 l&rsquo;arriv\u00e9e\u00a0\u00bb par exemple.\u00a0 Le temps d&rsquo;ex\u00e9cution augmente en effet tr\u00e8s rapidement en fonction du nombre de pommes.<\/p>\n<p>c= {[0-9],\u2610,pomme}<\/p>\n<details>\n<summary>Solution 1: tout dans la m\u00eame machine (spoiler).<\/summary>\n<blockquote><p>Machine\u00a0: [R\u00e9p\u00e9teur]<br \/>\n# D\u00e9cr\u00e9mente un entier naturel et place autant de pommes \u00e0 droite de ce nombre.<br \/>\n\u00c9tat\u00a0: D\u00e9cr\u00e9menter<br \/>\n# D\u00e9cr\u00e9mente un nombre<br \/>\nD\u00e9cr\u00e9menter, 9 , 8 , \u2192 , TransitDroite<br \/>\nD\u00e9cr\u00e9menter, 8 , 7 , \u2192 , TransitDroite<br \/>\nD\u00e9cr\u00e9menter, 7 , 6 , \u2192 , TransitDroite<br \/>\nD\u00e9cr\u00e9menter, 6 , 5 , \u2192 , TransitDroite<br \/>\nD\u00e9cr\u00e9menter, 5 , 4 , \u2192 , TransitDroite<br \/>\nD\u00e9cr\u00e9menter, 4 , 3 , \u2192 , TransitDroite<br \/>\nD\u00e9cr\u00e9menter, 3 , 2 , \u2192 , TransitDroite<br \/>\nD\u00e9cr\u00e9menter, 2 , 1 , \u2192 , TransitDroite<br \/>\nD\u00e9cr\u00e9menter, 1 , 0 , \u2192 , TransitDroite<br \/>\nD\u00e9cr\u00e9menter, 0 , 9 , \u2190 , D\u00e9cr\u00e9menter<br \/>\nD\u00e9cr\u00e9menter, \u2610 , \u2610 , \u2192 , Supprimer9<br \/>\n\u00c9tat\u00a0: Supprimer9<br \/>\n# Supprime tous les 9 et stop.<br \/>\nSupprimer9, 9 , \u2610 , \u2192 , Supprimer9<br \/>\n\u00c9tat\u00a0: TransitDroite<br \/>\nTransitDroite, \u2610 , pomme , \u2190 , TransitGauche<br \/>\nTransitDroite, \u2200 , \u2200 , \u2192 , TransitDroite<br \/>\n\u00c9tat\u00a0: TransitGauche<br \/>\nTransitGauche, pomme , pomme , \u2190 , TransitGauche<br \/>\nTransitGauche, \u2200 , \u2200 , D\u00e9cr\u00e9menter<\/p><\/blockquote>\n<\/details>\n<details>\n<summary>Solution 2: deux machines, celle qui d\u00e9cr\u00e9mente est une reprise du pr\u00e9c\u00e9dent exercice (spoiler)<\/summary>\n<blockquote><p>Machine\u00a0: [AjouterPommes]<br \/>\n# D\u00e9but\u00a0: sur la donn\u00e9e la plus \u00e0 droite<br \/>\n# Fin\u00a0: sur la donn\u00e9e la plus \u00e0 droite<\/p>\n<p>\u00c9tat\u00a0: lancerD\u00e9cr\u00e9menteur<br \/>\nlancerD\u00e9cr\u00e9menteur, \u2610 , \u2610 , stop<br \/>\nlancerD\u00e9cr\u00e9menteur, \u2200 , \u2200 , \u00e9valuation, [D\u00e9cr\u00e9menteur]<\/p>\n<p>\u00c9tat\u00a0: \u00e9valuation<br \/>\n# Evalue le r\u00e9sultat du d\u00e9cr\u00e9menteur. Si c&rsquo;est un nombre, il faut ajouter une pomme. Sinon, il faut s&rsquo;arr\u00eater.<br \/>\n\u00e9valuation, 0 , 0 , \u2192 , ajouterPomme<br \/>\n\u00e9valuation, 1 , 1 , \u2192 , ajouterPomme<br \/>\n\u00e9valuation, 2 , 2 , \u2192 , ajouterPomme<br \/>\n\u00e9valuation, 3 , 3 , \u2192 , ajouterPomme<br \/>\n\u00e9valuation, 4 , 4 , \u2192 , ajouterPomme<br \/>\n\u00e9valuation, 5 , 5 , \u2192 , ajouterPomme<br \/>\n\u00e9valuation, 6 , 6 , \u2192 , ajouterPomme<br \/>\n\u00e9valuation, 7 , 7 , \u2192 , ajouterPomme<br \/>\n\u00e9valuation, 8 , 8 , \u2192 , ajouterPomme<br \/>\n\u00e9valuation, 9 , 9 , \u2192 , ajouterPomme<\/p>\n<p>\u00c9tat\u00a0: ajouterPomme<br \/>\n# Ajoute une pomme \u00e0 la suite de la s\u00e9rie de pommes, s&rsquo;il y a de la place.<br \/>\najouterPomme, pomme , pomme , \u2192 , ajouterPomme<br \/>\najouterPomme, \u2610 , pomme , \u2190 , retourArri\u00e8re<\/p>\n<p>\u00c9tat\u00a0: retourArri\u00e8re<br \/>\n# Revient en arri\u00e8re jusqu&rsquo;au nombre initial.<br \/>\nretourArri\u00e8re, pomme , pomme , \u2190 , retourArri\u00e8re<br \/>\nretourArri\u00e8re, \u2200 , \u2200 , lancerD\u00e9cr\u00e9menteur<br \/>\n#&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br \/>\nMachine\u00a0: [D\u00e9cr\u00e9menteur]<br \/>\n# D\u00e9cr\u00e9mente un entier naturel. S&rsquo;il reste des 0, les remplace par des blancs. S&rsquo;arr\u00eate toujours sur le dernier chiffre, ou le blanc.<br \/>\n# D\u00e9but\u00a0: sur la donn\u00e9e la plus \u00e0 droite<br \/>\n# Fin\u00a0: sur la donn\u00e9e la plus \u00e0 droite<\/p>\n<p>\u00c9tat\u00a0: D\u00e9cr\u00e9ment<br \/>\nD\u00e9cr\u00e9ment, 9 , 8 , \u2192 , transitDroite<br \/>\nD\u00e9cr\u00e9ment, 8 , 7 , \u2192 , transitDroite<br \/>\nD\u00e9cr\u00e9ment, 7 , 6 , \u2192 , transitDroite<br \/>\nD\u00e9cr\u00e9ment, 6 , 5 , \u2192 , transitDroite<br \/>\nD\u00e9cr\u00e9ment, 5 , 4 , \u2192 , transitDroite<br \/>\nD\u00e9cr\u00e9ment, 4 , 3 , \u2192 , transitDroite<br \/>\nD\u00e9cr\u00e9ment, 3 , 2 , \u2192 , transitDroite<br \/>\nD\u00e9cr\u00e9ment, 2 , 1 , \u2192 , transitDroite<br \/>\nD\u00e9cr\u00e9ment, 1 , 0 , \u2192 , transitDroite<br \/>\nD\u00e9cr\u00e9ment, 0 , 9 , \u2190 , D\u00e9cr\u00e9ment<br \/>\nD\u00e9cr\u00e9ment, \u2200 , \u2200 , \u2192 , efface9<\/p>\n<p>\u00c9tat\u00a0: transitDroite<br \/>\n# Saute tous les chiffres jusqu&rsquo;au dernier. S&rsquo;arr\u00eate sur le dernier chiffre.<br \/>\ntransitDroite, 9 , 9 , \u2192 , transitDroite<br \/>\ntransitDroite, 8 , 8 , \u2192 , transitDroite<br \/>\ntransitDroite, 7 , 7 , \u2192 , transitDroite<br \/>\ntransitDroite, 6 , 6 , \u2192 , transitDroite<br \/>\ntransitDroite, 5 , 5 , \u2192 , transitDroite<br \/>\ntransitDroite, 4 , 4 , \u2192 , transitDroite<br \/>\ntransitDroite, 3 , 3 , \u2192 , transitDroite<br \/>\ntransitDroite, 2 , 2 , \u2192 , transitDroite<br \/>\ntransitDroite, 1 , 1 , \u2192 , transitDroite<br \/>\ntransitDroite, 0 , 0 , \u2192 , transitDroite<br \/>\ntransitDroite, \u2200 , \u2200 , \u2190 , stop<\/p>\n<p>\u00c9tat\u00a0: efface9<br \/>\n# Efface tous les 9 cons\u00e9cutifs; s&rsquo;arr\u00eate sur le dernier blanc pos\u00e9.<br \/>\nefface9, 9 , \u2610 , \u2192 , efface9<br \/>\nefface9, \u2200 , \u2200 , \u2190 , stop<\/p><\/blockquote>\n<\/details>\n<h1>D\u00e9placer un entier naturel vers la gauche<\/h1>\n<p>M\u00eame si les possibilit\u00e9s de mise en forme sont tr\u00e8s limit\u00e9es sur notre bande, la pr\u00e9sentation compte ! Souvent, apr\u00e8s une s\u00e9rie de conversions, on doit d\u00e9placer le r\u00e9sultat, un entier naturel, vers une nouvelle position, en g\u00e9n\u00e9ral imm\u00e9diatement \u00e0 droite d&rsquo;un signe =. Pour corser la difficult\u00e9, nous posons qu&rsquo;il peut y avoir <em>n&rsquo;importe quoi <\/em>entre le nombre et le signe <em>=, y compris des chiffres qui ne font pas partie du nombre \u00e0 transf\u00e9rer. <\/em>Lors du d\u00e9placement, tous les signes pr\u00e9sents entre le nombre et le signe = doivent \u00eatre effac\u00e9s (c-\u00e0-d remplac\u00e9s par un blanc). La machine doit s&rsquo;arr\u00eater sur le signe =. Ici, le symbole \u2200 sera d&rsquo;une grande utilit\u00e9. Au d\u00e9part, la t\u00eate doit \u00eatre positionn\u00e9e sur le premier chiffre formant ce nombre \u00e0 d\u00e9placer (donc le chiffre de gauche). \u00c0 la fin, elle doit \u00eatre positionn\u00e9e sur le signe \u00ab\u00a0=\u00a0\u00bb.<\/p>\n<p>Exemple: situation de d\u00e9part : =\u2610 1 2 3 x y z t 5 8 4\u2610 \u2610 \u2610 (<em>t\u00eate positionn\u00e9e sur le 5 : d\u00e9placer 584)<\/em><\/p>\n<p>Situation d&rsquo;arriv\u00e9e: =584\u2610 \u2610 \u2610 \u2610 \u2610 \u2610 \u2610 \u2610 \u2610 \u2610 \u2610<\/p>\n<p>Bien \u00e9videmment, la machine ne doit pas se \u00ab\u00a0planter\u00a0\u00bb si le nombre est d\u00e9j\u00e0 correctement positionn\u00e9 \u00e0 la suite du signe =. Et si vous utilisez ma technique du X et Y d\u00e9crite ci-dessous, elle ne doit pas planter non plus s&rsquo;il n&rsquo;y a qu&rsquo;une seule case entre le = et le premier chiffre.<\/p>\n<p>La collection est C={toute la collection de signes d\u00e9finis sur Actilud}.<\/p>\n<p>Ici, il va falloir <em>m\u00e9moriser<\/em> les chiffres que l&rsquo;on d\u00e9place. Avec la machine de Turing, la seule possibilit\u00e9 de m\u00e9moriser une information est d&rsquo;utiliser un \u00e9tat <em>pour chaque information \u00e0 m\u00e9moriser<\/em>.Il faudra cr\u00e9er autant d&rsquo;\u00e9tats qu&rsquo;il y a de signes \u00e0 transporter, soit 10, en plus des autres \u00e9tats.<\/p>\n<p>Bien s\u00fbr il y a plusieurs fa\u00e7ons de r\u00e9aliser le programme.\u00a0 Programmer certains \u00e9tats est assez r\u00e9p\u00e9titif; alors, pour \u00e9conomiser le nombre d&rsquo;\u00e9tats \u00e0 programmer, mon id\u00e9e a \u00e9t\u00e9 la suivante. Tout d&rsquo;abord, on nettoie bien la bande entre le signe = et le premier chiffre. On d\u00e9limite l&rsquo;espace entre le = et le premier chiffre par deux lettres, X et Y. Le segment [X,Y] se d\u00e9place au fur et \u00e0 mesure que l&rsquo;on d\u00e9place un chiffre \u00e0 la suite de ceux d\u00e9j\u00e0 plac\u00e9s \u00e0 droite de =. La lettre Y permet de tester la fin du programme : s&rsquo;il n&rsquo;y a plus de chiffre \u00e0 droite du Y c&rsquo;est termin\u00e9.\u00a0 X marque l&#8217;emplacement de la case dans laquelle il faut d\u00e9poser un chiffre. Si on n&rsquo;utilise pas cette astuce, il faut cr\u00e9er 10 \u00e9tats suppl\u00e9mentaires rien que pour d\u00e9poser un chiffre \u00e0 droite du signe = ! (notez qu&rsquo;au lieu d&rsquo;utiliser X et Y, on aurait pu utiliser uniquement X).<\/p>\n<details>\n<summary>Voici le listing (spoiler)<\/summary>\n<blockquote><p>Machine : [D\u00e9placeNombreVersEgalGauche]<br \/>\n# D\u00e9but : sur le chiffre le plus \u00e0 gauche du nombre \u00e0 transf\u00e9rer<br \/>\n# Fin : sur le signe =<\/p>\n<p>\u00c9tat\u00a0: initialiser<br \/>\n# Quitter le chiffre point\u00e9 pour pr\u00e9parer la bande<br \/>\ninitialiser, \u2200 , \u2200 , \u2190 , remplir blancs<\/p>\n<p>\u00c9tat\u00a0: remplir blancs<br \/>\n# Remplir les cases \u00e0 gauche de blanc jusqu&rsquo;au signe =<br \/>\nremplir blancs, &lsquo;=&rsquo; , &lsquo;=&rsquo; , \u2192 , poser X<br \/>\nremplir blancs, \u2200 , \u2610 , \u2190 , remplir blancs<\/p>\n<p>\u00c9tat\u00a0: poser X<br \/>\n# Apr\u00e8s avoir trouv\u00e9 le = ou d\u00e9pos\u00e9 un chiffre, pose un x et part \u00e0 la recherche du Y ou d&rsquo;un chiffre.<br \/>\nposer X, \u2610 , X , \u2192 , chercher Y<br \/>\nposer X, Y , X , \u2192 , prendreNombre<br \/>\nposer X, \u2200 , \u2200 , \u2190 , retour sur \u00e9gal<\/p>\n<p>\u00c9tat\u00a0: prendreNombre<br \/>\n# Si un chiffre est trouv\u00e9, entre dans l&rsquo;\u00e9tat de d\u00e9placement qui lui correspond. Sinon, retour sur \u00e9gal et stop.<br \/>\nprendreNombre, 0 , Y , \u2190 , d\u00e9place0<br \/>\nprendreNombre, 1 , Y , \u2190 , d\u00e9place1<br \/>\nprendreNombre, 2 , Y , \u2190 , d\u00e9place2<br \/>\nprendreNombre, 3 , Y , \u2190 , d\u00e9place3<br \/>\nprendreNombre, 4 , Y , \u2190 , d\u00e9place4<br \/>\nprendreNombre, 5 , Y , \u2190 , d\u00e9place5<br \/>\nprendreNombre, 6 , Y , \u2190 , d\u00e9place6<br \/>\nprendreNombre, 7 , Y , \u2190 , d\u00e9place7<br \/>\nprendreNombre, 8 , Y , \u2190 , d\u00e9place8<br \/>\nprendreNombre, 9 , Y , \u2190 , d\u00e9place9<br \/>\nprendreNombre, \u2200 , \u2200 , \u2190 , retour sur \u00e9gal<\/p>\n<p>\u00c9tat\u00a0: chercher Y<br \/>\n# Cherche le Y pr\u00e9c\u00e9demment plac\u00e9 sur la bande. Si on trouve un chiffre \u00e0 la place du Y, se placer dans l&rsquo;\u00e9tat prendre Nombre sans bouger. Si on trouve le Y, le supprimer, aller \u00e0 droite et aller \u00e0 l&rsquo;\u00e9tat prendre Nombre.<br \/>\nchercher Y, \u2610 , \u2610 , \u2192 , chercher Y<br \/>\nchercher Y, Y , \u2610 , \u2192 , prendreNombre<br \/>\nchercher Y, 0 , 0 , prendreNombre<br \/>\nchercher Y, 1 , 1 , prendreNombre<br \/>\nchercher Y, 2 , 2 , prendreNombre<br \/>\nchercher Y, 3 , 3 , prendreNombre<br \/>\nchercher Y, 4 , 4 , prendreNombre<br \/>\nchercher Y, 5 , 5 , prendreNombre<br \/>\nchercher Y, 6 , 6 , prendreNombre<br \/>\nchercher Y, 7 , 7 , prendreNombre<br \/>\nchercher Y, 8 , 8 , prendreNombre<br \/>\nchercher Y, 9 , 9 , prendreNombre<\/p>\n<p>\u00c9tat\u00a0: retour sur \u00e9gal<br \/>\nretour sur \u00e9gal, \u2610 , \u2610 , \u2190 , retour sur \u00e9gal<br \/>\nretour sur \u00e9gal, X , \u2610 , \u2190 , retour sur \u00e9gal<br \/>\nretour sur \u00e9gal, &lsquo;=&rsquo; , &lsquo;=&rsquo; , stop<br \/>\nretour sur \u00e9gal, 0 , 0 , \u2190 , retour sur \u00e9gal<br \/>\nretour sur \u00e9gal, 1 , 1 , \u2190 , retour sur \u00e9gal<br \/>\nretour sur \u00e9gal, 2 , 2 , \u2190 , retour sur \u00e9gal<br \/>\nretour sur \u00e9gal, 3 , 3 , \u2190 , retour sur \u00e9gal<br \/>\nretour sur \u00e9gal, 4 , 4 , \u2190 , retour sur \u00e9gal<br \/>\nretour sur \u00e9gal, 5 , 5 , \u2190 , retour sur \u00e9gal<br \/>\nretour sur \u00e9gal, 6 , 6 , \u2190 , retour sur \u00e9gal<br \/>\nretour sur \u00e9gal, 7 , 7 , \u2190 , retour sur \u00e9gal<br \/>\nretour sur \u00e9gal, 8 , 8 , \u2190 , retour sur \u00e9gal<br \/>\nretour sur \u00e9gal, 9 , 9 , \u2190 , retour sur \u00e9gal<\/p>\n<p>\u00c9tat\u00a0: d\u00e9place0<br \/>\nd\u00e9place0, \u2610 , \u2610 , \u2190 , d\u00e9place0<br \/>\nd\u00e9place0, X , 0 , \u2192 , poser X<\/p>\n<p>\u00c9tat\u00a0: d\u00e9place1<br \/>\nd\u00e9place1, \u2610 , \u2610 , \u2190 , d\u00e9place1<br \/>\nd\u00e9place1, X , 1 , \u2192 , poser X<\/p>\n<p>\u00c9tat\u00a0: d\u00e9place2<br \/>\nd\u00e9place2, \u2610 , \u2610 , \u2190 , d\u00e9place2<br \/>\nd\u00e9place2, X , 2 , \u2192 , poser X<\/p>\n<p>\u00c9tat\u00a0: d\u00e9place3<br \/>\nd\u00e9place3, \u2610 , \u2610 , \u2190 , d\u00e9place3<br \/>\nd\u00e9place3, X , 3 , \u2192 , poser X<\/p>\n<p>\u00c9tat\u00a0: d\u00e9place4<br \/>\nd\u00e9place4, \u2610 , \u2610 , \u2190 , d\u00e9place4<br \/>\nd\u00e9place4, X , 4 , \u2192 , poser X<\/p>\n<p>\u00c9tat\u00a0: d\u00e9place5<br \/>\nd\u00e9place5, \u2610 , \u2610 , \u2190 , d\u00e9place5<br \/>\nd\u00e9place5, X , 5 , \u2192 , poser X<\/p>\n<p>\u00c9tat\u00a0: d\u00e9place6<br \/>\nd\u00e9place6, \u2610 , \u2610 , \u2190 , d\u00e9place6<br \/>\nd\u00e9place6, X , 6 , \u2192 , poser X<\/p>\n<p>\u00c9tat\u00a0: d\u00e9place7<br \/>\nd\u00e9place7, \u2610 , \u2610 , \u2190 , d\u00e9place7<br \/>\nd\u00e9place7, X , 7 , \u2192 , poser X<\/p>\n<p>\u00c9tat\u00a0: d\u00e9place8<br \/>\nd\u00e9place8, \u2610 , \u2610 , \u2190 , d\u00e9place8<br \/>\nd\u00e9place8, X , 8 , \u2192 , poser X<\/p>\n<p>\u00c9tat\u00a0: d\u00e9place9<br \/>\nd\u00e9place9, \u2610 , \u2610 , \u2190 , d\u00e9place9<br \/>\nd\u00e9place9, X , 9 , \u2192 , poser X<\/p>\n<p>&nbsp;<\/p><\/blockquote>\n<\/details>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Addition des b\u00e2tons L&rsquo;arithm\u00e9tique des b\u00e2tons est sans doute la plus facile \u00e0 mettre en \u0153uvre avec une machine de Turing. La collection \u00e0 utiliser est C={ \u2610, |, X, =, +}. On \u00e9crit sur la bande une addition avec des b\u00e2tons, comme par exemple: ||||+||= Le r\u00e9sultat doit \u00eatre de la forme : ||||+||=|||||| [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[15],"tags":[],"class_list":["post-1922","post","type-post","status-publish","format-standard","hentry","category-machine-de-turing-les-defis"],"_links":{"self":[{"href":"https:\/\/actilud.com\/info\/wp-json\/wp\/v2\/posts\/1922","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/actilud.com\/info\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/actilud.com\/info\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/actilud.com\/info\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/actilud.com\/info\/wp-json\/wp\/v2\/comments?post=1922"}],"version-history":[{"count":23,"href":"https:\/\/actilud.com\/info\/wp-json\/wp\/v2\/posts\/1922\/revisions"}],"predecessor-version":[{"id":2750,"href":"https:\/\/actilud.com\/info\/wp-json\/wp\/v2\/posts\/1922\/revisions\/2750"}],"wp:attachment":[{"href":"https:\/\/actilud.com\/info\/wp-json\/wp\/v2\/media?parent=1922"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/actilud.com\/info\/wp-json\/wp\/v2\/categories?post=1922"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/actilud.com\/info\/wp-json\/wp\/v2\/tags?post=1922"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}