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

.128013,hé:SonRk7àvImùy/Ntl5À=2.wfLsi q9u-6pe3(1_ègrPO8cad40+[;]b)050Z0M0t0Y0E0u0D0F0X0u0Y0D0D0x010t0E0L010406050D0I0o0o0Y0T0q040f0g0u0I0 0g0h0F020Y0o0L0(0F0i0M190T0G0I0M0D050r16181a1c140L04051H1A1K0r1H140Z0E0m0@0_0{0}0_0h0S0I0Y0S0M0J0L0q0t0c1j0F0c0E0S0c0u1:0c0t12050/0*0u0M1T0`0|011/1;1?1;0t1|1~1`0t0T1I1+0@1f0D0L0Y0h0}0y01201V010B0;0M0h1n0M1`2i2k2p222s1~2v0o2x040a0F0U0T0g0L0g0D0E1i1k0-2g0T0T0M0X2S1A2z0h1I0r1+2(2c2e2d1{0Z2B1W0E0h2u2P1`1Q1S0^212=2@0h0g2{1`0L2X1I2$2(38152j1k2}2q310T190u1`0Y1.2X0B0}030Q0Q0X320M1?300g0J0P3z120F0P1A0Y393c133b2A3e223g3i3k3m0M3o013q3s3u3w2^3z0J2n040F0y3F3H2k3J2$2;013O0Y3j1I3l0c3n3p3r3t0-3Y313!0N3C0N3*2#3I143.3M0}3;3?053^3`3U3|3X2?3Z3A0!3C0!451B473K3d1U3N0g3h3=3Q3_3S3{3W3~4k403A0v3C0v4q38483c3/4c4A4g3V3}3v4G3y3A0K3C0K4M4s494v4b4x3P3@3R3T4U4j3x3!0k3C0k4%3,4O3L4*3:4,4z4.4B4:4i4F4?3A0W3C0W4{2%4}4u2~504y4d4f4C4h4E4W580J0H3C0H5d3-4P4a5i4-4e4/4D4V3 4Y3z0#120P0#5v5f4Q515k5C5n5E4X3!0P0P5J3E0r3G464|4t5O5j4S5m4;574l3z3$0P3)5!3+2%1L361A2{2+0Z2e2:5y4V2`1R1I350M373I5$5_4V692A0E0Z0}3r2$5V3Q6g6i5o5F6l0F2F0M6o5T5q5X2(5#4)5h0j120-0B6b6e5g2q0A3C6H5(5y0h0B6E0E0X1,0t0g0o0E0M6N6B2q11040O6#5x4 0h12310o0*2X1z4r3,6O4 6(0b6H0F6`5h6.040X0E1}6!6^5_6$226(0+0e6H14786I0F6n016j3c3!3$5B7k565p5/2n6s2w6v4=7u1`5@0F7D6 7a4b6E0M0*1h6~702q0g120x7M7G016Y125L7h7g3a3.7r0Q6k3A424.7$6w5/427w2G7y5.4H0J7*3*7E7F6,71122s0h7S7}7O7Q824~710*122E6+876%126*7h7N3N6/6X6=1y8c6J7b120+868p0}7P040J8t3/7V045Z4N8o7j6h7l7%7n4m6m8H7s6q8L7:6u8I7-7@4n6z3%7E8i0}6D040A1/1~8z6P7I7K0t8+4 8w020u0t0(7R7h7|8d8j04808F5y6(7e7Y8F7$7(0J4J7+8N6p5U4I2o6t7=7t7@9a7`7{8Z7T726Y1?0M0I8:5h8w8`388|8u016(8g7!838~908{8!018w0$9v3f8-7L8h7T7c918;120r0r9V5h8B5?8E9S4P978K0J4!9b9i8P9-9g7x8T7z7@9.9m9n9A3/8$0E6G9J9p1274769O228=8@0(a87H046:8m6@9F8}0}6(0%9!9P049r6Z9u9)ak9C120)949(aj1k9+2k4@8M9:9e0J4^8RaH5q4^8X9}9}9K729I9z9K9xad3:12ar9taY8w8ya39G0}8B8D4sauaC9c985a9/9^7?5G5aaLa_9ja{7B3GaQ9~5y8$4Wa2aVa473758*a*av8=0S8^aY72ag6?ao8q04ana:4Qa!0;asbnalaxaz3I9oa+010X6y030F0n0u0F0B0Y1h0F2G282X0Fb70FbM0F9s0I0F2Ua17f96a=9,5sa^8OaI5sa}b,5qb*9|b3b46-9Q8/be9BaXb|bsaqbua$b 5y9MaYa-b$braD0h5V5Ib+9d6x5Ib/cg5/5Kb18YaR7Tb60=77aB3/93c9cucb5V6y7q9c8U5G5W9?7;a~9;cGaPb@7D9K8$2X0t0I0T81c4b_c1bXcx6a7#b(aE3A5=aGcJaIc*cjcE5V7p7CbBavcQ0.cTcVb9bC0j0X120s1jcta/3a0r6d5`685|651A0t5 dd2.2)0Y762(5}1G7i5y2X0o0QbL0j0M0Q0c7*1s1u1w1y0Fbz6_1N3J1H0wbW3l262@0F0HbW000d0u0R0m1 3l6Y0?054V3/1X1Z1#1%1)1.1@261^2yc~12b#8hd73u040z0F0C1 d!3ud$2kd(1$1(0qd,251@1_do4 cr0Dd4dF6d2U0_bW1:dN5W2V6?2O0h2:bVd 2U5yd%1!e4d+241=e9d:c^d=b86ad^0-3%eidLel1 0H0z060V1k2j0{1 0Z1j0X0F0ldKek0Sem0ybZ2k0?1~0@0`0F0g0pcOd#ewe2eyd*e6eBd.eaaS120m3=9t0T3s2u2cf5a%128?8^9ybAf204f41~cT6NeJ680be=0Te=1kdN0-0m0T0:0t0FeVeefse$ejdM1 5=0FdB0F2Q6 e_4 exd)e5e7eC27eE9B72fkf6f80hfabdc}bf7Qfg3,b^7~fjf5fmd@d8dGdnbIbUcTfzbK3=1ge(dNdP0d0X0T0EbR0efOe0e`1Ye|fTe eDeb6C12b7bjf3f=f70Xf9fyf)fh7TbgbicWf:f!f?f*9Bcwf@d_1L3J0r0-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

