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.819454)2FR,%Ba-Vi èà8mG16CMZlK7.e:9AH;US/dkftrj?T3sogu0xPpNOnEhcL=éyvDz(wq_b050O0F0R0m0p0B0X0q0.0B0m0X0X0:010R0p0(010406050X0!0u0u0m0S0=040M0Y0B0!1e0Y0+0q020m0u0(0K0q0i0F1o0S0{0!0F0X050N1l1n1p1r1j0(041P1W051Z0N1Z1#1W1j0O0p0?16181a1c0-0p0Z0-0B1?0-0R1h05110}0B0F1.191b011=1@1_1@0R1 211}0R0}0Y0O1r1~0S1X0R0-161u0X0(0m0+1c0g01231:010Q130F0+1C0F1}2r2t2y252B212E0u2G040a0q0%0S0Y0(0Y0X0p1x1z0 2p0S0S0F0.2#1P2I0+1X0N2n2;0R2l2k2m0O2K1c1_0+2D2Y1}1+1-17242~0p300+2h1,1}0(2*1X2/2;3i1k2s1z362z3b0S1o0B1h0q0w2.3m1i3l2J3o253q3s3u0g3x2t3z2/2}013E0m3t040q0W3I2:1j3L3C1c3O3Q0q0e3U3K3m3M3!3u0d3(3W3*3Y3N0Y3r3P3u0x3/3A3n1/3D3@3F3R0D3|3X3 3Z413_3R0t453;473?3^3#0H4d3B4f3,040w0#4k3~374g420w3w1Q3y3:4l4t4n0w3H4y3J4A4s3p493Q0w3T4G3V3}3+4L1h0w3%4P3)4B4K4h4U3.4X4I4S4#4o3{4(4R3=4D444.464C4T4o4c4?4e4^4+0w4j4|4Z404+0g4q4X1Y3g1P342@0O2{3M0.2h2Q0~1,1X3f0F3h3y3(055h0 5p531c0.0w1h031G0;0Z180Z1N0q392!0p0m0!0$4r3+1h5O4X0q4/4f0Y1h0:3(5U4@2z0u0p1h0g4{3i4)4:1h0=5!5V4t5X045Z5T5?5%5)04575-5|3D1h0Y5=5$255^5`3i5#4}3p1h0v0I0L0y0J0,5P5/040+0}0|100m0(1N666d685Y6w5w015(1h0d0#604z065.4f5y5A0q0M0p0u0!182#0q0O000!300q0;116u6m4f0P1h0 0Q5r671c0`3u6.6x3Z0Q1h6s6%586/011g040_6?6B0+5R734J25700j6A783Z5:773M7a7c5Q04656}6@6 1h0f0G3/0q7u6c6B6*040p6-5{6~75045h6S0F0!0S0|0R0!2C7g3=70727n74767T7d7p047b7C7o7E5;7W7h7q7j3=696a3y7w7X7E0l0/0I0)0y7P4f707s4(7v817;7k7m6b621c697,4m6+2V2!0F7|4t7R8g6e7l8j797+807v87017y0F148f7)7Q1h7 5-828q7D648a5@6z7#7U040Z5M0.0-8w3k6~8i8x8b8l8U8h8o8B8D7$1h2*0R0Y7J307L7N218m1c8T8R8$045S8?6B7i8J7=7f8X2z700f7t8#8K8_5q8S1h7!868E047(9c7o898}7k0m0?2t0.8Q987o8=9q968:7Y9b7:8r7%9v8|9g8K859t7X92947u8r7y8(8+8G8k973J8r9C9y9d9f9G7*7Z9P638W5-6J8r6M045B0/9n22180q2Z6R6T0p1y6(4C1h180+9o0|9?6S0m2-908n71934.0N5t5o59ad0N5c1P0R5eai2_2=2g2i2@0m20af5c1V5v7X2*0u0|0Q0m0P0F0|0-0W1h1H1J1L5H8A5q1$3z1W0/223b0u6V0!6V2*1a7I0S0qaB2!0q0S0;0Q0;2*9 220s5U0m0q0-2*0Q1;2b0(0X0G0N0N0Q0S0E0`0p0P1f0F1+0m0E3@0Z0Nb6b80N0ya_0p0X8)0(8P7K9.0+0Z8)7Ebk0Sbmbobq0qbsbu9`0N0m3R1L0p0qa@390?2D0R0;16105U1I045M8)1o0R229o0B1v180p2*1PbVbL0(6u0BbR05bV0Q8*3rbK2%bDbvb,0u040E1YaQ040z3P0Za+6V5H0S0r5E5H2^0r159?0(210X0j5I0B9=1Ias0qaLbS2b22b^7J5(a%5Ja!0q8)0!0Tb_152sa$2D5G0+0O2*a$6Y22b?c0bXb_8*b!b 3R5h1n22131vbna+b#0p0n0 1a8*150_0%1pa?a^a`1cb1c$0u1y0Xb5b76Qba5Lbd0Sbfbh0p0N0h2C0Gb}d10I0+0R0E0(bt2x1e0R211cde21dg2tbE0+0Xdjdldn0Z1h0*by0Z393P026p2r0K0G5UbG3R05a@a_0Fa{01c~0Y1nd1d3b82Pbbd8dad40N0L0X0F0S0G0C0S0`0m0`0Y0}2V2idp2!ds01d/d;d?d^d`d|d~0=1hd@d_d{d}2h7(bH0qbTdTc{dWc}abd!d0dzd%d5d*bebgd-e4d=0hd;aD3tcEe10F1ceA0GeC0SeE1heMeE1PbH0c0o2+b!7JdL0}dNdPemdVdXdZd#etdbd)d7exdbd.d:d=0*2P8M0h3P0B1ye0dreIe3e?0Ge^0Fe`e|e~04f5f7b%bFej0b833=390R0n0Y0`0+0nd{eN2x9~0Z1cb31h0V0S9l12cp6u0S0X1y300B3(1FbO2,3@bma49_2$0Fe$dUc|dYeqe+d2e-d6bce:d-dufSdhdzdBdmdoeGf0dtdff+dAdkf.dE04f@f-dDeS7Zc`e(a|0R0(b0ab2*fPfLerd$ex0(0!200p0.0Od!120+0N0^d;0Y0N0w0E0#ag0Fba0E2De e20yg91ebO0q0ygcdz0q0Agqcn0%gg1_0.0q0@gl39gTd60.fPf90y0y57bHcne%fV1{g5a e*esfZd4e.f$d9bg0N390 0$dm0-0(0U0.7J0p0O0:4N0#0w0d0e0t0g0e1h0/0p2Dg0a91)1!1Xa@3=5E1`2f0Y0$2x0Oa40m0n0R0=6u1c6Q0m5Ghwhyfph52n1ccWhI110n8PhshN1w5XendXhF5G0X0Nf}f_0X0?dE6VhJc:0.0n2X2Z2#1c2g2bd!1}6Q0ZbL0B0R1c0IhV7JcY2G5gbPd;2x0X0S0.hE1oh!h$dxbvf^dlh)h+b60OhM010e0#0k1}dRc31jgw11130X04.

La fourmi

Votre tracé sera ici