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.128013.81943aw:f; beTCP=)o(zZh5/dRV,sk-Hv9Blpj4L0G2Eicm7KténNFMrA_?qyU.àgSD8x1è% O6u050y0l0X0e0S0J0C0j0T0J0e0C0C0p010X0S0K010406050C0~0U0U0e0%0,040;0r0J0~1f0r0Z0j020e0U0K0i0j0z0l1p0%0+0~0l0C050x1m1o1q1s1k0K04051X1Q1!0x1X1k0y0S0G17191b1d0v0S0:0v0J1=0v0X1i05120k0J0l1-1a1c011;1?1^1?0X1~201|0X0%1Y0X0v221/010h140l0Z1D0l01171v0C0K0e0Z1d0Q1|2v2x2j242m202p0U2r040b0j0o0%0r0K0r0C0S1y1A102t0%0%0l0T2V1Q2C0Z1Y0x2h2+2e2g2f1}0y2E1d1^0Z2o2S1|1*1,18232^0S2`0Z0r2~1|0K2!1Y2)2+3c1l2w1A302k350%1p0J1i0j0^2(3g1j3f2D3i243k3m3o0Q3r2x3t2)2@013y0e3n040j0d3C2*1k3F3w1d3I3K0j0M3O3E3g3G3U3o0w3Y3Q3!3S3H0r3l3J3o0}3)3u3h1.3x3.3z3L0V3?3R3_3T3{3:3L0?3 3+413-3/3V0H473v493$040^0O4e3^314a3|0^3q1R3s3*4f4n4h0^3B4s3D4u4m3j433K0^3N4A3P3@3#4F1i0^3X4J3Z4v4E4b4O3(4R4C4M4V4i3=4Y4L3,4x3~4(404w4N4i464-484/4#0^4d4?4T3`4#0Q4k4R1#3a1Q2~2.0y2g2?3,0T362K0 1+1Y390l3b3s3Y055c105k4}1d0T0^1i031H0Y0:190:1O0j332U0S0e0~0@4l3#1i5J4R0j4)490r1i0p3Y5P4.2k0U0S1i0Q4=3c4Z4*1i0,5V5Q4n5S045U5O5.5Y5!04515(5@3x1i0r5-5X245:5=3c5W4@3j1i0P0(0-0n0F0R5K5*040Z0k0)110e0K1O6168635T6r5r015Z1i0w0O5{4t065)495t5v0j0;0S0U0~192V0j0y000~2`0j0Y126p6h490D1i100h5m621d0f3o6)6s3T0h1i6n6Y526*011h040s6.6w0Z5M6~4D246{0B6v733T5+723G75775L04606^6/6`1i0q0g3)0j7p676w6#040S6(5?6_70045c6N0l0~0%0)0X0~2n7b3,6{6}7i6 717O787k04767x7j7z5,7R7c7l7e3,64653s7r7S7z0I0N0(0!0n7K496{7n4Y7q7|7,7f7h665}1d647%4g6$2P2U0l7@4n7M8b697g8e747$7{7q82017t0l158a7!7L1i7`5(7}8l7y5 855/6u7W7P040:5H0T0v8r3e6_8d8s868g8P8c8j8w8y7X1i2!0X0r7E2`7G7I208h1d8O8M8X045N8.6w7d8E7-7a8S2k6{0q7o8W8F8;5l8N1i7V818z047Z977j848^7f0e0G2x0T8L937j8-9l918+7T967+8m7Y9q8@9b8F809o7S8}8 7p8m7t8Z8$8B8f923D8m9x9t989a9B7#7U9K5~8R5(6E8m6H045w0N9i21190j2T6M6O0S1z6Z4w1i190Z9j0)9.6N0e2%8{8i6|8~4(0x5o5j53a80x561Q0X58ad2;2,0e1 aa561W5q7S2!0U0)0h0e0D0l0)0v0d1i1I1K1M5C8v5l1%3t1X0N21350U6Q0~6Q2!1b7D0%0jat2U0j0%0Y0h0Y2!9`210/5P0e0j0v2!0h1:2a0K0C0g0x0x0h0%0.0f0S0D1g0l1*0e0.3.0:0xa~b00x0na.0S0C8!0K8K7F9)0Z0:8!7zbc0%bebgbi0jbkbm9=0x0e3L1M0S0ja,330G2o0X0Y17115P1J045H8!1p0X219j0J1w190S2!1QbNbD0K6p0JbJ05bN0h8#3lbC2Xbvbnb!0U040.1#aI040$3J0:aZ6Q5C0%0_5z5C2e0_169.0K200C0B5D0J9-1Jak0jaDbK2a21b-7E5ZaV5EaS0j8!0~0Lb.162waU2o5B0Z0y2!aU6T21b+b^bPb.8#bSb@3L5c1o21141wbfaZbT0S0E101b8#160s0o1qa+a-a/1da_cU0U1z0Ca}a 6Lb25Gb50%b7b90S0x0#2n0gb=c_0(0Z0X0.0Kbl2s1f0X201dd620d82xbw0Z0Cdbdddf0:1i0|bq0:333J0{0g5Pby3L05a,a.0la:01c?0r1oc_c{b02Jb3d0d2c|0x0-0C0l0%0g0W0%0f0e0f0r0k2P0y0,dh2Udk01d!d$d(d*d,d.d:d=04d)d+d-d/367Zbz0jbLdIc:dLc=a6dPc^drdSc}dVb6b8dYd`d%0#d$av3ncwd@0l1deq0ges0%eu1ieCeu1Qbz0c0A2#bS7EdDc/dKdMdOdQejd3dUc end3dZd#d%0|2J8H0#3J0J1zd?djeyd_e$0ge(0le*e,e.04e^e`bVbxe90a7~3,330X0E0r0f0Z0Ed-eD2s9_0:1da{1i0m0%9g13ch6p0%0C1z2`0J3Y1GbG2$3.be9 9;2W0ldEeceRefc@dReWc~b4eZdYdmfFd9drdtdedgewe:dld7fTdsdcfWdw04f$fVdveI7UeQc;25a=a^a62!fCfyehdRen0K0~1 0S0T0ydP130Z0x0td$0r0x0^0.0Oab0lb20.2oe/d^0nf`1fbG0j0nf}dr0j0ugbcf0og11^0T0j0=g633gEc~0TfCe|0n0n51bzcffHf=1`0Xa?f^fKeVc|eXfOd1b80x33100@de0v0K0*0T7E0S0y0p4H0O0^0w0M0?0Q0M1i0N0S2of/a41(1Z1Y6L0:bD0J0X1d0(1xcP1x2r3G9jdcd$2s0C0%0T1d6L0e5B0C0xf,f(0C0Gdw0ja~0y2h1d0M0O0`dN2+h7gh12140C04.

La fourmi

Votre tracé sera ici