Aller au contenu

Exercices de dichotomie

Exercice 1 : Vous êtes le professeur⚓︎

Votre élève a écrit la fonction dichotomie fausse suivante :

Cette fonction doit :

  • prendre en paramètre un tableau de nombres triés dans l'ordre croissant nombres et une valeur cible

  • renvoyer son indice si valeur est dans ma_liste et None sinon.

Exemples

🐍 Console Python
>>> dichotomie([1, 2, 3, 4], 2)
1
>>> dichotomie([1, 2, 3, 4], 1)
0
>>> dichotomie([1, 2, 3, 4], 4)
3
>>> dichotomie([1, 2, 3, 4], 5)
None
>>> dichotomie([1, 2, 3, 4], 0)
None
>>> dichotomie([1], 1)
0
>>> dichotomie([1], 0)
None
>>> dichotomie([], 1)
None
Corriger la fonction fausse ci-dessous

###(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 : 5/5

.128013SR4_I7Ào];N6kyh3Ow:var[nè+)-s bleu8m/c59g2.qLf(=,éùiP1pdàt0050(0H0*0v0!0G0D0E0M0G0v0D0D0W010*0!0%010406050D0I0K0K0v0w0o040b0i0G0I0 0i0y0E020v0K0%0k0E0c0H190w0S0I0H0D050L16181a1c140%04051H1A1K0L1H140(0!0u0@0_0{0}0_0y0P0I0v0P0H0C0%0o0*0p1j0E0p0!0P0p0G1:0p0*12050/0F0G0H1T0`0|011/1;1?1;0*1|1~1`0*0w1I1+0@1f0D0%0v0y0}0Q01201V010U0;0H0y1n0H1`2i2k2p222s1~2v0K2x040a0E0#0w0i0%0i0D0!1i1k0-2g0w0w0H0M2S1A2z0y1I0L1+2(2c2e2d1{0(2B1W0!0y2u2P1`1Q1S0^212=2@0y0i2{1`0%2X1I2$2(38152j1k2}2q310w190G1`0v1.2X0U0}030e0e0M320H1?300i0C0$3z120E0$1A0v393c133b2A3e223g3i3k3m0H3o013q3s3u3w2^3z0C2n040E0Q3F3H2k3J2$2;013O0v3j1I3l0p3n3p3r3t0-3Y313!0q3C0q3*2#3I143.3M0}3;3?053^3`3U3|3X2?3Z3A0d3C0d451B473K3d1U3N0i3h3=3Q3_3S3{3W3~4k403A0N3C0N4q38483c3/4c4A4g3V3}3v4G3y3A0m3C0m4M4s494v4b4x3P3@3R3T4U4j3x3!0g3C0g4%3,4O3L4*3:4,4z4.4B4:4i4F4?3A0J3C0J4{2%4}4u2~504y4d4f4C4h4E4W580C0O3C0O5d3-4P4a5i4-4e4/4D4V3 4Y3z0+120$0+5v5f4Q515k5C5n5E4X3!0$0$5J3E0L3G464|4t5O5j4S5m4;574l3z3$0$3)5!3+2%1L361A2{2+0(2e2:5y4V2`1R1I350H373I5$5_4V692A0!0(0}3r2$5V3Q6g6i5o5F6l0E2F0H6o5T5q5X2(5#4)5h0n120-0U6b6e5g2q0s3C6H5(5y0y0U6E0!0M1,0*0i0K0!0H6N6B2q11040V6#5x4 0y12310K0F2X1z4r3,6O4 6(0X6H0E6`5h6.040M0!1}6!6^5_6$226(0B0t6H14786I0E6n016j3c3!3$5B7k565p5/2n6s2w6v4=7u1`5@0E7D6 7a4b6E0H0F1h6~702q0i120W7M7G016Y125L7h7g3a3.7r0e6k3A424.7$6w5/427w2G7y5.4H0C7*3*7E7F6,71122s0y7S7}7O7Q824~710F122E6+876%126*7h7N3N6/6X6=1y8c6J7b120B868p0}7P040C8t3/7V045Z4N8o7j6h7l7%7n4m6m8H7s6q8L7:6u8I7-7@4n6z3%7E8i0}6D040s1/1~8z6P7I7K0*8+4 8w020G0*0k7R7h7|8d8j04808F5y6(7e7Y8F7$7(0C4J7+8N6p5U4I2o6t7=7t7@9a7`7{8Z7T726Y1?0H0I8:5h8w8`388|8u016(8g7!838~908{8!018w0A9v3f8-7L8h7T7c918;120L0L9V5h8B5?8E9S4P978K0C4!9b9i8P9-9g7x8T7z7@9.9m9n9A3/8$0!6G9J9p1274769O228=8@0ka87H046:8m6@9F8}0}6(0x9!9P049r6Z9u9)ak9C120j949(aj1k9+2k4@8M9:9e0C4^8RaH5q4^8X9}9}9K729I9z9K9xad3:12ar9taY8w8ya39G0}8B8D4sauaC9c985a9/9^7?5G5aaLa_9ja{7B3GaQ9~5y8$4Wa2aVa473758*a*av8=0P8^aY72ag6?ao8q04ana:4Qa!0;asbnalaxaz3I9oa+010M6y030E0f0G0E0U0v1h0E2G282X0Eb70EbM0E9s0I0E2Ua17f96a=9,5sa^8OaI5sa}b,5qb*9|b3b46-9Q8/be9BaXb|bsaqbua$b 5y9MaYa-b$braD0y5V5Ib+9d6x5Ib/cg5/5Kb18YaR7Tb60=77aB3/93c9cucb5V6y7q9c8U5G5W9?7;a~9;cGaPb@7D9K8$2X0*0I0w81c4b_c1bXcx6a7#b(aE3A5=aGcJaIc*cjcE5V7p7CbBavcQ0.cTcVb9bC0n0M120l1jcta/3a0L6d5`685|651A0*5 dd2.2)0v762(5}1G7i5y2X0K0ebL0n0H0e0p7*1s1u1w1y0Ebz6_1N3J1H0hbW3l262@0E0ObW000Y0G0z0u1 3l6Y0?054V3/1X1Z1#1%1)1.1@261^2yc~12b#8hd73u040R0E0T1 d!3ud$2kd(1$1(0od,251@1_do4 cr0Dd4dF6d2U0_bW1:dN5W2V6?2O0y2:bVd 2U5yd%1!e4d+241=e9d:c^d=b86ad^0-3%eidLel1 0O0R060r1k2j0{1 0(1j0M0E0)dKek0Pem0QbZ2k0?1~0@0`0E0i0ZcOd#ewe2eyd*e6eBd.eaaS120u3=9t0w3s2u2cf5a%128?8^9ybAf204f41~cT6NeJ680Xe=0we=1kdN0-0u0w0:0*0EeVeefse$ejdM1 5=0EdB0E2Q6 e_4 exd)e5e7eC27eE9B72fkf6f80yfabdc}bf7Qfg3,b^7~fjf5fmd@d8dGdnbIbUcTfzbK3=1ge(dNdP0Y0M0w0!bR0tfOe0e`1Ye|fTe eDeb6C12b7bjf3f=f70Mf9fyf)fh7TbgbicWf:f!f?f*9Bcwf@d_1L3J0L0-0/0;0D04.

Exercice 2⚓︎

On considère dans cet exercice des tableaux non vides contenant des nombres entiers, tous distincts, triés dans l'ordre croissant.

On cherche à déterminer l'indice d'une valeur cible dans ce tableau à l'aide d'une recherche dichotomique dans sa version itérative.

Écrire la fonction indice qui prend en paramètres le tableau de nombres tableau et la valeur cherchée cible.

Si la cible est dans le tableau, la fonction renverra son indice. Dans le cas contraire, la fonction renverra None.

Attention

Les tableaux des tests secrets peuvent être très grands. Une recherche linéaire naïve prendrait trop de temps lors de l'exécution.

Les tests secrets limitent le nombre de lectures dans le tableau à 100. Si votre code accède à plus de 100 valeurs dans le tableau, une erreur sera levée.

Exemples
🐍 Console Python
>>> tableau = [23, 28, 29, 35, 37]
>>> indice(tableau, 23)
0
>>> indice(tableau, 29)
2
>>> indice(tableau, 37)
4
>>> indice(tableau, 10)
None
>>> indice(tableau, 100)
None
Question

Compléter le script ci-dessous :

###(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 : 5/5

.128013SR4_I7o];N6kyh3Ow:var[nè+)-s bleuT8m/c5C9g2.E*qLDfx(î=,éiP1pdàt0050-0G0/0u0)0F0C0D0M0F0u0C0C0$010/0)0,010406050C0H0K0K0u0v0n040b0h0F0H140h0x0D020u0K0,0j0D0c0G1e0v0V0H0G0C050L1b1d1f1h190,04051M1F1P0L1M190-0)0t0|0~10120~0x0Q0H0u0Q0G0B0,0n0/0o1o0D0o0)0Q0o0F1^0o0/17050@0E0F0G1Y0 11011@1_1{1_0/21231 0/0v1N1:0|1k0C0,0u0x120R01251!010Y0_0G0x1s0G1 2n2p2u272x232A0K2C040a0D0*0v0h0,0h0C0)1n1p0=2l0v0v0G0M2X1F2E0x1N0L1:2-2h2j2i200-2G1#0)0x2z2U1 1V1X0}262`2|0x0h301 0,2$1N2+2-3d1a2o1p322v360v1e0F1 0u1?2$0Y12030e0e0M370G1{350h0B0p0B0+170D0+1F0u3e3h183g2F3j273l3n3p3r0G3t013v3x3z3B2}3E0B2s040D0R3L3N2p3P2+2_013U0u3o1N3q0o3s3u3w3y0=3(363*0p3I0p3:2*3O193@3S123`3|053~403!423%2{3)3F0d3I0d4b1G4d3Q3i1Z3T0h3m3{3W3 3Y413$444q463F0N3I0N4w3d4e3h3^4i4G4m3#433A4M3D3F0l3I0l4S4y4f4B4h4D3V3}3X3Z4!4p3C3*0g3I0g4-3=4U3R4:3_4=4F4@4H4_4o4L4|3F0J3I0J512,534A33564E4j4l4I4n4K4$5e0B0P3I0P5j3?4V4g5o4?4k4^4J4#454(3G0:170+0:5B5l4W575q5I5t5K4%3*0+3H045$5S4z5U5p4Y5s4`5d4r3G3,0+3/0L3M4c3=1Q3b1F302:0-2j2^5E4#2 1W1N3a0G3c3O5|2,054#6d2F0)0-123w2+5#3W6l6n5u5L6q0D2K0G6t5Z5w5%4b4/5n0m170=0Y6f6j5m2v0r3I6L5+5E0x0Y172{1V0M0G6R6F2v16040!6#5D550x172e0G0u0H6+545n6(0%6L0D6S6-170M0)226!4x5}6$276(0A0s6L19756g3@6s016o3h3*3,5H7h5c5v5=2s6x2B6A4{7r1 5`3-0D7B6~5n6.040=0E1m6|7D2v0h170$7K77120K0)175R7e3P7X5+7o0e6p3F484@7#6B5=487t2L7v5;4N3E7y3M7B7C7R3_172x0x7Q6,5n7N047P7X6}7|0x0E172J6@6N78176*7Z896/0u736=8e3^79816^7M170B8s8f7S7U5(7c8p7#7%0B4t7*6m7i6u5!4s2t6y7;7q7?8H3:7`88822v6H040r1@238x4W6I0G7I0/8(5E84020F0/0j863d8W8t3T7~2{8p5E6(7b7X7d3f7g8J7j2p3*4P8I8Q6v4O8O7u8K7,7?9b8U8V7`7L8|047T1{0G6?879p12848^3O8`8y016(8i958X9q7H7J9w7|840z8.6 047 8 558r9M9I9y170L0L9Q5n7T175_4T8D977$7k4)6r9.9j5M4*7/6z9i7w7?4*2-7_9n7{9Y018Z0)6K9X8{4h70728%a99D8:8=0j9%3k8l8n9v9Haa9E170w9U7E179s0)9uau6%170i929,8j4V8E9:0B4~9c9|7=5M4~9`9d8MaK7^7Aa28V9x7}9S8~af3^9zak9qaxaza%8/8va*8z5P8CaG6k9.8F5gaM7p9e0B5gaRaN8R5Ma|9ma2aZ8Z4$a88_aZ7F7173a;019z9A3=9C8)046:8oa^9D6(atbsboa,ao6e7|6(aDa@ap1paI993F5ya}8L5w5yb2a~aTbKb7aXa3aq8Z2$0/0H0v80a.9RbybEbAaHa`aJ5Q9=aS6C5ObPbM5=b/a0aW9nb9173A0C74bF8q17aE4ybwbH0x5#6D3q7+9}5M5$9g7:b3a chb{bUaY8k7G8+9Lbd9N7Obi7Fb)b%83179PcA2v9)8B939-6t8F5^b:ckaTcMb@9@5#7m7zcpa4bX0?b!b$cucX0M170k1oc2c73f0L6i5~6c60691F0/63c^2?2.8m232-611L6M3^2$0K0e0Y0u0m0G0e0o7)1x1z1B1D0Dc65}1S3P303^0u0-0K1o2W0)1=2{0Y841Ldpdrdt2X0B140/2f041x0M0o0G0vdL246Y1;0/0h7Tdh0D2W0(0v0u140t240s0D0.2l0x2A0#2h741T1O040f0F0D0C001*2W0D2Z0Fd|0F0Q4D2W0o2Ld 242$dPdOdMd 0)dL0hdTdV1C2G0)dh0S1Q7Yd10;1WdBds0xdudw6Udz1OevdDdvcadGdI0W3qebdMeddQ24e16XegdQ0H0Dczd=1M0W240M3{0M0Hd_e000eR6Zd eUbyeVdZ2W24dT1m3Y0h0)0{dh0Fdh0{3y1d2z0@0)2$0C0S0D0f710D1=3a2S2U246h3z3^1$1(1*1,1.1?1|2b1}2Da4cy0_aybzbmaZa)cE8g6)aA9Jcs8-fE9Z04cDc$aq7F9Tbw90170Abi849#bicG9+6ec/3z04epdmd20q0v0%d 2pf1dNf50x0{fmfo0{2Zff0Qd!1I2X2lf30D230D0Of:0~0Df50Fg70=0{f4ay0vgh0C0/g60)7T0/0(0Gf90Oe!e$e(6}4#fl2pfn1+1-0nfr2a1|1~d36Tawfya-fPagcwfLarfGfT9R9KfKgQa(cCcx8}c#b+aq9Wg!a/04fZgTf#6Rf(0=3-0,9ugn2o0vdye|0D0G0Z0M0(0=0v0|0?0/e@0^geePgpe?f90T1p3Y0Y0?f:2Vg6di0=0H0ZdX0x6Ydifj2Z5Efm1)gEfq291`gJfvfQ8*8,g?6ih1gnhye!55hBfogFgHhG2chI9DfRa$c.hN0C1ogng02p0-0Cga9uh7h)g5hQgB1%hCfpgGhFftgKbehKct9BfCg$gTh#g)dlhNg`1md 0(2o10dNg63q0t3{h;gogqgteqd20Xf=h80|0 fd3igxg7eQhveSe.eVgOeU2z0D1mfy0C2pgngb0~0v1+b!e9g6e+0xha0vilhddjgzfkhAgCh{hVh~hHgLb(iHfXgSg-gXfJi?fNbi9FfHaba#i92,bng.8wi7i2gZg*btfVi{g:i^9(8Af$iaf)f+eX04itf_hpiw0{3a0(c1iYh:0Dff220ye82|d`242Tc1jyixe#f/h11p0*1/1;0xh:ghiYgj0{0x00h*jIf}hb0_iBhfhaf90I0he_g h/0D0b0)iW1=0uild~1eex0,e(0(e9jWdU0Ef70D0Y0Fei0@iYf`jF2RjAe8c1d!d~0u0,g}eU92d=do5Edqeweyhj0Z1s0,dIdAkrdCexdEeH2M0T0Z1ykyd;dneui*h`hU1.3y1pi.hYi:5n2I2z2B172O0O1oh)g7jO1:1o6R6b6M3;6gc:96cK7k0d3GcNbQ4|k`3HcRcf8Gk{5X5:b4l36D7zaZ0Q6(020Q8?lelglf1vi a!gYi{blj3aZ0K6V040R0S7Wjf8u040U0Uf!8A5Q0R4acIc8b-99k`7mcd9?l2lMci9{k}3)lRl5lU46lRb{lbldljlh0jl)6}gWavj16|bVgR85f!ltlvlxi4cvlAlCg;lE0:lGi{fOl{a4cG3KlIc3c9l37)7nlPaOmclSb;lV7@lXb^lZ7@l#7|lc17l)muljl,c3gMcrhLgT9Og%l/87j4550M5%03ieigc12LiYiVe#2o71grb*76b,k^lL8Gk|mn3Dk`4tl1mgm)2t5a5JlQm#mqa4e46W6UmW7fmY8K6pk`9llOmjmo4Pm+l7n0m.4ZlYm(0B9llamrl%linilkl-aBgVmyi_mBly27mDj7mFno6_jcmC9!lD9*l:aZmJ17mL0-if261yf4mRkk0umUk0k8gkiVgbh?2Lm{d3mbk`9 men3nc9_8PcOk~0B9_m/5Ym;n$nfm@84dxnY7!lKcak`aLn%n,mkaQn+nbl3aQn:l66vn aVl$mtl(og8?mxjabolnnzi|gTi~nl9qfSnrfMj6oulmi`or12g,m5aqfYnBlun{k@m~k_b0m$cSk`b1o5m%l3b1o9o6oPodmr840J0S0P0J0J0d0l0N0l0g0d0p5$0N0J0G0z0p0:50m9f%c:1S5 0Lesp1697dp20=gd0C04.

