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.8194àv/.B,Lai=K0Fq_9U61SpPhnRHèk m)?w-T7: yoA5eOtCz8MxfEVrGc;d2DN43Zg(bséju%l050,0T0V0k0l0~0_0F0*0~0k0_0_0m010V0l0x010406050_0|0G0G0k0(0P040w0Q0~0|1f0Q0A0F020k0G0x0+0F0B0T1p0(0q0|0T0_050f1m1o1q1s1k0x04051X1Q1!0f1X1k0,0l0e17191b1d0z0l0?0z0~1=0z0V1i05120^0~0T1-1a1c011;1?1^1?0V1~201|0V0(1Y0V0z221/010#140T0A1D0T01171v0_0x0k0A1d0-1|2v2x2j242m202p0G2r040b0F0y0(0Q0x0Q0_0l1y1A102t0(0(0T0*2V1Q2C0A1Y0f2h2+2e2g2f1}0,2E1d1^0A2o2S1|1*1,18232^0l2`0A0Q2~1|0x2!1Y2)2+3c1l2w1A302k350(1p0~1i0F0v2(3g1j3f2D3i243k3m3o0-3r2x3t2)2@013y0k3n040F0;3C2*1k3F3w1d3I3K0F0:3O3E3g3G3U3o0S3Y3Q3!3S3H0Q3l3J3o0u3)3u3h1.3x3.3z3L0M3?3R3_3T3{3:3L0Y3 3+413-3/3V0s473v493$040v0o4e3^314a3|0v3q1R3s3*4f4n4h0v3B4s3D4u4m3j433K0v3N4A3P3@3#4F1i0v3X4J3Z4v4E4b4O3(4R4C4M4V4i3=4Y4L3,4x3~4(404w4N4i464-484/4#0v4d4?4T3`4#0-4k4R1#3a1Q2~2.0,2g2?3,0*362K0 1+1Y390T3b3s3Y055c105k4}1d0*0v1i031H0`0?190?1O0F332U0l0k0|0!4l3#1i5J4R0F4)490Q1i0m3Y5P4.2k0G0l1i0-4=3c4Z4*1i0P5V5Q4n5S045U5O5.5Y5!04515(5@3x1i0Q5-5X245:5=3c5W4@3j1i0)0R0t0W0C0$5K5*040A0^0r110k0x1O6168635T6r5r015Z1i0S0o5{4t065)495t5v0F0w0l0G0|192V0F0,000|2`0F0`126p6h490E1i100#5m621d0J3o6)6s3T0#1i6n6Y526*011h040@6.6w0A5M6~4D246{0i6v733T5+723G75775L04606^6/6`1i0H0N3)0F7p676w6#040l6(5?6_70045c6N0T0|0(0r0V0|2n7b3,6{6}7i6 717O787k04767x7j7z5,7R7c7l7e3,64653s7r7S7z0h0j0R0/0W7K496{7n4Y7q7|7,7f7h665}1d647%4g6$2P2U0T7@4n7M8b697g8e747$7{7q82017t0T158a7!7L1i7`5(7}8l7y5 855/6u7W7P040?5H0*0z8r3e6_8d8s868g8P8c8j8w8y7X1i2!0V0Q7E2`7G7I208h1d8O8M8X045N8.6w7d8E7-7a8S2k6{0H7o8W8F8;5l8N1i7V818z047Z977j848^7f0k0e2x0*8L937j8-9l918+7T967+8m7Y9q8@9b8F809o7S8}8 7p8m7t8Z8$8B8f923D8m9x9t989a9B7#7U9K5~8R5(6E8m6H045w0j9i21190F2T6M6O0l1z6Z4w1i190A9j0r9.6N0k2%8{8i6|8~4(0f5o5j53a80f561Q0V58ad2;2,0k1 aa561W5q7S2!0G0r0#0k0E0T0r0z0;1i1I1K1M5C8v5l1%3t1X0j21350G6Q0|6Q2!1b7D0(0Fat2U0F0(0`0#0`2!9`210d5P0k0F0z2!0#1:2a0x0_0N0f0f0#0(0g0J0l0E1g0T1*0k0g3.0?0fa~b00f0Wa.0l0_8!0x8K7F9)0A0?8!7zbc0(bebgbi0Fbkbm9=0f0k3L1M0l0Fa,330e2o0V0`17115P1J045H8!1p0V219j0~1w190l2!1QbNbD0x6p0~bJ05bN0#8#3lbC2Xbvbnb!0G040g1#aI040Z3J0?aZ6Q5C0(0D5z5C2e0D169.0x200_0i5D0~9-1Jak0FaDbK2a21b-7E5ZaV5EaS0F8!0|0{b.162waU2o5B0A0,2!aU6T21b+b^bPb.8#bSb@3L5c1o21141wbfaZbT0l0K101b8#160@0y1qa+a-a/1da_cU0G1z0_a}a 6Lb25Gb50(b7b90l0f0p2n0Nb=c_0R0A0V0g0xbl2s1f0V201dd620d82xbw0A0_dbdddf0?1i0Ubq0?333J0O0N5Pby3L05a,a.0Ta:01c?0Q1oc_c{b02Jb3d0d2c|0f0t0_0T0(0N0n0(0J0k0J0Q0^2P0,0Pdh2Udk01d!d$d(d*d,d.d:d=04d)d+d-d/367Zbz0FbLdIc:dLc=a6dPc^drdSc}dVb6b8dYd`d%0pd$av3ncwd@0T1deq0Nes0(eu1ieCeu1Qbz0c0%2#bS7EdDc/dKdMdOdQejd3dUc end3dZd#d%0U2J8H0p3J0~1zd?djeyd_e$0Ne(0Te*e,e.04e^e`bVbxe90a7~3,330V0K0Q0J0A0Kd-eD2s9_0?1da{1i0L0(9g13ch6p0(0_1z2`0~3Y1GbG2$3.be9 9;2W0TdEeceRefc@dReWc~b4eZdYdmfFd9drdtdedgewe:dld7fTdsdcfWdw04f$fVdveI7UeQc;25a=a^a62!fCfyehdRen0x0|1 0l0*0,dP130A0f0Xd$0Q0f0v0g0oab0Tb20g2oe/d^0Wf`1fbG0F0Wf}dr0F0=gbcf0yg11^0*0F0.g633gEc~0*fCe|0W0W51bzcffHf=1`0Va?f^fKeVc|eXfOd1b80f33100!de0z0x0I0*7E0l0,0m4H0o0v0S0:0Y0-0:1i0j0l2of/a41(1Z1Y6L0?bD0~0V1d0R1xcP1x2r3G9jdcd$2s0_0(0*1d6L0k5B0_0ff,f(0_0edw0Fa~0,2h1d0:0o0}dN2+h7gh12140_04.

La fourmi

Votre tracé sera ici