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
.8194.8212.128013D1wGsTq_iRz?tE/.npPMC5=u;H-20(AevSrLc7è )a:VàKj4FUf3,o6hgm8éyNZ%xOklBd9b050{0I0p0S0l0_0h0Q0N0_0S0h0h0z010p0l0u010406050h0A0,0,0S0L0/040K0(0_0A1e0(0t0Q020S0,0u0B0Q0m0I1o0L0j0A0I0h050r1l1n1p1r1j0u041P1W051Z0r1Z1#1W1j0{0l0J16181a1c0*0l0+0*0_1?0*0p1h05110}0_0I1.191b011=1@1_1@0p1 211}0p0}0(0{1r1~0L1X0p0*161u0h0u0S0t1c0E01231:010#130I0t1C0I1}2r2t2y252B212E0,2G040c0Q0v0L0(0u0(0h0l1x1z0 2p0L0L0I0N2#1P2I0t1X0r2n2;0p2l2k2m0{2K1c1_0t2D2Y1}1+1-17242~0l300t2h1,1}0u2*1X2/2;3i1k2s1z362z3b0L1o0_1h0Q0e2.3m1i3l2J3o253q3s3u0E3x2t3z2/2}013E0S3t040Q0$3I2:1j3L3C1c3O3Q0Q0Y3U3K3m3M3!3u0y3(3W3*3Y3N0(3r3P3u0)3/3A3n1/3D3@3F3R0O3|3X3 3Z413_3R0-453;473?3^3#0|4d3B4f3,040e0F4k3~374g420e3w1Q3y3:4l4t4n0e3H4y3J4A4s3p493Q0e3T4G3V3}3+4L1h0e3%4P3)4B4K4h4U3.4X4I4S4#4o3{4(4R3=4D444.464C4T4o4c4?4e4^4+0e4j4|4Z404+0E4q4X1Y3g1P342@0{2{3M0N2h2Q0~1,1X3f0I3h3y3(055h0 5p531c0N0e1h031G0.0+180+1N0Q392!0l0S0A0?4r3+1h5O4X0Q4/4f0(1h0z3(5U4@2z0,0l1h0E4{3i4)4:1h0/5!5V4t5X045Z5T5?5%5)04575-5|3D1h0(5=5$255^5`3i5#4}3p1h0g0H0!0x0C0q5P5/040t0}0k100S0u1N666d685Y6w5w015(1h0y0F604z065.4f5y5A0Q0K0l0,0A182#0Q0{000A300Q0.116u6m4f0^1h0 0#5r671c0f3u6.6x3Z0#1h6s6%586/011g040G6?6B0t5R734J25700%6A783Z5:773M7a7c5Q04656}6@6 1h0R0T3/0Q7u6c6B6*040l6-5{6~75045h6S0I0A0L0k0p0A2C7g3=70727n74767T7d7p047b7C7o7E5;7W7h7q7j3=696a3y7w7X7E0`0M0H0:0x7P4f707s4(7v817;7k7m6b621c697,4m6+2V2!0I7|4t7R8g6e7l8j797+807v87017y0I148f7)7Q1h7 5-828q7D648a5@6z7#7U040+5M0N0*8w3k6~8i8x8b8l8U8h8o8B8D7$1h2*0p0(7J307L7N218m1c8T8R8$045S8?6B7i8J7=7f8X2z700R7t8#8K8_5q8S1h7!868E047(9c7o898}7k0S0J2t0N8Q987o8=9q968:7Y9b7:8r7%9v8|9g8K859t7X92947u8r7y8(8+8G8k973J8r9C9y9d9f9G7*7Z9P638W5-6J8r6M045B0M9n22180Q2Z6R6T0l1y6(4C1h180t9o0k9?6S0S2-908n71934.0r5t5o59ad0r5c1P0p5eai2_2=2g2i2@0S20af5c1V5v7X2*0,0k0#0S0^0I0k0*0$1h1H1J1L5H8A5q1$3z1W0M223b0,6V0A6V2*1a7I0L0QaB2!0Q0L0.0#0.2*9 220V5U0S0Q0*2*0#1;2b0u0h0T0r0r0#0L0s0f0l0^1f0I1+0S0s3@0+0rb6b80r0xa_0l0h8)0u8P7K9.0t0+8)7Ebk0Lbmbobq0Qbsbu9`0r0S3R1L0l0Qa@390J2D0p0.16105U1I045M8)1o0p229o0_1v180l2*1PbVbL0u6u0_bR05bV0#8*3rbK2%bDbvb,0,040s1YaQ040w3P0+a+6V5H0L0P5E5H2^0P159?0u210h0%5I0_9=1Ias0QaLbS2b22b^7J5(a%5Ja!0Q8)0A0Xb_152sa$2D5G0t0{2*a$6Y22b?c0bXb_8*b!b 3R5h1n22131vbna+b#0l0D0 1a8*150G0v1pa?a^a`1cb1c$0,1y0hb5b76Qba5Lbd0Lbfbh0l0r0Z2C0Tb}d10H0t0p0s0ubt2x1e0p211cde21dg2tbE0t0hdjdldn0+1h0@by0+393P026p2r0B0T5UbG3R05a@a_0Ia{01c~0(1nd1d3b82Pbbd8dad40r0!0h0I0L0T0W0L0f0S0f0(0}2V2idp2!ds01d/d;d?d^d`d|d~0/1hd@d_d{d}2h7(bH0QbTdTc{dWc}abd!d0dzd%d5d*bebgd-e4d=0Zd;aD3tcEe10I1ceA0TeC0LeE1heMeE1PbH0a0U2+b!7JdL0}dNdPemdVdXdZd#etdbd)d7exdbd.d:d=0@2P8M0Z3P0_1ye0dreIe3e?0Te^0Ie`e|e~04f5f7b%bFej0b833=390p0D0(0f0t0Dd{eN2x9~0+1cb31h0i0L9l12cp6u0L0h1y300_3(1FbO2,3@bma49_2$0Ie$dUc|dYeqe+d2e-d6bce:d-dufSdhdzdBdmdoeGf0dtdff+dAdkf.dE04f@f-dDeS7Zc`e(a|0p0ub0ab2*fPfLerd$ex0u0A200l0N0{d!120t0r0nd;0(0r0e0s0Fag0Iba0s2De e20xg91ebO0Q0xgcdz0Q0;gqcn0vgg1_0N0Q0dgl39gTd60NfPf90x0x57bHcne%fV1{g5a e*esfZd4e.f$d9bg0r390 0?dm0*0u0o0N7J0l0{0z4N0F0e0y0Y0-0E0Y1h0M0l2Dg0a91)1!1Xa@3=5E1`2f0(0?2x0{a40S0D0p0/6u1c6Q0S5Ghwhyfph52n1ccWhI110D8PhshN1w5XendXhF5G0h0rf}f_0h0JdE6VhJc:0N0D2X2Z2#1c2g2bd!1}6Q0+bL0_0p1c0HhV7JcY2G5gbPd;2x0h0L0NhE1oh!h$dxbvf^dlh)h+b60{hM010Y0F0=1}dRc31jgw11130h04.

La fourmi

Votre tracé sera ici