Jeu de parcours

Dans un jeu de hasard, on se déplace sur une grille de case en case, certaines cases peuvent faire avancer le pion quand d'autres le font reculer.

Le parcours est de taille variable dont la sortie (située en dehors du parcours) est repérée par le nombre de cases du parcours.

Sur chaque case se trouve le numéro de la prochaine case où doit se déplacer le pion.

Exemples de parcours

Ce premier parcours possède \(6\) cases. Le chiffre \(6\) indique donc la sortie du parcours.

Alt text

Ce deuxième parcours possède \(8\) cases. Le chiffre \(8\) indique donc la sortie du parcours.

Alt text

Le pion se trouve sur la case départ et on jette une seule fois un dé à six face. On déplace alors le pion sur le parcours d'autant de cases que la valeur indiquée par le dé. On arrive alors sur une case dont la valeur est celle de la prochaine case à visiter. On avance ainsi, par rebonds successifs, de case en case.

Durant le parcours, il peut y avoir trois situations possibles :

  • On arrive sur la case d'arrivée : la partie est gagnée ;
  • On arrive sur une case pas encore visitée : la partie continue ;
  • On arrive sur une case déjà visitée : la partie est perdue.

Exemples de déplacements

Dans cet exemple, la case d'arrivée est désignée par la valeur \(6\), qui est le nombre de cases du parcours.

Si le lancer de dé donne \(4\), alors on déplace le pion de \(4\) cases et il atterrit sur la case \(3\). Le pion suit les cases suivantes : \(4\) - \(1\) - \(6\) et la partie est alors gagnée.

Alt text

Si le lancer de dé donne \(1\), alors on déplace le pion de \(1\) case et il atterrit sur la case \(0\). Le pion va sur la case suivante \(2\) puis revient sur la case \(0\) et la partie est alors perdue.

Alt text

Ainsi, les lancers \(1\), \(3\) et \(6\) sont perdants, alors que les lancers \(2\), \(4\) et \(5\) sont gagnants.

Le parcours de jeu est représenté sous la forme d'un tableau d'entiers jeu_de_parcours: si le pion est positionné sur la case d'indice i de la grille, jeu_de_parcours[i] contient l'indice de la case suivante sur laquelle le pion doit se déplacer. On certifie que cet indice est valide, c'est à dire compris entre \(0\) et la longueur de la grille.

jeu_de_parcours = [2, 6, 0, 4, 1, 0]

Pour détecter que l'on tourne en rond indéfiniment, on va cocher chaque fois que l'on passe sur une case.

Écrire la fonction suivre_parcours qui prend en paramètre le tableau parcours qui représente le parcours et l'entier , la valeur du dé. Cette fonction renvoie le booléen True si la partie est gagnée, False sinon.

On pourra constater que la partie est gagnée si elle se termine sans que le pion n'ait jamais parcouru de boucle.

Indice

On pourra créer un tableau deja_vu (de booléens) de même taille que le parcours et initialement rempli de False. Chaque fois que le pion passe sur une case du parcours, on affecte True à l'élément de deja_vu d'indice correspondant.

