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
.128013.8212.8194kcL2=Uo V-SfC6ni.3AbB4a7M0z?,rjgE(dPN)mt1lsDvTZF5H9Gqy%_eKphx Rà;w/Ou8éè:050L0+0Q0z0s0S0T0:0e0S0z0T0T0h010Q0s0-010406050T0`0P0P0z0G0(040n0j0S0`1f0j0r0:020z0P0-0?0:0;0+1p0G0%0`0+0T050^1m1o1q1s1k0-04051X1Q1!0^1X1k0L0s0V17191b1d0.0s0I0.0S1=0.0Q1i05120w0S0+1-1a1c011;1?1^1?0Q1~201|0Q0G1Y0Q0.221/010o140+0r1D0+01171v0T0-0z0r1d0g1|2v2x2j242m202p0P2r040a0:0M0G0j0-0j0T0s1y1A102t0G0G0+0e2V1Q2C0r1Y0^2h2+2e2g2f1}0L2E1d1^0r2o2S1|1*1,18232^0s2`0r0j2~1|0-2!1Y2)2+3c1l2w1A302k350G1p0S1i0:0R2(3g1j3f2D3i243k3m3o0g3r2x3t2)2@013y0z3n040:0u3C2*1k3F3w1d3I3K0:0y3O3E3g3G3U3o0Z3Y3Q3!3S3H0j3l3J3o0q3)3u3h1.3x3.3z3L0A3?3R3_3T3{3:3L0{3 3+413-3/3V0#473v493$040R0C4e3^314a3|0R3q1R3s3*4f4n4h0R3B4s3D4u4m3j433K0R3N4A3P3@3#4F1i0R3X4J3Z4v4E4b4O3(4R4C4M4V4i3=4Y4L3,4x3~4(404w4N4i464-484/4#0R4d4?4T3`4#0g4k4R1#3a1Q2~2.0L2g2?3,0e362K0 1+1Y390+3b3s3Y055c105k4}1d0e0R1i031H0|0I190I1O0:332U0s0z0`0/4l3#1i5J4R0:4)490j1i0h3Y5P4.2k0P0s1i0g4=3c4Z4*1i0(5V5Q4n5S045U5O5.5Y5!04515(5@3x1i0j5-5X245:5=3c5W4@3j1i0$0v0i0p0!0J5K5*040r0w0*110z0-1O6168635T6r5r015Z1i0Z0C5{4t065)495t5v0:0n0s0P0`192V0:0L000`2`0:0|126p6h490d1i100o5m621d0@3o6)6s3T0o1i6n6Y526*011h040K6.6w0r5M6~4D246{0F6v733T5+723G75775L04606^6/6`1i0O0~3)0:7p676w6#040s6(5?6_70045c6N0+0`0G0*0Q0`2n7b3,6{6}7i6 717O787k04767x7j7z5,7R7c7l7e3,64653s7r7S7z0x0f0v0N0p7K496{7n4Y7q7|7,7f7h665}1d647%4g6$2P2U0+7@4n7M8b697g8e747$7{7q82017t0+158a7!7L1i7`5(7}8l7y5 855/6u7W7P040I5H0e0.8r3e6_8d8s868g8P8c8j8w8y7X1i2!0Q0j7E2`7G7I208h1d8O8M8X045N8.6w7d8E7-7a8S2k6{0O7o8W8F8;5l8N1i7V818z047Z977j848^7f0z0V2x0e8L937j8-9l918+7T967+8m7Y9q8@9b8F809o7S8}8 7p8m7t8Z8$8B8f923D8m9x9t989a9B7#7U9K5~8R5(6E8m6H045w0f9i21190:2T6M6O0s1z6Z4w1i190r9j0*9.6N0z2%8{8i6|8~4(0^5o5j53a80^561Q0Q58ad2;2,0z1 aa561W5q7S2!0P0*0o0z0d0+0*0.0u1i1I1K1M5C8v5l1%3t1X0f21350P6Q0`6Q2!1b7D0G0:at2U0:0G0|0o0|2!9`210=5P0z0:0.2!0o1:2a0-0T0~0^0^0o0G0t0@0s0d1g0+1*0z0t3.0I0^a~b00^0pa.0s0T8!0-8K7F9)0r0I8!7zbc0Gbebgbi0:bkbm9=0^0z3L1M0s0:a,330V2o0Q0|17115P1J045H8!1p0Q219j0S1w190s2!1QbNbD0-6p0SbJ05bN0o8#3lbC2Xbvbnb!0P040t1#aI040B3J0IaZ6Q5C0G0}5z5C2e0}169.0-200T0F5D0S9-1Jak0:aDbK2a21b-7E5ZaV5EaS0:8!0`0Hb.162waU2o5B0r0L2!aU6T21b+b^bPb.8#bSb@3L5c1o21141wbfaZbT0s0m101b8#160K0M1qa+a-a/1da_cU0P1z0Ta}a 6Lb25Gb50Gb7b90s0^0Y2n0~b=c_0v0r0Q0t0-bl2s1f0Q201dd620d82xbw0r0Tdbdddf0I1i0_bq0I333J0k0~5Pby3L05a,a.0+a:01c?0j1oc_c{b02Jb3d0d2c|0^0i0T0+0G0~0,0G0@0z0@0j0w2P0L0(dh2Udk01d!d$d(d*d,d.d:d=04d)d+d-d/367Zbz0:bLdIc:dLc=a6dPc^drdSc}dVb6b8dYd`d%0Yd$av3ncwd@0+1deq0~es0Geu1ieCeu1Qbz0c0l2#bS7EdDc/dKdMdOdQejd3dUc end3dZd#d%0_2J8H0Y3J0S1zd?djeyd_e$0~e(0+e*e,e.04e^e`bVbxe90b7~3,330Q0m0j0@0r0md-eD2s9_0I1da{1i0W0G9g13ch6p0G0T1z2`0S3Y1GbG2$3.be9 9;2W0+dEeceRefc@dReWc~b4eZdYdmfFd9drdtdedgewe:dld7fTdsdcfWdw04f$fVdveI7UeQc;25a=a^a62!fCfyehdRen0-0`1 0s0e0LdP130r0^0Dd$0j0^0R0t0Cab0+b20t2oe/d^0pf`1fbG0:0pf}dr0:0Xgbcf0Mg11^0e0:0Ug633gEc~0efCe|0p0p51bzcffHf=1`0Qa?f^fKeVc|eXfOd1b80^33100/de0.0-0E0e7E0s0L0h4H0C0R0Z0y0{0g0y1i0f0s2of/a41(1Z1Y6L0IbD0S0Q1d0v1xcP1x2r3G9jdcd$2s0T0G0e1d6L0z5B0T0^f,f(0T0Vdw0:a~0L2h1d0y0C0)dN2+h7gh12140T04.

La fourmi

Votre tracé sera ici