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.8194.8212zl7/LKEDr0n3_éhf%45(OvHtb91ceSiTPZ8pF-wC.?;à,BaA: qNèMGmxjksRV=og)U2du6y050`0F0A0X0H0e0.0!0E0e0X0.0.0;010A0H0M010406050.0{0*0*0X0l0}040G0=0e0{1e0=0n0!020X0*0M0T0!0/0F1o0l0#0{0F0.050g1l1n1p1r1j0M041P1W051Z0g1Z1#1W1j0`0H0y16181a1c0r0H0?0r0e1?0r0A1h05110B0e0F1.191b011=1@1_1@0A1 211}0A0B0=0`1r1~0l1X0A0r161u0.0M0X0n1c0_01231:010s130F0n1C0F1}2r2t2y252B212E0*2G040a0!0J0l0=0M0=0.0H1x1z0 2p0l0l0F0E2#1P2I0n1X0g2n2;0A2l2k2m0`2K1c1_0n2D2Y1}1+1-17242~0H300n2h1,1}0M2*1X2/2;3i1k2s1z362z3b0l1o0e1h0!0D2.3m1i3l2J3o253q3s3u0_3x2t3z2/2}013E0X3t040!0o3I2:1j3L3C1c3O3Q0!0u3U3K3m3M3!3u0v3(3W3*3Y3N0=3r3P3u0|3/3A3n1/3D3@3F3R0f3|3X3 3Z413_3R0L453;473?3^3#0C4d3B4f3,040D0m4k3~374g420D3w1Q3y3:4l4t4n0D3H4y3J4A4s3p493Q0D3T4G3V3}3+4L1h0D3%4P3)4B4K4h4U3.4X4I4S4#4o3{4(4R3=4D444.464C4T4o4c4?4e4^4+0D4j4|4Z404+0_4q4X1Y3g1P342@0`2{3M0E2h2Q0~1,1X3f0F3h3y3(055h0 5p531c0E0D1h031G0q0?180?1N0!392!0H0X0{0+4r3+1h5O4X0!4/4f0=1h0;3(5U4@2z0*0H1h0_4{3i4)4:1h0}5!5V4t5X045Z5T5?5%5)04575-5|3D1h0=5=5$255^5`3i5#4}3p1h0)0Y0^0Q0z0j5P5/040n0B0p100X0M1N666d685Y6w5w015(1h0v0m604z065.4f5y5A0!0G0H0*0{182#0!0`000{300!0q116u6m4f0-1h0 0s5r671c0P3u6.6x3Z0s1h6s6%586/011g040w6?6B0n5R734J25700V6A783Z5:773M7a7c5Q04656}6@6 1h0@0Z3/0!7u6c6B6*040H6-5{6~75045h6S0F0{0l0p0A0{2C7g3=70727n74767T7d7p047b7C7o7E5;7W7h7q7j3=696a3y7w7X7E0W0h0Y0$0Q7P4f707s4(7v817;7k7m6b621c697,4m6+2V2!0F7|4t7R8g6e7l8j797+807v87017y0F148f7)7Q1h7 5-828q7D648a5@6z7#7U040?5M0E0r8w3k6~8i8x8b8l8U8h8o8B8D7$1h2*0A0=7J307L7N218m1c8T8R8$045S8?6B7i8J7=7f8X2z700@7t8#8K8_5q8S1h7!868E047(9c7o898}7k0X0y2t0E8Q987o8=9q968:7Y9b7:8r7%9v8|9g8K859t7X92947u8r7y8(8+8G8k973J8r9C9y9d9f9G7*7Z9P638W5-6J8r6M045B0h9n22180!2Z6R6T0H1y6(4C1h180n9o0p9?6S0X2-908n71934.0g5t5o59ad0g5c1P0A5eai2_2=2g2i2@0X20af5c1V5v7X2*0*0p0s0X0-0F0p0r0o1h1H1J1L5H8A5q1$3z1W0h223b0*6V0{6V2*1a7I0l0!aB2!0!0l0q0s0q2*9 220U5U0X0!0r2*0s1;2b0M0.0Z0g0g0s0l0R0P0H0-1f0F1+0X0R3@0?0gb6b80g0Qa_0H0.8)0M8P7K9.0n0?8)7Ebk0lbmbobq0!bsbu9`0g0X3R1L0H0!a@390y2D0A0q16105U1I045M8)1o0A229o0e1v180H2*1PbVbL0M6u0ebR05bV0s8*3rbK2%bDbvb,0*040R1YaQ040(3P0?a+6V5H0l0%5E5H2^0%159?0M210.0V5I0e9=1Ias0!aLbS2b22b^7J5(a%5Ja!0!8)0{0,b_152sa$2D5G0n0`2*a$6Y22b?c0bXb_8*b!b 3R5h1n22131vbna+b#0H0O0 1a8*150w0J1pa?a^a`1cb1c$0*1y0.b5b76Qba5Lbd0lbfbh0H0g0N2C0Zb}d10Y0n0A0R0Mbt2x1e0A211cde21dg2tbE0n0.djdldn0?1h0xby0?393P026p2r0T0Z5UbG3R05a@a_0Fa{01c~0=1nd1d3b82Pbbd8dad40g0^0.0F0l0Z0i0l0P0X0P0=0B2V2idp2!ds01d/d;d?d^d`d|d~0}1hd@d_d{d}2h7(bH0!bTdTc{dWc}abd!d0dzd%d5d*bebgd-e4d=0Nd;aD3tcEe10F1ceA0ZeC0leE1heMeE1PbH0b0:2+b!7JdL0BdNdPemdVdXdZd#etdbd)d7exdbd.d:d=0x2P8M0N3P0e1ye0dreIe3e?0Ze^0Fe`e|e~04f5f7b%bFej0c833=390A0O0=0P0n0Od{eN2x9~0?1cb31h0I0l9l12cp6u0l0.1y300e3(1FbO2,3@bma49_2$0Fe$dUc|dYeqe+d2e-d6bce:d-dufSdhdzdBdmdoeGf0dtdff+dAdkf.dE04f@f-dDeS7Zc`e(a|0A0Mb0ab2*fPfLerd$ex0M0{200H0E0`d!120n0g0dd;0=0g0D0R0mag0Fba0R2De e20Qg91ebO0!0Qgcdz0!0Kgqcn0Jgg1_0E0!0kgl39gTd60EfPf90Q0Q57bHcne%fV1{g5a e*esfZd4e.f$d9bg0g390 0+dm0r0M0S0E7J0H0`0;4N0m0D0v0u0L0_0u1h0h0H2Dg0a91)1!1Xa@3=5E1`2f0=0+2x0`a40X0O0A0}6u1c6Q0X5Ghwhyfph52n1ccWhI110O8PhshN1w5XendXhF5G0.0gf}f_0.0ydE6VhJc:0E0O2X2Z2#1c2g2bd!1}6Q0?bL0e0A1c0YhV7JcY2G5gbPd;2x0.0l0EhE1oh!h$dxbvf^dlh)h+b60`hM010u0m0t1}dRc31jgw11130.04.

La fourmi

Votre tracé sera ici