###(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
.128013s3_8èufvy n7aêS1me(P24:jtwi][h*)6Oo;bcdg/T0làqp!.rFL-,=k95Rxé050N0s0z0n0B0S0b0k0M0S0n0b0b0%010z0B0V010406050b0g0r0r0n0Y0j040p0J0S0g110J0l0k020n0r0V0K0k0+0s1b0Y0U0g0s0b050P181a1c1e160V041C1J051M0P1M1O1J160N0B0i0_0{0}0 0E0B0O0E0S1$0E0z14050;0L0S0s1X0|0~011#1%1)1%0z1/1;1-0z0L0J0N1e1.0Y1K0z0E0_1h0b0V0n0l0 0v011?1Z010h0?0s0l1p0s1-2e2g2l1^2o1;2r0r2t040a0k0u0Y0J0V0J0b0B1k1m0/2c0Y0Y0s0M2O1C2v0l1K0P2a2!0z2827290N2x0 1)0l2q2L1-1U1W0`1@2.0B2:0l241V1-0V2T1K2Y2!35172f1m2_2m2~0Y1b0S140k0q2X3915382w3b1^3d3f3h0v3k2g3m2Y2-013r0n3g040k0c3v2Z163y3p0 3B3D0k0w3H3x393z3N3h0*3R3J3T3L3A0J3e3C3h0H3Y3n3a1Y3q3%3s3E0m3,3K3/3M3;3)3E0e3^3!3`3$3(3O0)403o423V040q0R473.2`433=0q3j1D3l3Z484g4a0q3u4l3w4n4f3c3|3D0q3G4t3I3-3U4y140q3Q4C3S4o4x444H3X4K4v4F4O4b3+4R4E3#4q3@4X3_4p4G4b3 4K1L331C2@2%0N2+3z0M242D0.1V1K320s343l3R054^0/504M1^0(140/0h524%2m0A3h5d414p0h14181V2T0d2f0Y4^0g0Y1B4,5e1^13040t5i573M145r5t5v5D4w5z140$3R0k4Y495a0-5K3z5A0G0x3Y0k5#5Q5y5F040l190s2I0d0M0|0s5P5R4g0J140%5?5(3A5T5|5j2m5_040#605E010r0B4H5!5$5@3c141c0Y1V0-5=4K5%611^635{6m6e3q0L142A5V3#5A5C5x6o5)5H0J5u5w375}5X6c5#6t5)2~0r0L5p5:0b1A665L0 6q6X3U6v046x6C676A6y5S046F6H6-4g6L4R5$6n670M0q14030_0Y0-0n2O0k0N0g0k1 0s0n770/0y0n0d0i0g6M6`6Y5~047d7f7h6#3#6!6s6K140D6=2m0(0M140Z3C6V7r4259040h3%7G4p140d7M625g042|7Q6u140Y2g0O6l6J6D016,6*7l0l146Q6S0s5/5;6I517v040G0C3Y066_6O017I0A1#1;7V6P5,5.6U7#3l7k3z630W6r358c4Z7-0J6R6T7=857(145Z6^6_6d5}6|6~0k0I1m0i0-6i2o1=2M0k1;0k0V0B1l0k1A0z750-0y0T8K1@0-0k180Y8I0n0_5;7j7~5}7I0B5c7u7%7,7n0s7e7g7i7*5W7w7y3q7-870J7;7F8`6z147{8/678e8g8b7 7A140Q0Y1z8}0 5A8s357}8u9p7 8x046 8A2c0M0E1=1y1=0S008N8P8V0}8X8Z8#8%939n9p9q5}8;7o8^9j8q047x946.5+2C888(9Y6?968p7t8h9d7B049g9i8t9O8v7%9s9u1m710M0g0V0f2T8I002|1U0M1=2Q0{8K2I9x0=2:9L8a4u9@8*8:8 9#91899+5`8p8;6:5J9(2m5A9X7$678;9!5-ao9%aA7l5A979N9O9d140s0@ah2Z7 9l8)aM8+7X0:5u0l8p9e047DaQ7|ak677I2T0za!a$9/9;aR3m0P544 4-a|0P4:1C0z4=b12)2#23252%0n1:a~4:1I567l2T0r0d0h0n0(7:0E0c141u1w9A0^9m511P3m1J0u6G8!2|2N0B3C0B6V8!8J797b0$0k8N7b7Y2N8K771j0?bH5-9K172(1l0O040r0-2a4_8V8!4^0l5:0z0-2r2W1Db#0lb%0k8s1S4{2^421`1(1*1,bf3z2z2q2s142F0p0M6i0V8Q0u0jb+a#4,4~bf3651a{c78j8=8@7q987l9,9c7^az7@7%a%a)9McE6+9*cy8d140Fas6%6)aH8{5B9Uat1c5I7?3waT140G3,a`4_2!co4/4|be0u1c2c0l2(0sbN0?8O0b8Q0B1q3%0;c@751=321V0?0-0O0BbYaab!2Ib{b(b*0Eb,5rc?c}9h2V8Mcmdnb$3E0x5Qbx1T1V3zc31|1+2u7%c92B2Dcdcf12cickdjdr51c-374,cs7 9R8?7p8_9-5}cA3w8i42ay9UcG7Ea^d(4g7I7K0Yas7O9+7S7UcM4Z6%7Yb{a^c$cVaw8~5*8l7/926We49kc%aK4m1CdU1P4.a c/050g0S3m1)040!8$b)b+2Qdlb/b;b?73dq0k2T4^8L1=1m7KbH8I1=0r0o2C0k0-0S0-2Cc@0X1Ceq16eqes0keudjewc=b/dn0gdp8Ncf6k0k1meReT2q0z0^1Uc}2|2V0beW0PeY1Cenby04bA5u0k0g1mbL7c1=231h6k0l0^0t4^1aa82g0^a78Q0s0,5-0M0Ba70GbNa7aaafbkbS2fe{a88-0h8D2qa7f1b bze*1lc^bN8HbKba1;7bc?11e_d40^0J0L0y0:0^0r1jfX1A0kfl8lePfb78f:fZ2Qfd0,fz9Ke%dkfRb:73eA749F0bbBa7d4e=e72T0g6V0^5-gg5vfOa_0/0;0?0b04.

