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 dé, 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
.128013:Lp(40ed3; 1jo5_ên)h]6,qc[y!Fuvà8i2xms7=wlSatf-9ORrg.*TéPkbè/050i0h0T0S0I0Q0M0l0z0Q0S0M0M0O010T0I0d010406050M0E0L0L0S0Z0B040R0o0Q0E110o0s0l020S0L0d0k0l0Y0h1b0Z0y0E0h0M050-181a1c1e160d041C1J051M0-1M1O1J160i0I0F0_0{0}0 0u0I0!0u0Q1$0u0T14050;0+0Q0h1X0|0~011#1%1)1%0T1/1;1-0T0+0o0i1e1.0Z1K0T0u0_1h0M0d0S0s0 0J011?1Z010U0?0h0s1p0h1-2e2g2l1^2o1;2r0L2t040a0l0)0Z0o0d0o0M0I1k1m0/2c0Z0Z0h0z2O1C2v0s1K0-2a2!0T2827290i2x0 1)0s2q2L1-1U1W0`1@2.0I2:0s241V1-0d2T1K2Y2!35172f1m2_2m2~0Z1b0Q140l0m2X3915382w3b1^3d3f3h0J3k2g3m2Y2-013r0S3g040l0j3v2Z163y3p0 3B3D0l0f3H3x393z3N3h0p3R3J3T3L3A0o3e3C3h0w3Y3n3a1Y3q3%3s3E0N3,3K3/3M3;3)3E0H3^3!3`3$3(3O0W403o423V040m0g473.2`433=0m3j1D3l3Z484g4a0m3u4l3w4n4f3c3|3D0m3G4t3I3-3U4y140m3Q4C3S4o4x444H3X4K4v4F4O4b3+4R4E3#4q3@4X3_4p4G4b3 4K1L331C2@2%0i2+3z0z242D0.1V1K320h343l3R054^0/504M1^0*140/0U524%2m0P3h5d414p0U14181V2T0q2f0Z4^0E0Z1B4,5e1^13040e5i573M145r5t5v5D4w5z140x3R0l4Y495a0(5K3z5A0t0b3Y0l5#5Q5y5F040s190h2I0q0z0|0h5P5R4g0o140O5?5(3A5T5|5j2m5_040V605E010L0I4H5!5$5@3c141c0Z1V0(5=4K5%611^635{6m6e3q0+142A5V3#5A5C5x6o5)5H0o5u5w375}5X6c5#6t5)2~0L0+5p5:0M1A665L0 6q6X3U6v046x6C676A6y5S046F6H6-4g6L4R5$6n670z0m14030_0Z0(0S2O0l0i0E0l1 0h0S770/0n0S0q0F0E6M6`6Y5~047d7f7h6#3#6!6s6K140A6=2m0*0z140D3C6V7r4259040U3%7G4p140q7M625g042|7Q6u140Z2g0!6l6J6D016,6*7l0s146Q6S0h5/5;6I517v040t0v3Y066_6O017I0P1#1;7V6P5,5.6U7#3l7k3z630C6r358c4Z7-0o6R6T7=857(145Z6^6_6d5}6|6~0l0X1m0F0(6i2o1=2M0l1;0l0d0I1l0l1A0T750(0n0G8K1@0(0l180Z8I0S0_5;7j7~5}7I0I5c7u7%7,7n0h7e7g7i7*5W7w7y3q7-870o7;7F8`6z147{8/678e8g8b7 7A140%0Z1z8}0 5A8s357}8u9p7 8x046 8A2c0z0u1=1y1=0Q008N8P8V0}8X8Z8#8%939n9p9q5}8;7o8^9j8q047x946.5+2C888(9Y6?968p7t8h9d7B049g9i8t9O8v7%9s9u1m710z0E0d0,2T8I002|1U0z1=2Q0{8K2I9x0=2:9L8a4u9@8*8:8 9#91899+5`8p8;6:5J9(2m5A9X7$678;9!5-ao9%aA7l5A979N9O9d140h0@ah2Z7 9l8)aM8+7X0:5u0s8p9e047DaQ7|ak677I2T0Ta!a$9/9;aR3m0-544 4-a|0-4:1C0T4=b12)2#23252%0S1:a~4:1I567l2T0L0q0U0S0*7:0u0j141u1w9A0^9m511P3m1J0)6G8!2|2N0I3C0I6V8!8J797b0x0l8N7b7Y2N8K771j0?bH5-9K172(1l0!040L0(2a4_8V8!4^0s5:0T0(2r2W1Db#0sb%0l8s1S4{2^421`1(1*1,bf3z2z2q2s142F0R0z6i0d8Q0)0Bb+a#4,4~bf3651a{c78j8=8@7q987l9,9c7^az7@7%a%a)9McE6+9*cy8d140$as6%6)aH8{5B9Uat1c5I7?3waT140t3,a`4_2!co4/4|be0)1c2c0s2(0hbN0?8O0M8Q0I1q3%0;c@751=321V0?0(0!0IbYaab!2Ib{b(b*0ub,5rc?c}9h2V8Mcmdnb$3E0b5Qbx1T1V3zc31|1+2u7%c92B2Dcdcf12cickdjdr51c-374,cs7 9R8?7p8_9-5}cA3w8i42ay9UcG7Ea^d(4g7I7K0Zas7O9+7S7UcM4Z6%7Yb{a^c$cVaw8~5*8l7/926We49kc%aK4m1CdU1P4.a c/050E0Q3m1)040c8$b)b+2Qdlb/b;b?73dq0l2T4^8L1=1m7KbH8I1=0L0r2C0l0(0Q0(2Cc@0#1Ceq16eqes0leudjewc=b/dn0Edp8Ncf6k0l1meReT2q0T0^1Uc}2|2V0MeW0-eY1Cenby04bA5u0l0E1mbL7c1=231h6k0s0^0e4^1aa82g0^a78Q0h0K5-0z0Ia70tbNa7aaafbkbS2fe{a88-0U8D2qa7f1b bze*1lc^bN8HbKba1;7bc?11e_d40^0o0+0n0:0^0L1jfX1A0lfl8lePfb78f:fZ2Qfd0Kfz9Ke%dkfRb:73eA749F0MbBa7d4e=e72T0E6V0^5-gg5vfOa_0/0;0?0M04.

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
.128013:pv(ui2edms7=1 ow_lSnatf)h],crg[yPkb/050j0i0x0w0g0t0l0p0D0t0w0l0l0n010x0g0c010406050l0f0k0k0w0E0H040u0q0t0f0$0q0v050L0-0/0;0?0+0c040 1605190L191b160+0j0g0d0U0W0Y0!0A0g0F0A0t1p0A0x0)050P0K0t0i1k0X0Z011o1q1s1q0x1y1A1w0x0K0q0j0?1x0E170x0A0U0_0l0c0w0v0!0h011C1m010y0R0i0v0w0k0i1w1!1$1+1E1.1A1;1?0)0a0p0I0E0q0c0q0l0g0|0v0p0N1Y0E0E0i0D2b0 1_0v170L1W2o0x1U1T1V0j1{0!1s0v1:281w1h1j0V1D2y0g2A0v1Q1i1w0c2h172m2o2S0,1#2c2G1,2L0E0:0t0)0o2l2W0*2V1`2Y1E2!2$0)0h2*1$2o2P0i2o2E2r0j2v2x010D1Q1@172~1a2Q2-2n2^3c340N2R2W320J0)0N0y3d3h2.1l1E0r0)0p3o3b320v0y0)1s0l0x0i0s0F0w0F1;0v0x0l3w2m320(040e3O3i2/0!0v0)1#0E340f0E3N102+3x3W013R0z0b3o060p3@3v3P3-3k042h0x3%0~3*2_3_3V3r0!3R0G3U3q2H013Y040g3o444b1,3|0y0q0E4h3,464d0)4g422n4i2X4r0q3t4f412S4x3y0K0)0E1$0F0i4a4y4c3R3T4v3p4O1,0k0g2(4N3Q0)0C4p3`4r4W0)0m4Z3-3/4%454c3|0g3n4S4F3-4e0-1i2h0s3!3$3(4-4r4Q544c4e510q3%3)2U4(4P4#4:4j2:4t571,3/0B3=0 3f2|183a0L382p300 2s2r1P1R2r0w1z5t5w1i2,5w0O0Q0S04.