Aller au contenu

Jeu de parcours (II)⚓︎

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é.

Suivant la première case où atterrit le pion, comprise entre \(0\) et \(5\), il peut y avoir deux résultats possibles :

  • soit on arrive sur la case d'arrivée, ce qui signifie que la partie est gagnée,
  • soit on tourne en rond et dans ce cas 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.

On souhaite comptabiliser le nombre de déplacements nécessaires pour gagner une partie, sachant que le déplacement suite au lancer de dé ne compte pas.

Compte des déplacements

Si le lancer de dé donne \(4\), il lui faut \(3\) déplacements pour atteindre la case d'arrivée en suivant les cases \(4\) - \(1\) - \(6\).

Alt text

Longueur du parcours

Écrire la fonction longueur_parcours qui prend en paramètre le parcours et la valeur du dé et renvoie un entier correspondant au nombre de déplacements du pion jusqu'à l'arrivée. Si la partie est perdue, la fonction renverra \(-1\).

On pourra constater que la partie est gagnée si elle se termine sans qu'aucune boucle n'ait été détectée.

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 l'on passe sur une case du parcours, on placera un True dans ce tableau deja_vu à la même position.

###(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_8ufvy n7aêS1me(P24:jtwi][h*)6o;bcdg/0lqp!.rFL-,=+k95Rxé050L0r0y0m0A0P0b0j0K0P0m0b0b0Z010y0A0R010406050b0f0q0q0m0U0i040o0H0P0f0~0H0k0j020m0q0R0I0j0(0r180U0Q0f0r0b050N1517191b130R041z1G051J0N1J1L1G130L0A0h0?0^0`0|0D0A0M0D0P1Z0D0y11050.0J0P0r1U0_0{011Y1!1$1!0y1,1.1*0y0J0H0L1b1+0U1H0y0D0?1e0b0R0m0k0|0u011:1W010g0:0r0k1m0r1*2b2d2i1=2l1.2o0q2q040a0j0t0U0H0R0H0b0A1h1j0,290U0U0r0K2L1z2s0k1H0N272X0y2524260L2u0|1$0k2n2I1*1R1T0@1;2+0A2-0k211S1*0R2Q1H2V2X32142c1j2?2j2{0U180P110j0p2U3612352t381=3a3c3e0u3h2d3j2V2*013o0m3d040j0c3s2W133v3m0|3y3A0j0v3E3u363w3K3e0%3O3G3Q3I3x0H3b3z3e0G3V3k371V3n3!3p3B0l3)3H3,3J3.3$3B0e3=3X3@3Z3#3L0$3}3l3 3S040p0O443+2@403/0p3g1A3i3W454d470p3r4i3t4k4c393_3A0p3D4q3F3*3R4v110p3N4z3P4l4u414E3U4H4s4C4L483(4H1I301z2;2!0L2(3w0K212A0+1S1H2 0r313i3O054%0,4/4J1=0#110,0g4;3?4d0z3e4 3~4m0g110P1i0M1w0f0U0d2c0U4%5d1y4U502j10040s544_3J115g5i0U5k345m1=5o0Y3O0j4B3Y0k4|0*5r4t5B110F0w3V0j5S5F5A5t040K0_0r5E5G3 0H110Z5#5V3x5J5+552j5(040X5/5s010q0A4E5R5T5$4m11190U1S0*5!4H5U5:1=5=5*6860390J582n5L3w5o5q5l6a5W5v0H5j6k3Y5o0F5~5S6f3n112{0q0J2Q0d5Y0b1x5^5M0|6c6L3R6h042x6u3 6m6U61046r6t6o5_6w6y695_5I6S5a5c0U6P3Y6O6e5,5{114a4O5T6*6M5-040,0x0m0d0h0f6;5%5)784d5o0C6X2j0#0K110V3z6J7b7g110g3!7n6B040d7s6N52042_7w3x6R0U2d0M675z6p016W6$6 6,6D6F0r6H5Z5y4:5,6w0B3V066}6A0|4{040z1Y1.7B6,6I7H3i6~3w5=0S6d327=5H6C0H6E6G7/7U3t7{6V115Q6|6}5 5,7(0A4~6@7J6,7274767f5N047e7M3R117/8l0|5o7Y8f5_7@7_7;7$5`5|488t7K866)898a8g4|0r7375778p6v118o7I6+8r5Z8G8v7B6?7`8C6_8F888K7#5,7.8Z8x6 8%8B8/5u195w822W8C7d8G8:7m8S85048w327!8-8.8M6-0k5b0r5d8$110!8A838)8E4h989a8C7(0r0;7:3t8 8I8,9a844d7(2Q0y5d0k9i5?8G8*9p4j996z8b119F9H7-586.9g6:4O1z4?4.4V9%0N4Y1z0y4!9,2$2Y20222!0m1-9)4Y1F4^6 2Q0q0d0g0m0#7R0D0c111r1t1v1x0j87341M3j1G0t6s0U0j2_2K0A3z0A6Jal1.0j1|0r0m0f0Y0j1i0jay7E2K0j0R0f0j1g0:ar0rat0m5U2#5a040q0*274(aH19290k5Y0y0*2o2T1AaS9e3B871P4*2=3 1@1#1%1)9}3w2w2n2p112C0o0K640R0y2D0iaX9I4U4-9}334:9$a|7|718O8j8R8(5,8@9m7W8U8G7h7j7l9w8~bs969J0E7-6R6T947c116n8W7N8`5hak8}bi956x9!0Nbh9(2X9{1K040ta!4%0k2#0raA0:0j1xb70A1n3!0.b)0j2N2 1S0:0*0M0AaO0j0^aR2Fa.aVaXb`b%1i0b2#0f2S0A1i2Ua-0Ma/5Fag1Q1S3wa^1_1(2r7Ja~2y2Ab2b40 b70tb90Dchbc4Waf34bW8_bk8P8k8=7?7acQ8T8nbu7i047k9v7B7(7q9Zbo9c7vcT5%7y7Ac,4m7D7FbybRbI5p917}7 7R818!5O974j9#4(2Xbd4X4+130f0P3j1$040WaQc7cFc9alb(a%a)0m2L0j2Q4%0Rc00j1j7qarc21/0q0n2z0j0*0P0*2zb)0T1zde13dedg0jdiaY5ga#cc0Ucedqb466dwdFdHdJ0y0=1Rcc2_2S0bdL0NdN1zdbahb#akaK1jawayb_1/201e660k0=0s4%171/0L2d0=0K0-b.0)aO0K0Aee0FaAeec32-0ja2aG2cd+ea8d0g0*2Qa$0rd;a;aicab)2QaA2JdAav9^1.d b(0~2nb70,0=0H0J0x0-0=0q1geNace77~dE0fd}e%d 2Nd~0f0)emc2dhaWdj1/dUdmdpdodqb/0j0bakeee0dw7~7Q0f6J0=aO2Q5jeD3j9*0-0/0;04.
Minimum de déplacements