Exercice 3⚓︎

Une sonde interroge à intervalles réguliers l'état de fonctionnement d'un système électronique. Celui-ci peut être en marche ou en panne.

La sonde est programmée pour enregistrer les résultats de ses requêtes dans un log. Il s'agit d'un tableau de booléens (une list Python) dans lequel les valeurs True précèdent les False. La valeur True indique que le système est en marche, False qu'il est en panne.

Une panne nécessite une intervention humaine et ne peut donc pas disparaître seule : elle persiste jusqu'à la fin de l'enregistrement.

🐍 Script Python
#         0     1      2      3      4
log = [True, True, False, False, False]

Lors d'une vérification on constate que le système est en panne : le log contient au moins une valeur False en dernière position. On se demande à quel moment a débuté cette panne.

Dans l'exemple précédent, le premier False est à l'indice 2 : la panne a débuté à l'instant 2.

Écrire la fonction indice_panne qui prend en paramètre le tableau de booléens log et renvoie l'instant du démarrage de la panne.

On garantit que le log n'est pas vide et que, au moment de la vérification, le système est en panne (la dernière valeur du tableau est False).

Attention

La panne du système a aussi corrompu le fichier de log. Vous ne pouvez pas lire plus de 500 valeurs dans celui-ci. Passé ce nombre de lectures, tout nouvel accès lèvera une erreur.