On souhaite maintenant déterminer, pour un parcours donné,la liste des lancers de dé qui seraient gagnants.

En utilisant la fonction suivre_parcours, écrire la fonction liste_gagnants qui prend en paramètre une liste représentant le parcours. Cette fonction renvoie une liste d'entiers contenant les lancers de dé pour lesquels la partie est gagné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
.128013so_bcdufvg/ly 7napSr1me,(P2=:twki][h)050g0x0E0r0H0m0b0o0f0m0r0b0b0C010E0H0s010406050b0h0w0w0r0u0n040t0c0m0h0$0c0q050l0-0/0;0?0+0s040 1605190l191b160+0g0H0j0U0W0Y0!0K0H0k0K0m1p0K0E0)050P0e0m0x1k0X0Z011o1q1s1q0E1y1A1w0E0e0c0g0?1x0u170E0K0U0_0b0s0r0q0!0B011C1m010i0R0x0q0r0w0x1w1!1$1+1E1.1A1;1?0)0a0o0A0u0c0s0c0b0H0|0q0o0N1Y0u0u0x0f2b0 1_0q170l1W2o0E1U1T1V0g1{0!1s0q1:281w1h1j0V1D2y0H2A0q1Q1i1w0s2h172m2o2S0,1#2c2G1,2L0u0:0m0)0v2l2W0*2V1`2Y1E2!2$0)0B2*1$2o2P0x2o2E2r0g2v2x010f1Q1@172~1a2Q2-2n2^3c340N2R2W320G0)0N0i3d3h2.1l1E0F0)0o3o3b320q0i0)1s0b0E0x0d0k0r0k1;0q0E0b3w2m320(040z3O3i2/0!0q0)1#0u340h0u3N102+3x3W013R0L0D3o060o3@3v3P3-3k042h0E3%0~3*2_3_3V3r0!3R0J3U3q2H013Y040H3o444b1,3|0i0c0u4h3,464d0)4g422n4i2X4r0c3t4f412S4x3y0e0)0u1$0k0x4a4y4c3R3T4v3p4O1,0w0H2(4N3Q0)0y4p3`4r4W0)0p4Z3-3/4%454c3|0H3n4S4F3-4e0-1i2h0d3!3$3(4-4r4Q544c4e510c3%3)2U4(4P4#4:4j2:4t571,3/0I3=0 3f2|183a0l382p300 2s2r1P1R2r0r1z5t5w1i2,5w0O0Q0S04.