La fourmi dressée

Dans un cirque, un dresseur est fier de présenter la fourmi la plus intelligente du monde : elle sait écrire !

La fourmi se déplace sur une grille en deux dimensions. Chaque case de la grille est une tuile comportant deux faces : une blanche et une grise Initialement, le tuiles sont placées comme sur la figure ci-dessous :

Grille de départ

À chaque instant, la fourmi se trouve sur une tuile donnée, repérée par ses coordonnées \(x\) (horizontalement) et \(y\) (verticalement), l'origine étant la tuile en haut à gauche. Elle est de plus orientée dans une certaine direction : vers le haut, la droite, le bas ou la gauche.

Initialement, la fourmi est en \(\left(x~;~y\right)=\left(28~;~0\right)\) et regarde vers la gauche.

À chaque étape, la fourmi exécute les actions suivantes :

  • si elle se trouve :
    • sur une tuile blanche, elle pivote sur elle même d'un quart de tour vers la droite ;
    • sur une tuile grise, elle pivote sur elle même d'un quart de tour vers la gauche ;
  • ensuite, elle retourne la tuile sur laquelle elle est placée ;
  • enfin, elle avance d'une tuile.

Le dresseur a bien réfléchi son numéro : si la fourmi exécute \(500\) fois les actions décrites ci-dessus, alors son nom apparaîtra sur le terrain de jeu.

Le monde est un tore !

Le terrain de jeu de la fourmi est très particulier : si elle sort du terrain par un côté, elle rentre immédiatement sur le terrain par le côté d'en face.

Monde toroïdal Pacman

Ce type de terrain ressemble, par certains aspects, à un tore, un solide ayant la forme d'un donut. Beaucoup de « mondes » de jeux vidéos sont toroïdaux !

Vous devez compléter le script ci-dessous qui permet de simuler le numéro. Vous devez donc, dans un premier temps :

  • placer la fourmi sur la bonne case de départ (variables x et y) ;
  • l'orienter correctement (variable o qui doit prendre l'une des valeurs HAUT, DROITE, BAS ou GAUCHE) ;
  • indiquer le bon nombre d'étapes à réaliser (variable nb_etapes) ;

Ces premiers réglages effectués, vous devez compléter la fonction etape. Cette fonction prend trois paramètres x, y et o qui décrivent la position et l'orientation actuelle de la fourmi. Cette fonction simule une étape de déplacement et renvoie les nouvelles valeurs de x, y et o.

Vous devrez utiliser les fonctions décrites dans le tableau ci-dessous :

| Appel de fonction | Paramètres | Rôle | | :-------------------- | :----------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------ | | `#!py o = droite(o)` | L'orientation actuelle de la fourmi `#!py o` | Fait pivoter la fourmi vers la droite et renvoie la nouvelle orientation | | `#!py o = gauche(o)` | L'orientation actuelle de la fourmi `#!py o` | Fait pivoter la fourmi vers la gauche et renvoie la nouvelle orientation | | `#!py c = couleur_tuile(x, y)` | Les coordonnées `#!py x` et `#!py y` de la fourmi | Renvoie la couleur de la tuile sur la quelle se trouve la fourmi (soit `#!py BLANC`, soit `#!py GRIS`) | | `#!py retourne_tuile(x, y)` | Les coordonnées `#!py x` et `#!py y` de la fourmi | Retourne la tuile sur laquelle se trouve la fourmi. Ne renvoie rien | | `#!py x, y, o = avance(x, y, o)` | Les coordonnées et l'orientation actuelle de la fourmi `#!py x`,`#!py y` et `#!py o` | Fait avancer la fourmi d'un pas et renvoie ses nouvelles coordonnées |

