Aller au contenu

Exercices de dichotomie

Exercice 1⚓︎

Compléter la fonction dichotomie :

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

  • renvoyant True si cible est une valeur de nombres, False dans le cas contraire.

Exemples

🐍 Console Python
>>> dichotomie([1, 2, 3, 4], 2)
True
>>> dichotomie([1, 2, 3, 4], 1)
True
>>> dichotomie([1, 2, 3, 4], 4)
True
>>> dichotomie([1, 2, 3, 4], 5)
False
>>> dichotomie([1, 2, 3, 4], 0)
False
>>> dichotomie([1], 1)
True
>>> dichotomie([1], 0)
False
>>> dichotomie([], 1)
False

Remarque

Vous utiliserez obligatoirement un algorithme de recherche dichotomique.

Compléter ci-dessous

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Shift+Esc ; 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

.128013csSbg+9vi^À({ù,FLd0AI6_=tD1u5rPw-7 f.êzTn8xOkéR];eè}Nh4lmqop:à)2ay/[3050s0Y0z0;0j0(0c0J0b0(0;0c0c0y010z0j0,010406050c0C0)0)0;0E0=040d0+0(0C190+0P0J020;0)0,0X0J0V0Y1j0E0*0C0Y0c050?1g1i1k1m1e0,04051R1K1U0?1R1e0s0j0i11131517130P0f0C0;0f0Y0H0,0=0z0$1t0J0$0j0f0$0(1}0$0z1c050|0e0(0Y1%1416011|1~201~0z2628240z0E1S1^111p0c0,0;0P170:012a1)010K0~0Y0P1x0Y242s2u2z2c2C282F0)2H040a0J0F0E0+0,0+0c0j1s1u0`2q0E0E0Y0b2$1K2J0P1S0?1^2=2m2o2n250s2L1*0j0P2E2Z241!1$122b2 310P0+35240,2+1S2:2=3i1f2t1u372A3b0E1j0(240;1{2+0K17030x0x0b3c0Y203a0+0H0B3J1c0J0B1K0;3j3m1d3l2K3o2c3q3s3u3w0Y3y013A3C3E3G323J0H2x040J0:3P3R2u3T2:2~013Y0;3t1S3v0$3x3z3B3D0`3,3b3.0^3M0^3@2/3S1e3{3W173~400542443(463+303-3K0%3M0%4f1L4h3U3n1(3X0+3r3 3!433$453*484u4a3K0D3M0D4A3i4i3m3|4m4K4q3)473F4Q3I3K0w3M0w4W4C4j4F4l4H3Z413#3%4(4t3H3.0I3M0I4;3_4Y3V4@3}4_4J4{4L4}4s4P503K0Q3M0Q552;574E385a4I4n4p4M4r4O4*5i0H0h3M0h5n3`4Z4k5s4`4o4|4N4)494,3J0t1c0B0t5F5p4!5b5u5M5x5O4+3.0B0B5T3O0?3Q4g564D5Y5t4$5w4~5h4v3J3:0B3?5.3^2;1V3g1K352^0s2o2}5I4)341#1S3f0Y3h3S5:634)6j2K0j0s173B2:5)3!6q6s5y5P6v0J2P0Y6y5%5A5+2=5/4?5r0T1c0`0K6l3;5=5I0P0K6O0j0b1_0z0+0)0j0Y6R6T591b040m6*6L3p1c3b0)0e2+1J4B3_6+5r6-0p6R0J6~6=040b0j276)6|636;2c6-0/0-6R1e7b6o1u6x016t3m3.3:5L7n5g5z5|2x6C2G6F4 7x24610J7G737d4l6O0Y0e1r72742c0+1c0y7P7J016%1c5V7k7j3k3{7u0x6u3K4c4{7)6G5|4c7z2Q7B5{4R0H7-3@7H7I5H590P1c2C0P7V805r7S047U7k7 585r0P0e1c2O6:872A6-6/7k7Q7K046@6_1I8k8e8m1c0/868x7R1c0H8B5q2A7Y045-4X8w7m6r7o7*7q4w6w8P7v6A8T7?6E8Q7:7`4x6J3;7H8q016N040G1|288G4!7L7N0z8?5I89020(0z0X8b3i8d8H3X83308N3|6-7h7#997)7+0H4T7.8V6z5(4S2y6D7^7w7`9i7}7~8+7W82046%200Y0C8{5989923S949a1c8o7%8l9604849E881c0g9S750`8_995I7f9!9F1c0?0?9%5r8J608M8p7(9k9g4.9j9q8X0H4.8Z9`9m9|7E3Q9v9w9O178.0j6Q8c8,9y77799W8D8a9H3_9J6U6?6$8u6{9N8C176-0@9,759A6(9D9;a6016-0W9c9:ar8O6y9g529_8#7C7`529~aO7_5QaM9ua47~8,8.2+0z0C0E85ab7W0T0b1c0O0E1H7i9e9?8S0H5kaN8Wa05kaSa}5Aa{aX9va!1c4*aa93ac1cae8=a+aC8}0f90ag8r8t6`aw7e1cavaBas3}1cay9Cboat1caFa?bsaJ8Q9g5Ca|9l5A5Cb0bJ5|bHb4aYal818^7Obfbt9Gbkbu9z0~azbZ899VbW95178J8L4CbD0J9fa_5U8U9 6H5SbM8$5Qb^8)bRb6043F0c7aaI9K04aGb:c8b?2u5)6I7t9kb~cg9o7AaT9rb ch7FbRa5bt9y9Rb+3|bYcyamb#9BaAba7W898FcB59b.bCcda^cf3K5 b_co9{cSb}aPb 7scs7Gc3a$a(a*cGaCa-1c0q3 c6cN6k0?6n646i666f1K0z69c}2{2?0;792=671Q7l3|2+0)0x0K0;0T0Y0x0$7-1C1E1G1I0Jcb6}1X3T353|0;0s0)1t2#0j1`300K891Qdudwdy2$0H190z2k041C6Z0Y0EdQ0J2t0E0J1!6Z0+6#6%7a1Y1T040v0(0J0c001/2#dX000C1u3 0f4H2#0$2Q2L0jdm0L0J0r292j0Y0;0CdU0E0j102EdU1k1x0Z2m290s0+d;1f2m1t0f040+271}0;6#0jda2E0z0J0Mej0J2m0j0U2/ep1,040L1V3T1R0l110$0;dmb=0z0U0EewdA0P0p0J1`c6dX1D2u2(2!0J130J0i3 9CdW0beAeZ280J1IeB0U0fe@0J0.e:3v056nbd7a6ndoeO1e0C0(3T2004e/0+0C0je%1`2+0P0iem290j1i0U1!ew1DeA736na:a=c@3E2=fj1efje/3be$110{0z29fae~0ceB0cemeB7hfgfi0jfk0C0,eYaz2+f4f6e=e@a(fQ0P2mf30-b=d,dd1reSdRdQdW0s2u10e;dV19ek2W2#eke9e6e80J6/6n9Yf 0y0Jbwe90g3N1K6n8A0?fK05fjdCf,e^29f5e;e?28f?e`f^e|29f{0~0Jf~eBg2g2dXg5f:g86(0Jf20CdT0sged328gggifI840Jgmgo0J0HgrfH0`04gugw0?f$7jg{g}d)0r3v0N1tek292+gR0$290m0(000U0b1keBe{29f8g,98g@6ie~eBhlg^gk8`hog_d-h7fyfneBf56ZeU1HeWeYe!1`f{fl1u84d;dV0J0;fteyfDhm1u8~90e+9Zhwe%0b00e 0JeVe;hs6ifagsfI6Ch)fWef10g40Pg6e5g(e70Ce20S1ufY0EeB2(e;0efm12290{0JfrhThk6nc/0 fbfIeNdr7jd60_1#dGdx0PdzdB6VdE1TiudIe#dK2#dN0#aof.1j0Rfw3 e+eFfm0Eh`29iag!286{d(1R2V32h|0Jd@0Jhfhhd=30dYfviw19iOh.9Q30g;h!bVfcf1iOf58,1kd|1jfS0R1c090m5U0k0h09gu3ie%0me`h+fnfVeB2m0Z100feZ0P0s0/ioiZ040AgUe}0,eyh610hg0cfp0of:fU0Ph@eB2t103f0Uc6f^0Yfp1u0E0U3 ece5fmh}106#a(iT0JiVicjP2Z2!790cjv3Th0fj0ue96hd$dWj)0EjVhRi(1ui+i6e~fsey1`2(j1eb1^j40Yj604j8090KeZ0b0nja0h0!0n0:0!jd6Rh%jMf/1!f.kc7Wj2kffAkij80D0J09192Q10ja0Qkw8pgvf(fLf(j{e+0CiM0Zd~k0k23vi)k6hik92W2%hkkEked}kHj70mklkn0nkKkMfwdnkQkskukS93h(h*f5kBk;aCkFk@j5k_0:k~kNl10t0k0Il5c?gwj`30e/e.hB290Llx1KlqkXgefr19k$j#a(k)k4i*hgk70sh)k.1`kdj3k^kjk`km0;kokql30k0n0^0t0!kvje9Il7h^l9jCd=2E0ika1u0Biog fhd70ulsfogTi%d@2920fWh6eF0}0(e}lRkGlflUkqlo3_e%eegg0,1qedlP1ul%iQj*e(i40}fX0je:he0(0U2Qf^hVg^h:hwjleajReAj@iq6fiq0{m90c04.

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"
(Shift+Esc ; 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

.128013c*sSbg+9vi(,d0I6_=tDC1u5rPw-7 fE.Tn8xOkR];eéèhN4lmqop:à2)îay/L[3050n0R0t0+0k0X0d0E0b0X0+0d0d0s010t0k0#010406050d0x0Y0Y0+0z0,040e0!0X0x140!0J0E020+0Y0#0Q0E0O0R1e0z0Z0x0R0d050-1b1d1f1h190#04051M1F1P0-1M190n0k0j0|0~10120~0J0g0x0+0g0R0C0#0,0t0U1o0E0U0k0g0U0X1^0U0t17050@0f0X0R1Y0 11011@1_1{1_0t21231 0t0z1N1:0|1k0d0#0+0J120(01251!010F0_0R0J1s0R1 2n2p2u272x232A0Y2C040a0E0A0z0!0#0!0d0k1n1p0=2l0z0z0R0b2X1F2E0J1N0-1:2-2h2j2i200n2G1#0k0J2z2U1 1V1X0}262`2|0J0!301 0#2$1N2+2-3d1a2o1p322v360z1e0X1 0+1?2$0F12030r0r0b370R1{350!0C0:0C0w170E0w1F0+3e3h183g2F3j273l3n3p3r0R3t013v3x3z3B2}3E0C2s040E0(3L3N2p3P2+2_013U0+3o1N3q0U3s3u3w3y0=3(363*0:3I0:3:2*3O193@3S123`3|053~403!423%2{3)3F0W3I0W4b1G4d3Q3i1Z3T0!3m3{3W3 3Y413$444q463F0y3I0y4w3d4e3h3^4i4G4m3#433A4M3D3F0q3I0q4S4y4f4B4h4D3V3}3X3Z4!4p3C3*0D3I0D4-3=4U3R4:3_4=4F4@4H4_4o4L4|3F0K3I0K512,534A33564E4j4l4I4n4K4$5e0C0i3I0i5j3?4V4g5o4?4k4^4J4#454(3G0o170w0o5B5l4W575q5I5t5K4%3*0w3H045$5S4z5U5p4Y5s4`5d4r3G3,0w3/0-3M4c3=1Q3b1F302:0n2j2^5E4#2 1W1N3a0R3c3O5|2,054#6d2F0k0n123w2+5#3W6l6n5u5L6q0E2K0R6t5Z5w5%4b4/5n0N170=0F6f3-5+5E0J0F172{1V0b0R6L6N5516040l6W6F3k172e0R0+0x6$5D6Y170m6L0E6X5n0J170b0k226V4x5}6%276Z0)0$6L19706g3@6s016o3h3*3,5H7c5c5v5=2s6x2B6A4{7m1 5`3-0E7w6^6(040=0f1m6?7y270!170s7E72120Y0k175R793P7R5+7j0r6p3F484@7V6B5=487o2L7q5;4N3E7t3M7w7x7L3_172x0J7K6/5n7H047J7R6@7?0J0f172J6.545n6Z6#7T836)0+6~6,885m2v747{892v7~0C8n8k277N5P778j0E7V7X0C4t7!6m7d6u5!4s2t6y7+7l7-8D3:7;827|2v6H040B1@238s4W6I0R7C0t8!5E7~020X0t0Q803d8S8o3T7^2{8y5E6Z767R783f7b8F7e2p3*4P8E8M6v4O8K7p8G7$7-978Q8R7;7F4h177N1{0R6-819l017~8;3O8?8t128b8{556`7A8%7D9s7?7~0h8*9D8_7`8d8T73170)9M7}170-0-9V2v8v045_4T8y8A7f4)6r938H5w4*7)6z9e7r7-4*2-7:9j7=9R128V0k6K9Ia07@046|6~9!7G178-8/ab9m046*8i9Q8@9A170/9C6_9n0_0k9qaq8l170P8~9)al1p9+953F4~989^7,5M4~9?998I0CaH9i9~8R9t9E7_ag9u7IaY9E9oau9r8=9t8qaY9$3K8 9*9/8B5gaI7k9a0C5gaNaJ8N5Ma@aS9j9t8V4$a4a*8ea86}8Za5amaZ7 9w3=9y8#ai8g23ak91a66ZapaCbka%avbt8|ayaA4ybtaE0J3*5ya^9:5=5ya}a_aPbGb2aTbj5E8V2$0t0x0z9Pb8a6a$atbwaBbp6ka=9,5N9.aO6C5ObLbI7-5Q7/7v9~b4173A0d6 b)9z018}8xbCb+aF3G6D3q7#9_5M5$9c7*a~a`cf9|b`bQbR9N9F8(aY9va#as9pa)9xa+179Lbdc2a.c5c18zc7bE3F5^b.ciaPcLb=9fce7h7uaU7?bT0?bWbYcycW0b170V1oc0bB3f0-6i5~6c60691F0t63c@2?2.bmc;0-611L6jc22$0Y0r0F0+0N0R0r0U7Z1x1z1B1D0EbA5}1S3P303^0+0n0Y1o2W0k1=2{0F7~1Ldodqds2X0C140t2f041x0b0U0R0zdK246T1;0t0!7Ndg8z0t0S0z0+140j240$0E0%2l0J2A0*2h6 1T1O040p0X0E0d001*2W0E2Z0Xd{0X0g4D2W0U2Ld~242$dOdNdLd~0kdK0!dSdU1C2G0kdg0H1Q7Sd00;1WdAdr0Jdtdv6Pdy1OeudCdubEdFdH0.3qeadLecdP24e06SefdP0x0Ebv9rd;1M0.240b3{0b0xd^d 00eQ6Ud~eTeVeUdY2W24dS1m3Y0!0k0{dg0Xdg0{3y1d2z0@0k2$0d0H0E0p6|0E1=3a2S2U246h3z3^1$1(1*1,1.1?1|2b1}2Db!cva(csa!cC3^9Bbxcp7B9HbZbe9Kcu04aXfE8a9Tfz049Ya-7O9%6Wc.3z04eodld10M0z0md~2pf1dMf50J0{fmfo0{2Zff0gdZ1I2X2lf30E230E0vf*0~0Ef50Xg10=0{f4au0zgb0d0tg00k7NdX0Rf90ve!e$e(6@4#fl2pfn1+1-0,fr2a1|1~d2bub$cxbicz7 aYfDcG6O8$crfB8+cAfLfNgN6:049UgR557~fTg!5n9$9(6efY0=3-0#9qgh2o0zdxe|0E0R0L0b0S0=0z0|0?0te@0^g8eOgje?f90G1p3Y0F0?f*2Vg0dh0=0x0L8z0J6Tdhfj2Z5Efm1)gxfq291`gCfvbe9EfG8)7Tg-6cg`ghhre!55hufogygAhz2chBc2aW8`hG6id_1oghf`2p0n0dg49qh00ddTe7hLgu1%hvfpgzhyftgDaVgPfHc#a6fKg(7zgVg,hZg:1md~0S2o10dMg03q0j3{h,gigkgmepd10uf,h10|0 fd3igqg1ePhoeRe.eUgGg`1p1mat0d2pghg50~0z1+bWe8g0e+0Jh30zihh6digsfkhtgvh@hQh`hAgEgO04eVfRbh2,coarcqh gI9JgTi39S6!aw8^fMhXfIc2a,i|ahhEi angYfRg%j33^g*fX6if#eX04ipf:hiis0{3a0Sb iTh+0Eff220Te72|d_242Tb jwite#f)iE2P1/1;0Jh+gbiTgd0{0J00h#jGf@h40_ixh8h3f90I0!e_g^h*0E0e0kiR1=0+ihd}1eew0#e(0Se8jTdT0ff70E0F0Xeh0@iTf;jD2Rjye7b dZd}0+0#g?eT8~d;dn5Edpevexhc0L1s0#dHdzkodBewdDeG2M0G0L1ykvd:dmeti#h?hP1.3y1pi)hTi+552I2z2B172O0v1oh.g10AjM1o6W6bd23;6gc/926t6p0W3GcMbM4|k@3HcQcd8Ck^5X5:a l06D7u9t0g6Z020g8/lbldlc1vj9a7j8j6bfi:6M7?0Y6Q9%0H7QjegS040c0cfU5P0o0(4aa:c6k=7fk@7hcb9/cRl07n8LcNk{3+2t5a5Jk lJb_l8lalgle0Ql%6@fOi4j29x9 fJfAlv55lq170(ltfRlylA5(lClEl=9W04cBm19#fVa/b(6ek;8Gk?7.bHlNk@7(lQk`3)mhlU4Zmk46mmcll!adl$mv8/l*gWi?lkm5acm3gUl-bii=2v0b5%03iaicb 2LiTiQe#2o6|dXcFma4VbDl08PlLb/ml8Ccg9@mp3Dk@4tl2m-m#lZ7?e36R6PmX71mZcIl09hm%lRm)4Pk~aKn0mn5/m=k@9hl7m^l#lfnhlhl+i}8cmz7zmBi0l:mEllhWc!m}be8mllg$l}g+mH9tmK17mM0nib261yf4mSkh0+mVj}k5geiQg5h.f3m|7am~lH95k@9{7ilMlX0C9=mjb?m.n,n95bn/l0n(nea6m_04dwnYgEm!k@aRn2nbaQm+m(mqo6m;n@o2m@n{ngl(mwnjnnj0npi_i1i{mCjanmmYhC9OfR8rnth~hFokjagZoqbf9ZlljglFcGo1a{k_ocoMn6l4k@a|lV5Yn+b1n`ben|0K0H0i0K0K0W0q0y0q0D0W0:5$0y0K0R0h0:0o50oJi6fZc:2-erc 6978p10=g70d04.

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"
(Shift+Esc ; 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

.128013csSbg+9vi(,d06_=tD1u5rPw-7 f.n8xkR];eéèh4lMmjqop:à2)ay/L[3050m0L0r0#0j0Q0c0B0b0Q0#0c0c0q010r0j0W010406050c0u0S0S0#0w0$040d0V0Q0u0~0V0E0B020#0S0W0K0B0I0L180w0U0u0L0c050%1517191b130W04051G1z1J0%1G130m0j0i0?0^0`0|0^0E0f0u0#0f0L0z0W0$0r0O1i0B0O0j0f0O0Q1/0O0r11050.0e0Q0L1S0_0{011.1:1=1:0r1{1}1_0r0w1H1*0?1e0c0W0#0E0|0Z011 1U010C0:0L0E1m0L1_2h2j2o212r1}2u0S2w040a0B0x0w0V0W0V0c0j1h1j0,2f0w0w0L0b2R1z2y0E1H0%1*2%2b2d2c1`0m2A1V0j0E2t2O1_1P1R0@202;2?0E0V2`1_0W2W1H2#2%37142i1j2|2p300w180Q1_0#1-2W0C0|030p0p0b310L1=2 0V0z0A0z0t110B0t1z0#383b123a2z3d213f3h3j3l0L3n013p3r3t3v2@3y0z2m040B0Z3F3H2j3J2#2:013O0#3i1H3k0O3m3o3q3s0,3Y303!0*3C0*3*2!3I133.3M0|3;3?053^3`3U3|3X2=3Z3z0P3C0P451A473K3c1T3N0V3g3=3Q3_3S3{3W3~4k403z0v3C0v4q37483b3/4c4A4g3V3}3u4G3x3z0o3C0o4M4s494v4b4x3P3@3R3T4U4j3w3!0A3C0A4%3,4O3L4*3:4,4z4.4B4:4i4F4?3z0F3C0F4{2$4}4u2}504y4d4f4C4h4E4W580z0h3C0h5d3-4P4a5i4-4e4/4D4V3 4Y3A0n110t0n5v5f4Q515k5C5n5E4X3!0t3B045W5M4t5O5j4S5m4;574l3A3$0t3)0%3G464|5#5y4R534T565p5,0t425Y445;3+5e5^4 5`5B545D4=5 4n5Y4p645?664)5h695l555o5F5V4J5Y4L6i4r3,1K351z2`2*0m2d2/5y4V2_1Q1H340L363I6j1H4V6O2z0j0m0|3q2#5V3Q6V6X6q5U3z3B0B2E0L6%5T5q5X456l2p0H110,0C6Q0B676m0C112=1P0b0L0p3b2?6Q6 2p10040k7a6@3N110Q0V0f7g5x4 7d0!0X6Q136x2$5#6$016Y3b3!3$5B7y5}6r3z2m6,2v6/6d4H3#1_640B7S6~7h0|6_040j6|7v3%7b210V0y11300r6}7%4b7j7l7n4~5h7d0)7?5g2p0S0j115L7#7/017d0J7s7#7u393.7F0p6Z3z617E6W7z6(5q427K2F7M5+7O8g7R7T8u837X2W0r0u0w0E7.7V017~807t7{0B8c8e0z6f8h8p5~7O4n8n6.8j6:5,8O64896P8b8i7A2j3!6t8P8W7N5G4J8U8Q7H0z8,8t7S830E6`0L0e1g8D7o5h0V110q927@7}7 04814N8J8L7B4Z6#8(8k5,4!8=8.8q5G4!2%3G8v8E8}042r8C7#7U932p9504979B8|0e7j2t8J5y7d7f829w7;7m9R9D217q987|7(110z9Z3/8G5Y8I9V6U9k8M4^4.8c8X7O4^9o7G6)3y7Q3G8#6y8%6%8M5a9=9k9@5G5a9`9l7Oa53*9v9W7W110y1.1}9(5_8~907-9I8E9F020Q0r0K9H379C997i9y2=9N7p11879e9-1j9g8*3z5sa68?9|5saba83!aQaf8u7T8|117~1=0L0uan4 9Faz3IaB9!0|9PaG6map91asah019F0ga,a_aE9A8aa}9Ya|aC0|9F0%0%b19a115:aKb59.a39h5H9jaS6;5IaV8/5V5I9t3%a!8{8E7X7ZbeaD7k9Ubja=84117`aL4Qa%0:0ja*bDba9$bS8F9b3EbM9O110JbV7)112j0mb%7*047,bV9xbFa^7cbKb?aDa(bQa+bZaH04869,bH8K9/bm5Wbo9p8R5Gc7bs9q5V6=8`bya#bA118y8Ab4a:a$04b{bR889fc5aO5-c89{6;7J6-bp5 7Dchagb9017X4W7!aA83b(b.0VarcO9S04b=b~7^b^cY3ebOa)b}c3b!c0aJ4sbMaN0E5V8g3k9?bt6*8mcDc98@609~bxcicja}9x9zb%96b:c%b|d7049%b8bI9*bYbi8$4Pc:5V8Oc@a7c_3A8Tc|cA6ed0d28w113u0c0Lb_a?aIc2dkbk8j8M0t8,dpcE7OdM2nduaccb8_9ud2d3cJ9x0,aqdca/3,a;bNcrbPctcUa}a bVdhdH6y0%6S6z6N6B6K1z0r6Ee02-2(0#1|d}0%6C1F6TbI2W0S0p0C0#0H760O611r1t1v1x0Bc-d_1N0+1Q3/0#0m0S1i2Q0j1,2=0C9F1FexezeB2R0z0~0r29040ReE0EeG1K3J1G0(3k1=0c0r1~2i0`0M1~2t0B2i0w1m0N2be,e$0B0u2?0Be#e%0B2b0je+0D0B0s2j0=750?0_0z0Q0Y0l0?001x0r0B0T0u74b|0G0B2T0W2tdC0w0B0Ye_e{2W0b0O0L0wfA1~741+0r0V7~ep0DeW7uea6B0-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].

Crédits⚓︎

Nicolas Revéret et Mireille Coilhac