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.8194.8212a PD7wtk;FqNz8dOK3ZpH92)51x4%6lE(gCAGèLRbs0yn.M,r TmBSàh?é=c/u:-VfUo_ivej050r0}0j0d0{0H0S0!0.0H0d0S0S0-010j0{0w010406050S0:0$0$0d0Z0U040(0_0H0:1f0_0V0!020d0$0w0l0!0Q0}1p0Z0n0:0}0S050/1m1o1q1s1k0w04051X1Q1!0/1X1k0r0{0|17191b1d0*0{0K0*0H1=0*0j1i05120R0H0}1-1a1c011;1?1^1?0j1~201|0j0Z1Y0j0*221/010@140}0V1D0}01171v0S0w0d0V1d0z1|2v2x2j242m202p0$2r040a0!0f0Z0_0w0_0S0{1y1A102t0Z0Z0}0.2V1Q2C0V1Y0/2h2+2e2g2f1}0r2E1d1^0V2o2S1|1*1,18232^0{2`0V0_2~1|0w2!1Y2)2+3c1l2w1A302k350Z1p0H1i0!0C2(3g1j3f2D3i243k3m3o0z3r2x3t2)2@013y0d3n040!0u3C2*1k3F3w1d3I3K0!0E3O3E3g3G3U3o0B3Y3Q3!3S3H0_3l3J3o0G3)3u3h1.3x3.3z3L0h3?3R3_3T3{3:3L0q3 3+413-3/3V0y473v493$040C0T4e3^314a3|0C3q1R3s3*4f4n4h0C3B4s3D4u4m3j433K0C3N4A3P3@3#4F1i0C3X4J3Z4v4E4b4O3(4R4C4M4V4i3=4Y4L3,4x3~4(404w4N4i464-484/4#0C4d4?4T3`4#0z4k4R1#3a1Q2~2.0r2g2?3,0.362K0 1+1Y390}3b3s3Y055c105k4}1d0.0C1i031H0,0K190K1O0!332U0{0d0:0D4l3#1i5J4R0!4)490_1i0-3Y5P4.2k0$0{1i0z4=3c4Z4*1i0U5V5Q4n5S045U5O5.5Y5!04515(5@3x1i0_5-5X245:5=3c5W4@3j1i0N0M0^0L0x0I5K5*040V0R0`110d0w1O6168635T6r5r015Z1i0B0T5{4t065)495t5v0!0(0{0$0:192V0!0r000:2`0!0,126p6h490k1i100@5m621d0i3o6)6s3T0@1i6n6Y526*011h040J6.6w0V5M6~4D246{0Y6v733T5+723G75775L04606^6/6`1i0A0;3)0!7p676w6#040{6(5?6_70045c6N0}0:0Z0`0j0:2n7b3,6{6}7i6 717O787k04767x7j7z5,7R7c7l7e3,64653s7r7S7z0%0P0M0o0L7K496{7n4Y7q7|7,7f7h665}1d647%4g6$2P2U0}7@4n7M8b697g8e747$7{7q82017t0}158a7!7L1i7`5(7}8l7y5 855/6u7W7P040K5H0.0*8r3e6_8d8s868g8P8c8j8w8y7X1i2!0j0_7E2`7G7I208h1d8O8M8X045N8.6w7d8E7-7a8S2k6{0A7o8W8F8;5l8N1i7V818z047Z977j848^7f0d0|2x0.8L937j8-9l918+7T967+8m7Y9q8@9b8F809o7S8}8 7p8m7t8Z8$8B8f923D8m9x9t989a9B7#7U9K5~8R5(6E8m6H045w0P9i21190!2T6M6O0{1z6Z4w1i190V9j0`9.6N0d2%8{8i6|8~4(0/5o5j53a80/561Q0j58ad2;2,0d1 aa561W5q7S2!0$0`0@0d0k0}0`0*0u1i1I1K1M5C8v5l1%3t1X0P21350$6Q0:6Q2!1b7D0Z0!at2U0!0Z0,0@0,2!9`210)5P0d0!0*2!0@1:2a0w0S0;0/0/0@0Z0W0i0{0k1g0}1*0d0W3.0K0/a~b00/0La.0{0S8!0w8K7F9)0V0K8!7zbc0Zbebgbi0!bkbm9=0/0d3L1M0{0!a,330|2o0j0,17115P1J045H8!1p0j219j0H1w190{2!1QbNbD0w6p0HbJ05bN0@8#3lbC2Xbvbnb!0$040W1#aI040X3J0KaZ6Q5C0Z0O5z5C2e0O169.0w200S0Y5D0H9-1Jak0!aDbK2a21b-7E5ZaV5EaS0!8!0:0~b.162waU2o5B0V0r2!aU6T21b+b^bPb.8#bSb@3L5c1o21141wbfaZbT0{0=101b8#160J0f1qa+a-a/1da_cU0$1z0Sa}a 6Lb25Gb50Zb7b90{0/0m2n0;b=c_0M0V0j0W0wbl2s1f0j201dd620d82xbw0V0Sdbdddf0K1i0sbq0K333J0e0;5Pby3L05a,a.0}a:01c?0_1oc_c{b02Jb3d0d2c|0/0^0S0}0Z0;0t0Z0i0d0i0_0R2P0r0Udh2Udk01d!d$d(d*d,d.d:d=04d)d+d-d/367Zbz0!bLdIc:dLc=a6dPc^drdSc}dVb6b8dYd`d%0md$av3ncwd@0}1deq0;es0Zeu1ieCeu1Qbz0b0?2#bS7EdDc/dKdMdOdQejd3dUc end3dZd#d%0s2J8H0m3J0H1zd?djeyd_e$0;e(0}e*e,e.04e^e`bVbxe90c7~3,330j0=0_0i0V0=d-eD2s9_0K1da{1i0#0Z9g13ch6p0Z0S1z2`0H3Y1GbG2$3.be9 9;2W0}dEeceRefc@dReWc~b4eZdYdmfFd9drdtdedgewe:dld7fTdsdcfWdw04f$fVdveI7UeQc;25a=a^a62!fCfyehdRen0w0:1 0{0.0rdP130V0/0pd$0_0/0C0W0Tab0}b20W2oe/d^0Lf`1fbG0!0Lf}dr0!0vgbcf0fg11^0.0!0gg633gEc~0.fCe|0L0L51bzcffHf=1`0ja?f^fKeVc|eXfOd1b80/33100Dde0*0w0+0.7E0{0r0-4H0T0C0B0E0q0z0E1i0P0{2of/a41(1Z1Y6L0KbD0H0j1d0M1xcP1x2r3G9jdcd$2s0S0Z0.1d6L0d5B0S0/f,f(0S0|dw0!a~0r2h1d0E0T0FdN2+h7gh12140S04.

La fourmi

Votre tracé sera ici