L'appel lance_simulation() permet de... lancer la simulation ! Cette ligne ne doit pas être modifiée.

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Alt+: ; Ctrl pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
(Esc)
Tronquer ou non le feedback dans les terminaux (sortie standard & stacktrace / relancer le code pour appliquer)
Si activé, le texte copié dans le terminal est joint sur une seule ligne avant d'être copié dans le presse-papier
Évaluations restantes : 10/10
.8194.8212.128013b?qO,9vià3o_x;GHMjTlwpZf( g06-)2ABs18Ve%né4èEm5tCLRPKhkN:c.a=DryFzSu/7Ud050}0P0Y0.0k0w0L0C0,0w0.0L0L0/010Y0k0y010406050L0_0W0W0.0;0=040^0n0w0_1e0n0R0C020.0W0y0q0C0#0P1o0;0f0_0P0L050`1l1n1p1r1j0y04051W1P1Z0`1W1j0}0k0j16181a1c0(0k0D0(0w1;0(0Y1h05110d0w0P1,191b011:1=1@1=0Y1}1 1{0Y0;1X0Y0(161u0L0y0.0R1c0I01211.010A130P0R1C0P1{2k2m2r232u1 2x0W2z040c0C0$0;0n0y0n0L0k1x1z0 2i0;0;0P0,2U1P2B0R1X0`2g2*2d2f2e1|0}2D1c1@0R2w2R1{1)1+17222@0k2_0R0n2}1{0y2Z1X2(2*3b1k2l1z2 2s340;1o0w1h0C0M2%3f1i3e2C3h233j3l3n0I3q2m3s2(2?013x0.3m040C0m3B2)1j3E3v1c3H3J0C0T3N3D3f3F3T3n0X3X3P3Z3R3G0n3k3I3n0F3(3t3g1-3w3-3y3K0{3=3Q3^3S3`3/3K0N3~3*403,3.3U0i463u483#040M0E4d3@30493{0M3p1Q3r3)4e4m4g0M3A4r3C4t4l3i423J0M3M4z3O3?3!4E1h0M3W4I3Y4u4D4a4N3%4Q4B4L4U4h3;4X4K3+4w3}4%3 4v4M4h454,474.4!0M4c4=4S3_4!0I4j4Q1!391P2}2-0}2f2=3+0,352J0~1*1X380P3a3r3X055b0 5j4|1c0,0M1h031G0S0D180D1N0C322T0k0.0_0p4k3!1h5I4Q0C4(480n1h0/3X5O4-2s0W0k1h0I4;3b4Y4)1h0=5U5P4m5R045T5N5-5X5Z04505%5?3w1h0n5,5W235/5;3b5V4?3i1h0r0J0|0Z0s0V5J5)040R0d0o100.0y1N6067625S6q5q015Y1h0X0E5`4s065(485s5u0C0^0k0W0_182U0C0}02030m0i0q0_2_0C0S116o6g480)1h0 0A5l611c0x3n6,6r3S0A1h6m6#516-011g040B6;6v0R5L714C236~0h6u763S5*753F787a5K045 6{6=6}1h0H0+3(0C7s666v6(040k6+5=6|73045b6M0P0_0;0o0Y0_2v7e3+6~707l72747R7b7n04797A7m7C5+7U7f7o7h3+63643r7u7V7C0K0!0J0*0Z7N486~7q4X7t7 7/7i7k655|1c637*4f6)2O2T0P7`4m7P8e687j8h777)7~7t85017w0P148d7%7O1h7}5%808o7B5~885.6t7Z7S040D5G0,0(8u3d6|8g8v898j8S8f8m8z8B7!1h2Z0Y0n7H2_7J7L1 8k1c8R8P8!045M8;6v7g8H7:7d8V2s6~0H7r8Z8I8@5k8Q1h7Y848C047$9a7m878{7i0.0j2m0,8O967m8:9o948.7W997.8p7#9t8`9e8I839r7V90927s8p7w8$8)8E8i953C8p9A9w9b9d9E7(7X9N5}8U5%6D8p6G045v0!9l20180C2S6L6N0k1y6$4v1h180R9m0o9;6M0.2$8~8l6 914%0`5n5i52ab0`551P0Y57ag2:2+0.1~ad551V5p7V2Z0W0o0A0.0)0P0o0(0m1h1H1J1L5B8y5k1$3s1W0!20340W6P0_6P2Z1a7G0;0Caw2T0C0;0S0A0S2Z9}200l5O0.0C0(2Z0A1/290y0L0+0`0`0A0;0-0x0k0)1f0P1)0.0-3-0D0`b1b30`0Za;0k0L8%0y8N7I9,0R0D8%7Cbf0;bhbjbl0Cbnbp9^0`0.3K1L0k0Ca/320j2w0Y0S16105O1I045G8%1o0Y209m0w1v180k2Z1PbQbG0y6o0wbM05bQ0A8(3kbF2Wbybqb%0W040-1!aL040t3I0Da$6P5B0;0U5y5B2d0U159;0y1 0L0h5C0w9:1Ian0CaGbN2920b:7H5YaY5DaV0C8%0_0ub;152laX2w5A0R0}2ZaX6W20b.b{bSb;8(bVb`3K5b1n20131vbia$bW0k0G0 1a8(150B0$1pa.a:a=1ca|cX0W1y0Lb0b26Kb55Fb80;babc0k0`0?2v0+b^c|0J0R0Y0-0ybo2q1e0Y1 1cd91 db2mbz0R0Ldedgdi0D1h0gbt0D323I026j2k0q0+5ObB3K05a/a;0Pa?01c_0n1nc|c~b32Ib6d3d5c 0`0|0L0P0;0+0%0;0x0.0x0n0d2O0}0=dk2Tdn01d*d,d.d:d=d@d_d{04d/d;d?d^357$bC0CbOdOc?dRc^a9dVc{dudYd0d#b9bbd(e0d-0?d,ay3mczd}0P1cew0+ey0;eA1heIeA1PbC0a0O2!bV7HdG0ddIdKeidQdSdUdWepd6d!d2etd6d)d+d-0g2I8K0?3I0w1yd|dmeEd e/0+e;0Pe?e^e`04f1f3bYbAef0b813+320Y0G0n0x0R0Gd?eJ2q9|0D1ca~1h0v0;9j12ck6o0;0L1y2_0w3X1FbJ2#3-bha29@2V0PeYdPc@dTeme%c}e)d1b7e,d(dpfOdcdudwdhdjeCe|dodaf%dvdff*dz04f:f)dyeO7Xc=e!a@0Y0ya{a92ZfLfHendXet0y0_1~0k0,0}dV120R0`0@d,0n0`0M0-0Eae0Pb50-2we{d~0Zg51ebJ0C0Zg8du0C0zgmci0$gc1@0,0C0:gh32gPd10,fLf50Z0Z50bCcieZfR1_g1a`e$eofVc e*fYd4bb0`320 0pdh0(0y0e0,7H0k0}0/4G0E0M0X0T0N0I0T1h0!0k2wf|a71%1Y1Xa/3+5y1^0Y0d0n0p2qf 016K0.5A0L0`f_f=0L0jdz6Pa20.0G0Y0=6o1chw5A2q0}hHflh12g1ccRhQhS8NhohW1w5RhG11c*1N0,0G2Q2S2U1chq29dV1{6K0DbG0w0Y1c0Jh%7HcT2z3F9mdfd,2q0L0;0,hN1ohyhAdsbqf;dghDhFb10}hV010T0E0Q2q0`2*bCb~1jgs11130L04.

La fourmi

Votre tracé sera ici