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 : /
.128013.8212.8194goxVid)Ml7hé3m/z8?ZReNy-%Tè0.9CHkbFsP,Sn1àA(_uEjKpwcL54Ov q2B D;tG=af6:rU050i0x0?0_0h0l0M0,0$0l0_0M0M0^010?0h0!010406050M0W0q0q0_0}0z040P0e0l0W1f0e0Q0,020_0q0!0=0,0w0x1p0}0-0W0x0M050r1m1o1q1s1k0!04051X1Q1!0r1X1k0i0h0+17191b1d0n0h0d0n0l1=0n0?1i05120K0l0x1-1a1c011;1?1^1?0?1~201|0?0}1Y0?0n221/010`140x0Q1D0x01171v0M0!0_0Q1d0.1|2v2x2j242m202p0q2r040a0,0N0}0e0!0e0M0h1y1A102t0}0}0x0$2V1Q2C0Q1Y0r2h2+2e2g2f1}0i2E1d1^0Q2o2S1|1*1,18232^0h2`0Q0e2~1|0!2!1Y2)2+3c1l2w1A302k350}1p0l1i0,0R2(3g1j3f2D3i243k3m3o0.3r2x3t2)2@013y0_3n040,0p3C2*1k3F3w1d3I3K0,0)3O3E3g3G3U3o0(3Y3Q3!3S3H0e3l3J3o0{3)3u3h1.3x3.3z3L0m3?3R3_3T3{3:3L0t3 3+413-3/3V0G473v493$040R0E4e3^314a3|0R3q1R3s3*4f4n4h0R3B4s3D4u4m3j433K0R3N4A3P3@3#4F1i0R3X4J3Z4v4E4b4O3(4R4C4M4V4i3=4Y4L3,4x3~4(404w4N4i464-484/4#0R4d4?4T3`4#0.4k4R1#3a1Q2~2.0i2g2?3,0$362K0 1+1Y390x3b3s3Y055c105k4}1d0$0R1i031H0o0d190d1O0,332U0h0_0W0f4l3#1i5J4R0,4)490e1i0^3Y5P4.2k0q0h1i0.4=3c4Z4*1i0z5V5Q4n5S045U5O5.5Y5!04515(5@3x1i0e5-5X245:5=3c5W4@3j1i0@0T0~0H0I0X5K5*040Q0K0V110_0!1O6168635T6r5r015Z1i0(0E5{4t065)495t5v0,0P0h0q0W192V0,0i000W2`0,0o126p6h490J1i100`5m621d0#3o6)6s3T0`1i6n6Y526*011h040U6.6w0Q5M6~4D246{0O6v733T5+723G75775L04606^6/6`1i0j0|3)0,7p676w6#040h6(5?6_70045c6N0x0W0}0V0?0W2n7b3,6{6}7i6 717O787k04767x7j7z5,7R7c7l7e3,64653s7r7S7z0/0%0T0y0H7K496{7n4Y7q7|7,7f7h665}1d647%4g6$2P2U0x7@4n7M8b697g8e747$7{7q82017t0x158a7!7L1i7`5(7}8l7y5 855/6u7W7P040d5H0$0n8r3e6_8d8s868g8P8c8j8w8y7X1i2!0?0e7E2`7G7I208h1d8O8M8X045N8.6w7d8E7-7a8S2k6{0j7o8W8F8;5l8N1i7V818z047Z977j848^7f0_0+2x0$8L937j8-9l918+7T967+8m7Y9q8@9b8F809o7S8}8 7p8m7t8Z8$8B8f923D8m9x9t989a9B7#7U9K5~8R5(6E8m6H045w0%9i21190,2T6M6O0h1z6Z4w1i190Q9j0V9.6N0_2%8{8i6|8~4(0r5o5j53a80r561Q0?58ad2;2,0_1 aa561W5q7S2!0q0V0`0_0J0x0V0n0p1i1I1K1M5C8v5l1%3t1X0%21350q6Q0W6Q2!1b7D0}0,at2U0,0}0o0`0o2!9`210S5P0_0,0n2!0`1:2a0!0M0|0r0r0`0}0F0#0h0J1g0x1*0_0F3.0d0ra~b00r0Ha.0h0M8!0!8K7F9)0Q0d8!7zbc0}bebgbi0,bkbm9=0r0_3L1M0h0,a,330+2o0?0o17115P1J045H8!1p0?219j0l1w190h2!1QbNbD0!6p0lbJ05bN0`8#3lbC2Xbvbnb!0q040F1#aI040k3J0daZ6Q5C0}0D5z5C2e0D169.0!200M0O5D0l9-1Jak0,aDbK2a21b-7E5ZaV5EaS0,8!0W0Yb.162waU2o5B0Q0i2!aU6T21b+b^bPb.8#bSb@3L5c1o21141wbfaZbT0h0A101b8#160U0N1qa+a-a/1da_cU0q1z0Ma}a 6Lb25Gb50}b7b90h0r0L2n0|b=c_0T0Q0?0F0!bl2s1f0?201dd620d82xbw0Q0Mdbdddf0d1i0*bq0d333J0:0|5Pby3L05a,a.0xa:01c?0e1oc_c{b02Jb3d0d2c|0r0~0M0x0}0|0Z0}0#0_0#0e0K2P0i0zdh2Udk01d!d$d(d*d,d.d:d=04d)d+d-d/367Zbz0,bLdIc:dLc=a6dPc^drdSc}dVb6b8dYd`d%0Ld$av3ncwd@0x1deq0|es0}eu1ieCeu1Qbz0c0g2#bS7EdDc/dKdMdOdQejd3dUc end3dZd#d%0*2J8H0L3J0l1zd?djeyd_e$0|e(0xe*e,e.04e^e`bVbxe90b7~3,330?0A0e0#0Q0Ad-eD2s9_0d1da{1i0C0}9g13ch6p0}0M1z2`0l3Y1GbG2$3.be9 9;2W0xdEeceRefc@dReWc~b4eZdYdmfFd9drdtdedgewe:dld7fTdsdcfWdw04f$fVdveI7UeQc;25a=a^a62!fCfyehdRen0!0W1 0h0$0idP130Q0r0sd$0e0r0R0F0Eab0xb20F2oe/d^0Hf`1fbG0,0Hf}dr0,0vgbcf0Ng11^0$0,0;g633gEc~0$fCe|0H0H51bzcffHf=1`0?a?f^fKeVc|eXfOd1b80r33100fde0n0!0u0$7E0h0i0^4H0E0R0(0)0t0.0)1i0%0h2of/a41(1Z1Y6L0dbD0l0?1d0T1xcP1x2r3G9jdcd$2s0M0}0$1d6L0_5B0M0rf,f(0M0+dw0,a~0i2h1d0)0E0BdN2+h7gh12140M04.

La fourmi

Votre tracé sera ici