.128013,héD:SîonRk7àvI*my/Ntl5=2.wfLsi q9u-E6pe3(1_ègrPO8cad4T0x+[;]b)C050#0O0v0!0F0w0E0G0Z0w0!0E0E0y010v0F0N010406050E0J0r0r0!0V0s040g0i0w0J140i0j0G020!0r0N0,0G0k0O1e0V0H0J0O0E050t1b1d1f1h190N04051M1F1P0t1M190#0F0o0|0~10120~0j0U0J0!0U0O0K0N0s0v0c1o0G0c0F0U0c0w1^0c0v17050@0.0w0O1Y0 11011@1_1{1_0v21231 0v0V1N1:0|1k0E0N0!0j120z01251!010C0_0O0j1s0O1 2n2p2u272x232A0r2C040a0G0W0V0i0N0i0E0F1n1p0=2l0V0V0O0Z2X1F2E0j1N0t1:2-2h2j2i200#2G1#0F0j2z2U1 1V1X0}262`2|0j0i301 0N2$1N2+2-3d1a2o1p322v360V1e0w1 0!1?2$0C12030S0S0Z370O1{350i0K0P0K0R170G0R1F0!3e3h183g2F3j273l3n3p3r0O3t013v3x3z3B2}3E0K2s040G0z3L3N2p3P2+2_013U0!3o1N3q0c3s3u3w3y0=3(363*0P3I0P3:2*3O193@3S123`3|053~403!423%2{3)3F0$3I0$4b1G4d3Q3i1Z3T0i3m3{3W3 3Y413$444q463F0x3I0x4w3d4e3h3^4i4G4m3#433A4M3D3F0M3I0M4S4y4f4B4h4D3V3}3X3Z4!4p3C3*0m3I0m4-3=4U3R4:3_4=4F4@4H4_4o4L4|3F0Y3I0Y512,534A33564E4j4l4I4n4K4$5e0K0I3I0I5j3?4V4g5o4?4k4^4J4#454(3G0(170R0(5B5l4W575q5I5t5K4%3*0R3H045$5S4z5U5p4Y5s4`5d4r3G3,0R3/0t3M4c3=1Q3b1F302:0#2j2^5E4#2 1W1N3a0O3c3O5|2,054#6d2F0F0#123w2+5#3W6l6n5u5L6q0G2K0O6t5Z5w5%4b4/5n0l170=0C6f6j5m2v0B3I6L5+5E0j0C172{1V0Z0O6R6F2v16040Q6#5D550j172e0O0!0J6+545n6(0b6L0G6S6-170Z0F226!4x5}6$276(0/0f6L19756g3@6s016o3h3*3,5H7h5c5v5=2s6x2B6A4{7r1 5`3-0G7B6~5n6.040=0.1m6|7D2v0i170y7K77120r0F175R7e3P7X5+7o0S6p3F484@7#6B5=487t2L7v5;4N3E7y3M7B7C7R3_172x0j7Q6,5n7N047P7X6}7|0j0.172J6@6N78176*7Z896/0!736=8e3^79816^7M170K8s8f7S7U5(7c8p7#7%0K4t7*6m7i6u5!4s2t6y7;7q7?8H3:7`88822v6H040B1@238x4W6I0O7I0v8(5E84020w0v0,863d8W8t3T7~2{8p5E6(7b7X7d3f7g8J7j2p3*4P8I8Q6v4O8O7u8K7,7?9b8U8V7`7L8|047T1{0O6?879p12848^3O8`8y016(8i958X9q7H7J9w7|840*8.6 047 8 558r9M9I9y170t0t9Q5n7T175_4T8D977$7k4)6r9.9j5M4*7/6z9i7w7?4*2-7_9n7{9Y018Z0F6K9X8{4h70728%a99D8:8=0,9%3k8l8n9v9Haa9E170+9U7E179s0F9uau6%170-929,8j4V8E9:0K4~9c9|7=5M4~9`9d8MaK7^7Aa28V9x7}9S8~af3^9zak9qaxaza%8/8va*8z5P8CaG6k9.8F5gaM7p9e0K5gaRaN8R5Ma|9ma2aZ8Z4$a88_aZ7F7173a;019z9A3=9C8)046:8oa^9D6(atbsboa,ao6e7|6(aDa@ap1paI993F5ya}8L5w5yb2a~aTbKb7aXa3aq8Z2$0v0J0V80a.9RbybEbAaHa`aJ5Q9=aS6C5ObPbM5=b/a0aW9nb9173A0E74bF8q17aE4ybwbH0j5#6D3q7+9}5M5$9g7:b3a chb{bUaY8k7G8+9Lbd9N7Obi7Fb)b%83179PcA2v9)8B939-6t8F5^b:ckaTcMb@9@5#7m7zcpa4bX0?b!b$cucX0Z170u1oc2c73f0t6i5~6c60691F0v63c^2?2.8m232-611L6M3^2$0r0S0C0!0l0O0S0c7)1x1z1B1D0Gc65}1S3P303^0!0#0r1o2W0F1=2{0C841Ldpdrdt2X0K140v2f041x0Z0c0O0VdL246Y1;0v0i7Tdh0G2W0d0V0!140o240f0G0n2l0j2A0h2h741T1O040p0w0G0E001*2W0G2Z0wd|0w0U4D2W0c2Ld 242$dPdOdMd 0FdL0idTdV1C2G0Fdh0A1Q7Yd10;1WdBds0jdudw6Udz1OevdDdvcadGdI0D3qebdMeddQ24e16XegdQ0J0Gczd=1M0D240Z3{0Z0Jd_e000eR6Zd eUbyeVdZ2W24dT1m3Y0i0F0{dh0wdh0{3y1d2z0@0F2$0E0A0G0p710G1=3a2S2U246h3z3^1$1(1*1,1.1?1|2b1}2Da4cy0_aybzbmaZa)cE8g6)aA9Jcs8-fE9Z04cDc$aq7F9Tbw90170/bi849#bicG9+6ec/3z04epdmd20X0V0bd 2pf1dNf50j0{fmfo0{2Zff0Ud!1I2X2lf30G230G0:f:0~0Gf50wg70=0{f4ay0Vgh0E0vg60F7T0v0d0Of90:e!e$e(6}4#fl2pfn1+1-0sfr2a1|1~d36Tawfya-fPagcwfLarfGfT9R9KfKgQa(cCcx8}c#b+aq9Wg!a/04fZgTf#6Rf(0=3-0N9ugn2o0Vdye|0G0O0)0Z0d0=0V0|0?0ve@0^geePgpe?f90L1p3Y0C0?f:2Vg6di0=0J0)dX0j6Ydifj2Z5Efm1)gEfq291`gJfvfQ8*8,g?6ih1gnhye!55hBfogFgHhG2chI9DfRa$c.hN0E1ogng02p0#0Ega9uh7h)g5hQgB1%hCfpgGhFftgKbehKct9BfCg$gTh#g)dlhNg`1md 0d2o10dNg63q0o3{h;gogqgteqd20ef=h80|0 fd3igxg7eQhveSe.eVgOeU2z0G1mfy0E2pgngb0~0V1+b!e9g6e+0jha0VilhddjgzfkhAgCh{hVh~hHgLb(iHfXgSg-gXfJi?fNbi9FfHaba#i92,bng.8wi7i2gZg*btfVi{g:i^9(8Af$iaf)f+eX04itf_hpiw0{3a0dc1iYh:0Gff220Te82|d`242Tc1jyixe#f/h11p0W1/1;0jh:ghiYgj0{0j00h*jIf}hb0_iBhfhaf90%0ie_g h/0G0g0FiW1=0!ild~1eex0Ne(0de9jWdU0.f70G0C0wei0@iYf`jF2RjAe8c1d!d~0!0Ng}eU92d=do5Edqeweyhj0)1s0NdIdAkrdCexdEeH2M0L0)1ykyd;dneui*h`hU1.3y1pi.hYi:5n2I2z2B172O0:1oh)g7jO1:1o6R6b6M3;6gc:96cK7k0$3GcNbQ4|k`3HcRcf8Gk{5X5:b4l36D7zaZ0U6(020U8?lelglf1vi a!gYi{blj3aZ0r6V040z0A7Wjf8u040q0qf!8A5Q0z4acIc8b-99k`7mcd9?l2lMci9{k}3)lRl5lU46lRb{lbldljlh0,l)6}gWavj16|bVgR85f!ltlvlxi4cvlAlCg;lE0(lGi{fOl{a4cG3KlIc3c9l37)7nlPaOmclSb;lV7@lXb^lZ7@l#7|lc17l)muljl,c3gMcrhLgT9Og%l/87j4550Z5%03ieigc12LiYiVe#2o71grb*76b,k^lL8Gk|mn3Dk`4tl1mgm)2t5a5JlQm#mqa4e46W6UmW7fmY8K6pk`9llOmjmo4Pm+l7n0m.4ZlYm(0K9llamrl%linilkl-aBgVmyi_mBly27mDj7mFno6_jcmC9!lD9*l:aZmJ17mL0#if261yf4mRkk0!mUk0k8gkiVgbh?2Lm{d3mbk`9 men3nc9_8PcOk~0K9_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%l3b1o9o6oPodmr840Y0A0I0Y0Y0$0M0x0M0m0$0P5$0x0Y0O0*0P0(50m9f%c:1S5 0tesp1697dp20=gd0E04.

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

