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
o = droite(o) L'orientation actuelle de la fourmi o Fait pivoter la fourmi vers la droite et renvoie la nouvelle orientation
o = gauche(o) L'orientation actuelle de la fourmi o Fait pivoter la fourmi vers la gauche et renvoie la nouvelle orientation
c = couleur_tuile(x, y) Les coordonnées x et y de la fourmi Renvoie la couleur de la tuile sur la quelle se trouve la fourmi (soit BLANC, soit GRIS)
retourne_tuile(x, y) Les coordonnées x et y de la fourmi Retourne la tuile sur laquelle se trouve la fourmi. Ne renvoie rien
x, y = avance(x, y, o) Les coordonnées et l'orientation actuelle de la fourmi x,y et 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 : 5/5
.8212.8194.128013,uF?.y57%BCbdsUji0ZLxM/_6à:(ScTR9mnNVoDGethpéAzwPè)kf;12-Erqv=43lKagHO 8050p0R0S0^0t0?0q0|0G0?0^0q0q0:010S0t0U010406050q0e0K0K0^0-0i040F0O0?0e1e0O0L0|020^0K0U0(0|0I0R1o0-0.0e0R0q050z1l1n1p1r1j0U04051W1P1Z0z1W1j0p0t0/16181a1c0T0t0_0T0?1;0T0S1h05110o0?0R1,191b011:1=1@1=0S1}1 1{0S0-1X0S0T161u0q0U0^0L1c0*01211.010%130R0L1C0R1{2k2m2r232u1 2x0K2z040c0|0Z0-0O0U0O0q0t1x1z0 2i0-0-0R0G2U1P2B0L1X0z2g2*2d2f2e1|0p2D1c1@0L2w2R1{1)1+17222@0t2_0L0O2}1{0U2Z1X2(2*3b1k2l1z2 2s340-1o0?1h0|0)2%3f1i3e2C3h233j3l3n0*3q2m3s2(2?013x0^3m040|0=3B2)1j3E3v1c3H3J0|0;3N3D3f3F3T3n0j3X3P3Z3R3G0O3k3I3n0B3(3t3g1-3w3-3y3K0k3=3Q3^3S3`3/3K0}3~3*403,3.3U0J463u483#040)0u4d3@30493{0)3p1Q3r3)4e4m4g0)3A4r3C4t4l3i423J0)3M4z3O3?3!4E1h0)3W4I3Y4u4D4a4N3%4Q4B4L4U4h3;4X4K3+4w3}4%3 4v4M4h454,474.4!0)4c4=4S3_4!0*4j4Q1!391P2}2-0p2f2=3+0G352J0~1*1X380R3a3r3X055b0 5j4|1c0G0)1h031G0V0_180_1N0|322T0t0^0e0x4k3!1h5I4Q0|4(480O1h0:3X5O4-2s0K0t1h0*4;3b4Y4)1h0i5U5P4m5R045T5N5-5X5Z04505%5?3w1h0O5,5W235/5;3b5V4?3i1h0Q0W0r0n0`0,5J5)040L0o0A100^0U1N6067625S6q5q015Y1h0j0u5`4s065(485s5u0|0F0t0K0e182U0|0p02030=0J0(0e2_0|0V116o6g480$1h0 0%5l611c0Y3n6,6r3S0%1h6m6#516-011g040E6;6v0L5L714C236~0d6u763S5*753F787a5K045 6{6=6}1h0#0D3(0|7s666v6(040t6+5=6|73045b6M0R0e0-0A0S0e2v7e3+6~707l72747R7b7n04797A7m7C5+7U7f7o7h3+63643r7u7V7C0m0w0W0M0n7N486~7q4X7t7 7/7i7k655|1c637*4f6)2O2T0R7`4m7P8e687j8h777)7~7t85017w0R148d7%7O1h7}5%808o7B5~885.6t7Z7S040_5G0G0T8u3d6|8g8v898j8S8f8m8z8B7!1h2Z0S0O7H2_7J7L1 8k1c8R8P8!045M8;6v7g8H7:7d8V2s6~0#7r8Z8I8@5k8Q1h7Y848C047$9a7m878{7i0^0/2m0G8O967m8:9o948.7W997.8p7#9t8`9e8I839r7V90927s8p7w8$8)8E8i953C8p9A9w9b9d9E7(7X9N5}8U5%6D8p6G045v0w9l20180|2S6L6N0t1y6$4v1h180L9m0A9;6M0^2$8~8l6 914%0z5n5i52ab0z551P0S57ag2:2+0^1~ad551V5p7V2Z0K0A0%0^0$0R0A0T0=1h1H1J1L5B8y5k1$3s1W0w20340K6P0e6P2Z1a7G0-0|aw2T0|0-0V0%0V2Z9}200C5O0^0|0T2Z0%1/290U0q0D0z0z0%0-0h0Y0t0$1f0R1)0^0h3-0_0zb1b30z0na;0t0q8%0U8N7I9,0L0_8%7Cbf0-bhbjbl0|bnbp9^0z0^3K1L0t0|a/320/2w0S0V16105O1I045G8%1o0S209m0?1v180t2Z1PbQbG0U6o0?bM05bQ0%8(3kbF2Wbybqb%0K040h1!aL040y3I0_a$6P5B0-0!5y5B2d0!159;0U1 0q0d5C0?9:1Ian0|aGbN2920b:7H5YaY5DaV0|8%0e0sb;152laX2w5A0L0p2ZaX6W20b.b{bSb;8(bVb`3K5b1n20131vbia$bW0t0+0 1a8(150E0Z1pa.a:a=1ca|cX0K1y0qb0b26Kb55Fb80-babc0t0z0f2v0Db^c|0W0L0S0h0Ubo2q1e0S1 1cd91 db2mbz0L0qdedgdi0_1h0{bt0_323I026j2k0(0D5ObB3K05a/a;0Ra?01c_0O1nc|c~b32Ib6d3d5c 0z0r0q0R0-0D0@0-0Y0^0Y0O0o2O0p0idk2Tdn01d*d,d.d:d=d@d_d{04d/d;d?d^357$bC0|bOdOc?dRc^a9dVc{dudYd0d#b9bbd(e0d-0fd,ay3mczd}0R1cew0Dey0-eA1heIeA1PbC0b0N2!bV7HdG0odIdKeidQdSdUdWepd6d!d2etd6d)d+d-0{2I8K0f3I0?1yd|dmeEd e/0De;0Re?e^e`04f1f3bYbAef0a813+320S0+0O0Y0L0+d?eJ2q9|0_1ca~1h0H0-9j12ck6o0-0q1y2_0?3X1FbJ2#3-bha29@2V0ReYdPc@dTeme%c}e)d1b7e,d(dpfOdcdudwdhdjeCe|dodaf%dvdff*dz04f:f)dyeO7Xc=e!a@0S0Ua{a92ZfLfHendXet0U0e1~0t0G0pdV120L0z0Xd,0O0z0)0h0uae0Rb50h2we{d~0ng51ebJ0|0ng8du0|0vgmci0Zgc1@0G0|0Pgh32gPd10GfLf50n0n50bCcieZfR1_g1a`e$eofVc e*fYd4bb0z320 0xdh0T0U0g0G7H0t0p0:4G0u0)0j0;0}0*0;1h0w0t2wf|a71%1Y1X6K0_bG0?0S1c0W1wcS1w2z3F9mdfd,2q0q0-0G1c6K0^5A0q0zf_f=0q0/dz0|b10p2g1c0;0u0l2q0z2*higs11130q04.

La fourmi

Votre tracé sera ici