Il est donc important de bien concevoir votre algorithme car les logs utilisés dans les tests secrets peuvent être très longs : un milliard de valeurs !

Exemples
🐍 Console Python
>>> indice_panne([True, False])
1
>>> indice_panne([False, False, False])
0
>>> indice_panne([True] * 10 + [False] * 100)
10
>>> indice_panne([True, True, False, False, False])
2
Question

Compléter le script ci-dessous :

###(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 : 5/5

.128013SR4_7o];6kyh3w:var[nè+)-s bleu8m/c59g2.qLDfjx(=,éiP1pdàtM0050$0D0(0r0Y0C0z0A0I0C0r0z0z0V010(0Y0#010406050z0E0G0G0r0s0l040b0g0C0E0~0g0u0A020r0G0#0i0A0c0D180s0O0E0D0z050H1517191b130#04051G1z1J0H1G130$0Y0q0?0^0`0|0^0u0L0E0r0L0D0y0#0l0(0m1i0A0m0Y0L0m0C1/0m0(11050.0B0C0D1S0_0{011.1:1=1:0(1{1}1_0(0s1H1*0?1e0z0#0r0u0|0M011 1U010R0:0D0u1m0D1_2h2j2o212r1}2u0G2w040a0A0Z0s0g0#0g0z0Y1h1j0,2f0s0s0D0I2R1z2y0u1H0H1*2%2b2d2c1`0$2A1V0Y0u2t2O1_1P1R0@202;2?0u0g2`1_0#2W1H2#2%37142i1j2|2p300s180C1_0r1-2W0R0|030e0e0I310D1=2 0g0y0f0y0!110A0!1z0r383b123a2z3d213f3h3j3l0D3n013p3r3t3v2@3y0y2m040A0M3F3H2j3J2#2:013O0r3i1H3k0m3m3o3q3s0,3Y303!0n3C0n3*2!3I133.3M0|3;3?053^3`3U3|3X2=3Z3z0d3C0d451A473K3c1T3N0g3g3=3Q3_3S3{3W3~4k403z0J3C0J4q37483b3/4c4A4g3V3}3u4G3x3z0j3C0j4M4s494v4b4x3P3@3R3T4U4j3w3!0f3C0f4%3,4O3L4*3:4,4z4.4B4:4i4F4?3z0F3C0F4{2$4}4u2}504y4d4f4C4h4E4W580y0K3C0K5d3-4P4a5i4-4e4/4D4V3 4Y3A0*110!0*5v5f4Q515k5C5n5E4X3!0!3B045W5M4t5O5j4S5m4;574l3A3$0!3)0H3G464|5#5y4R534T565p5,0!425Y445;3+5e5^4 5`5B545D4=5 4n5Y4p645?664)5h695l555o5F5V4J5Y4L6i4r3,1K351z2`2*0$2d2/5y4V2_1Q1H340D363I6j1H4V6O2z0Y0$0|3q2#5V3Q6V6X6q5U3z3B0A2E0D6%5T5q5X456l2p0k110,0R6Q675h0o3C6}6@3N0R112=1P0I0D0e3b2?725x4 10040U7e4~6m110C0g0L7k5g2p7h0x0p6Q136x2$5#6$016Y3b3!3$5B7C5}6r3z2m6,2v6/6d4H3#1_640A7W0A6~6^766|7z3%7Z210g7004300(6Q7Y734b7n7p7r3/7h0t7_5y0G0Y115L7%7)0|7h0h7w7%7y393.7J0e6Z3z617I6W7D6(5q427O2F7Q5+7S8h7V7X8v84016_042W0(0E0s0u7:8x7 817x7_8d8f0y6f8i8q5~7S4n8o6.8k6:5,8P648a6P8c8j7E2j3!6t8Q8X7R5G4J8V8R7L0y8-8u7W8x0u6`0D0B1g8G7=010g110V937f5h8I04824N8L8)8e7F4Z6#9h8Y7S4!8?8/8r5G4!2%3G8w948~042r8F7%7;9a2p9604989D8}0B7n2t7}7g117j839y7@7q9T9F217u997l9G110y9#7s219c3E899g6%8N4^4.8d9n5G4^9q7K6)3y7U3G8$6y8(9;9j0y5a9@9m8:3!5a9|8l5,a83*9x9Y0|8z0o1.1}9*4Q8 917/9K949H020C0(0i9J379E9$3N119B9P5h7h889f9X6U9h8N5sa98@9~5sae9_3!aSai8v7X8}117 1=0D0Eaq5y9HaC3IaE9+859RaJ3eas92avak95110wa.68aH2=a`9Z110xb35h9H0H0Hbb2p9c5:aN8b4P8Ma65K9laU6;5IaXab6*5I9v3%a$8|948z0Y7$aDa(047o9WblaFa^047|aOa@3:a)0:0Ya,bg7*9(bX0|9-b7bN0hb!957,2j0$b*7+117.b*9zbJb%017{b_9za*bVa-bQ7`11878Kc1bn8+6*6=3k9^bv3A6+6-br5 6=8{bAa%bC118B8D9CbG9U04b~bW9/c6aQbo7Hcbaa9s5V7Ncg9r8S5G5/a0bzbA8x8z4WbFa=8xb:7-0gaucsa b@7^c15yb{c%b4cubUcwbLbR86aM4scya5c83A8hcCch7S602ncH9}6;8t9wclajbMbS9Ab6a~d8a:b?bTa+c0cZddbZdcbRb$cxc/0Ac70u5V8Pc|cI8^0!8Ud1afc~8!d5cOcn043u0z0Db_aLc5dqds6sbqdx9~0!8=dBaY6*8`dFd6a?ar040,atb/97dfc,dhd,04b2dm3/dobk6P0H6S6z6N6B6K1z0(6Ee22-2(0r1|d 0H6C1F6TbR2W0G0e0R0r0k7a0m611r1t1v1x0Ac=6y1M3J2`3/0r0$0G1i2Q0Y1,2=0R9H1FezeBeD2R0y0~0(29040)eG0ueI1K3J1G0P3k1=0z0(1~2i0`0X1~2t0A2i0s1m0v2be.e(0A0E2?0Ae%e)0A2b0Ye-0N0A0Q2j0=790?0_0y0C0%0W0?001x0(0A0S0E78b 0T0A2T0#2tdK0s0A0%e{e}2W0I0m0D0sfC1~781+0(0g7 er0NeY7yec6B0-0/0;04.
Astuce (1)

Il s'agit d'une recherche dans un tableau trié : les valeurs True sont au début, les False à la fin.

Astuce (2)

Si le log ne contient que des valeurs False, il faut renvoyer 0.

Dans le cas contraire, l'indice cherché est l'unique indice i qui vérifie log[i - 1] and not log[i].

Exercice 4⚓︎

Sommet d'un tableau unimodal

Exercice 5⚓︎

Chasse au trésor

Exercice 6 (facultatif)⚓︎

Résolution approchée d'une équation par dichotomie

Crédits⚓︎

Nicolas Revéret et Mireille Coilhac