.128013,Dhé:SonRk7àvmy/tl5=2.wfLsi q9u-6pe3(1_ègrP8Mcad40x+[j;]b)050W0J0r0V0B0s0A0C0U0s0V0A0A0u010r0B0I010406050A0F0o0o0V0Q0p040g0h0s0F0~0h0i0C020V0o0I0%0C0j0J180Q0D0F0J0A050q1517191b130I04051G1z1J0q1G130W0B0n0?0^0`0|0^0i0P0F0V0P0J0G0I0p0r0d1i0C0d0B0P0d0s1/0d0r11050.0)0s0J1S0_0{011.1:1=1:0r1{1}1_0r0Q1H1*0?1e0A0I0V0i0|0v011 1U010y0:0J0i1m0J1_2h2j2o212r1}2u0o2w040a0C0R0Q0h0I0h0A0B1h1j0,2f0Q0Q0J0U2R1z2y0i1H0q1*2%2b2d2c1`0W2A1V0B0i2t2O1_1P1R0@202;2?0i0h2`1_0I2W1H2#2%37142i1j2|2p300Q180s1_0V1-2W0y0|030N0N0U310J1=2 0h0G0l0G0M110C0M1z0V383b123a2z3d213f3h3j3l0J3n013p3r3t3v2@3y0G2m040C0v3F3H2j3J2#2:013O0V3i1H3k0d3m3o3q3s0,3Y303!0K3C0K3*2!3I133.3M0|3;3?053^3`3U3|3X2=3Z3z0X3C0X451A473K3c1T3N0h3g3=3Q3_3S3{3W3~4k403z0t3C0t4q37483b3/4c4A4g3V3}3u4G3x3z0H3C0H4M4s494v4b4x3P3@3R3T4U4j3w3!0l3C0l4%3,4O3L4*3:4,4z4.4B4:4i4F4?3z0S3C0S4{2$4}4u2}504y4d4f4C4h4E4W580G0E3C0E5d3-4P4a5i4-4e4/4D4V3 4Y3A0Y110M0Y5v5f4Q515k5C5n5E4X3!0M3B045W5M4t5O5j4S5m4;574l3A3$0M3)0q3G464|5#5y4R534T565p5,0M425Y445;3+5e5^4 5`5B545D4=5 4n5Y4p645?664)5h695l555o5F5V4J5Y4L6i4r3,1K351z2`2*0W2d2/5y4V2_1Q1H340J363I6j1H4V6O2z0B0W0|3q2#5V3Q6V6X6q5U3z3B0C2E0J6%5T5q5X456l2p0k110,0y6Q675h0x3C6}6@3N0y112=1P0U0J0N3b2?725x4 10040L7e4~6m110s0h0P7k5g2p7h0*0f6Q136x2$5#6$016Y3b3!3$5B7C5}6r3z2m6,2v6/6d4H3#1_640C7W0C6~6^766|7z3%7Z210h7004300r6Q7Y734b7n7p7r3/7h0#7_5y0o0B115L7%7)0|7h0(7w7%7y393.7J0N6Z3z617I6W7D6(5q427O2F7Q5+7S8h7V7X8v84016_042W0r0F0Q0i7:8x7 817x7_8d8f0G6f8i8q5~7S4n8o6.8k6:5,8P648a6P8c8j7E2j3!6t8Q8X7R5G4J8V8R7L0G8-8u7W8x0i6`0J0)1g8G7=010h110u937f5h8I04824N8L8)8e7F4Z6#9h8Y7S4!8?8/8r5G4!2%3G8w948~042r8F7%7;9a2p9604989D8}0)7n2t7}7g117j839y7@7q9T9F217u997l9G110G9#7s219c3E899g6%8N4^4.8d9n5G4^9q7K6)3y7U3G8$6y8(9;9j0G5a9@9m8:3!5a9|8l5,a83*9x9Y0|8z0x1.1}9*4Q8 917/9K949H020s0r0%9J379E9$3N119B9P5h7h889f9X6U9h8N5sa98@9~5sae9_3!aSai8v7X8}117 1=0J0Faq5y9HaC3IaE9+859RaJ3eas92avak95110!a.68aH2=a`9Z110*b35h9H0q0qbb2p9c5:aN8b4P8Ma65K9laU6;5IaXab6*5I9v3%a$8|948z0B7$aDa(047o9WblaFa^047|aOa@3:a)0:0Ba,bg7*9(bX0|9-b7bN0(b!957,2j0Wb*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-0haucsa b@7^c15yb{c%b4cubUcwbLbR86aM4scya5c83A8hcCch7S602ncH9}6;8t9wclajbMbS9Ab6a~d8a:b?bTa+c0cZddbZdcbRb$cxc/0Cc70i5V8Pc|cI8^0M8Ud1afc~8!d5cOcn043u0A0Jb_aLc5dqds6sbqdx9~0M8=dBaY6*8`dFd6a?ar040,atb/97dfc,dhd,04b2dm3/dobk6P0q6S6z6N6B6K1z0r6Ee22-2(0V1|d 0q6C1F6TbR2W0o0N0y0V0k7a0d611r1t1v1x0Cc=6y1M3J2`3/0V0W0o1i2Q0B1,2=0y9H1FezeBeD2R0G0~0r29040TeG0ieI1K3J1G0z3k1=0A0r1~2i0`0e1~2t0C2i0Q1m0O2be.e(0C0F2?0Ce%e)0C2b0Be-0w0C0c2j0=790?0_0G0s0m0b0?001x0r0C0$0F78b 0Z0C2T0I2tdK0Q0C0me{e}2W0U0d0J0QfC1~781+0r0h7 er0weY7yec6B0-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