On souhaite maintenant déterminer, pour un parcours donné, le lancer de dé qui permet d'arriver avec le minimum de déplacements.

En vous utilisant la fonction longueur_parcours, écrire la fonction parcours_minimum qui prend en paramètre le parcours et renvoie un entiers compris entre \(1\) et \(6\) correspondant au lancer qui entraine le moins de déplacement, ou None si aucun lancer n'est gagnant.

###(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

.128013s3o_8;bcdufvg/ly n7apS!r1-me,(P2=4:Ntwki95h)6050j0C0L0u0O0p0b0r0i0p0u0b0b0H010L0O0v010406050b0k0B0B0u0y0q040w0d0p0k0.0d0s050o0^0`0|0~0?0v04171e051h0o1h1j1e0?0j0O0m0$0(0*0,0R0O0n0R0p1x0R0L0;050X0h0p0C1s0)0+011w1y1A1y0L1G1I1E0L0h0d0j0~1F0y1f0L0R0$110b0v0u0s0,0G011K1u010l0Z0C0s0u0B0C1E1,1.1?1M1_1I1|1~0;0a0r0F0y0d0v0d0b0O140s0r0V1*0y0y0C0i2j17210s1f0o1(2w0L1$1#1%0j230,1A0s1{2g1E1p1r0%1L2G0O2I0s1Y1q1E0v2p1f2u2w2!0@1-2k2O1@2T0y0{0p0;0z2t2(0=2%222*1M2,2.0;0G2=1.2@2u2F012|0u2/040c302v0?332`0,36380I3b322(343h0;0Q3k3d3m3f350d2-370;0T3r2^2)1t2{3w2}040t3B3e3E3g3G3y040f3K3t3M3v3x380P3k1g2Y172M2z0j2D340i1Y1 1f3%1i3#2$182?053,0V2Z3T2P010N0;0V0l3Z3L3~0M0;0r443}2+0l0;1-0y3,0k0y0b0e0B2R0O0B0_4a2_3U0:040E4r3D3~0s4e0|4h4j4x344u0S0J3r0r4L49452+0;0(0s0i0C0y0e0n0u0n1|0s0L3k4N4b1M0d0;0H4%3C340N0i0;0K150C4K4M4/3u4A044m0s4o4q3@314(4s3~4+044-542v564y2+0h4Q1{4F3u4u4w5c3|574P044f4D0b5k4t0;0S4`4L4|3U40040l3w4.4O2{0;0O5I4)0,0d47042R5N5q2{5h040y1.0n4_5o5e4G0;5n2$5J0,4m2:5w3~4u0D5U5f1M5/3I5;1@4H4J5o064M635(4}4Q150n0k0C4i5^34595b2!653U4~0p686a4i0e5t0d4i5v5o5C5=5*5}5K5s4C6r4E6u5-015?6d665S6y0,4H5A646v1@5E0O435%6Q6z6l0s696b0y6I3U590x6g2?6i580;0A6L015{2;6V6F5Q0;1.0j6%4z676Z6n6$6^5O0159020p0L0g6~5r50520B6;4u602!62647m6W3g4Q1.4T4V4X4Z1.4$745V5P4,7c6z5M617m7n6F4~7e4p7g7y5_7A5a7C7p046Y6!6c7F4{6F5E2p0L4i165%6-5r4R7s4W4Y4!7x7k173`0C2w2X7^3$1q3(2z2B2x1X1Z2z0u1H7{0o3%0?880W0Y0!04.