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 : 10/10
.128013.8212.8194,%è OVw5e(?z8CRM0pkKDojicHE6TS1vqAd:xFy24Gfln-9B3m=UZ)rhus;b/.àt_gLéaPN7050L0l0=0`0A0U0,0g0B0U0`0,0,0#010=0A0u010406050,0+0!0!0`0)0P040G0y0U0+1e0y0V0g020`0!0u0-0g0r0l1o0)0J0+0l0,050/1l1n1p1r1j0u041P1W051Z0/1Z1#1W1j0L0A0I16181a1c0*0A0@0*0U1?0*0=1h05110.0U0l1.191b011=1@1_1@0=1 211}0=0.0y0L1r1~0)1X0=0*161u0,0u0`0V1c0Q01231:010T130l0V1C0l1}2r2t2y252B212E0!2G040a0g0{0)0y0u0y0,0A1x1z0 2p0)0)0l0B2#1P2I0V1X0/2n2;0=2l2k2m0L2K1c1_0V2D2Y1}1+1-17242~0A300V2h1,1}0u2*1X2/2;3i1k2s1z362z3b0)1o0U1h0g0H2.3m1i3l2J3o253q3s3u0Q3x2t3z2/2}013E0`3t040g0Z3I2:1j3L3C1c3O3Q0g0R3U3K3m3M3!3u0k3(3W3*3Y3N0y3r3P3u0E3/3A3n1/3D3@3F3R0}3|3X3 3Z413_3R0p453;473?3^3#0X4d3B4f3,040H0t4k3~374g420H3w1Q3y3:4l4t4n0H3H4y3J4A4s3p493Q0H3T4G3V3}3+4L1h0H3%4P3)4B4K4h4U3.4X4I4S4#4o3{4(4R3=4D444.464C4T4o4c4?4e4^4+0H4j4|4Z404+0Q4q4X1Y3g1P342@0L2{3M0B2h2Q0~1,1X3f0l3h3y3(055h0 5p531c0B0H1h031G0_0@180@1N0g392!0A0`0+0N4r3+1h5O4X0g4/4f0y1h0#3(5U4@2z0!0A1h0Q4{3i4)4:1h0P5!5V4t5X045Z5T5?5%5)04575-5|3D1h0y5=5$255^5`3i5#4}3p1h0S0K0$0q0C0D5P5/040V0.0?100`0u1N666d685Y6w5w015(1h0k0t604z065.4f5y5A0g0G0A0!0+182#0g0L000+300g0_116u6m4f0v1h0 0T5r671c0j3u6.6x3Z0T1h6s6%586/011g040m6?6B0V5R734J25700d6A783Z5:773M7a7c5Q04656}6@6 1h0(0M3/0g7u6c6B6*040A6-5{6~75045h6S0l0+0)0?0=0+2C7g3=70727n74767T7d7p047b7C7o7E5;7W7h7q7j3=696a3y7w7X7E0Y0^0K0|0q7P4f707s4(7v817;7k7m6b621c697,4m6+2V2!0l7|4t7R8g6e7l8j797+807v87017y0l148f7)7Q1h7 5-828q7D648a5@6z7#7U040@5M0B0*8w3k6~8i8x8b8l8U8h8o8B8D7$1h2*0=0y7J307L7N218m1c8T8R8$045S8?6B7i8J7=7f8X2z700(7t8#8K8_5q8S1h7!868E047(9c7o898}7k0`0I2t0B8Q987o8=9q968:7Y9b7:8r7%9v8|9g8K859t7X92947u8r7y8(8+8G8k973J8r9C9y9d9f9G7*7Z9P638W5-6J8r6M045B0^9n22180g2Z6R6T0A1y6(4C1h180V9o0?9?6S0`2-908n71934.0/5t5o59ad0/5c1P0=5eai2_2=2g2i2@0`20af5c1V5v7X2*0!0?0T0`0v0l0?0*0Z1h1H1J1L5H8A5q1$3z1W0^223b0!6V0+6V2*1a7I0)0gaB2!0g0)0_0T0_2*9 220;5U0`0g0*2*0T1;2b0u0,0M0/0/0T0)0:0j0A0v1f0l1+0`0:3@0@0/b6b80/0qa_0A0,8)0u8P7K9.0V0@8)7Ebk0)bmbobq0gbsbu9`0/0`3R1L0A0ga@390I2D0=0_16105U1I045M8)1o0=229o0U1v180A2*1PbVbL0u6u0UbR05bV0T8*3rbK2%bDbvb,0!040:1YaQ040s3P0@a+6V5H0)0f5E5H2^0f159?0u210,0d5I0U9=1Ias0gaLbS2b22b^7J5(a%5Ja!0g8)0+0zb_152sa$2D5G0V0L2*a$6Y22b?c0bXb_8*b!b 3R5h1n22131vbna+b#0A0W0 1a8*150m0{1pa?a^a`1cb1c$0!1y0,b5b76Qba5Lbd0)bfbh0A0/0O2C0Mb}d10K0V0=0:0ubt2x1e0=211cde21dg2tbE0V0,djdldn0@1h0hby0@393P026p2r0-0M5UbG3R05a@a_0la{01c~0y1nd1d3b82Pbbd8dad40/0$0,0l0)0M0w0)0j0`0j0y0.2V2idp2!ds01d/d;d?d^d`d|d~0P1hd@d_d{d}2h7(bH0gbTdTc{dWc}abd!d0dzd%d5d*bebgd-e4d=0Od;aD3tcEe10l1ceA0MeC0)eE1heMeE1PbH0c0i2+b!7JdL0.dNdPemdVdXdZd#etdbd)d7exdbd.d:d=0h2P8M0O3P0U1ye0dreIe3e?0Me^0le`e|e~04f5f7b%bFej0b833=390=0W0y0j0V0Wd{eN2x9~0@1cb31h0F0)9l12cp6u0)0,1y300U3(1FbO2,3@bma49_2$0le$dUc|dYeqe+d2e-d6bce:d-dufSdhdzdBdmdoeGf0dtdff+dAdkf.dE04f@f-dDeS7Zc`e(a|0=0ub0ab2*fPfLerd$ex0u0+200A0B0Ld!120V0/0od;0y0/0H0:0tag0lba0:2De e20qg91ebO0g0qgcdz0g0%gqcn0{gg1_0B0g0xgl39gTd60BfPf90q0q57bHcne%fV1{g5a e*esfZd4e.f$d9bg0/390 0Ndm0*0u0n0B7J0A0L0#4N0t0H0k0R0p0Q0R1h0^0A2Dg0a91)1!1Xa@3=5E1`2f0y0N2x0La40`0W0=0P6u1c6Q0`5Ghwhyfph52n1ccWhI110W8PhshN1w5XendXhF5G0,0/f}f_0,0IdE6VhJc:0B0W2X2Z2#1c2g2bd!1}6Q0@bL0U0=1c0KhV7JcY2G5gbPd;2x0,0)0BhE1oh!h$dxbvf^dlh)h+b60LhM010R0t0e1}dRc31jgw11130,04.

La fourmi

Votre tracé sera ici