Produit maximal de k termes consécutifs

Il est conseillé d'avoir résolu Somme maximale de k termes consécutifs avant d'aborder cet exercice.

Écrire une fonction produit_maxi qui prend en paramètres un tableau d’entiers positifs ou nuls valeurs, et un entier strictement positif k. Cette fonction doit renvoyer le produit maximal de k entiers consécutifs du tableau valeurs.

On garantit que le tableau valeurs est de taille au moins égale à k et que k est un entier strictement positif.

Examples
>>> produit_maxi([0, 1, 2, 3, 2, 1, 0], 3)  # Pour les termes consécutifs 2, 3, 2
12
>>> produit_maxi([0, 1, 2, 3, 2, 1, 0], 1)  # Pour le terme 3
3
Nombre d'opérations limité

Il est possible de résoudre ce problème en calculant, pour chaque fenêtre de k nombres, le produit des k éléments qu'elle contient. Cette méthode effectue (n - k + 1) * (k - 1) multiplications.

On peut toutefois être plus efficace en effectuant moins de n multiplications et n divisions.

La difference est sensible : pour un tableau de \(10\,000\) valeurs et une valeur de k égale à \(100\), la première approche effectue \((10\,000 - 100 + 1) \times (100 - 1) = 980\,199\) multiplications alors que la seconde fera au maximum \(2 \times 10\,000 = 20\,000\) multiplications et divisions.

On limite donc le nombre de multiplications et de divisions possibles à trois fois le nombre d'éléments.

Indice

On pourra commencer par faire le produit des valeurs non nulles parmi les k premières, ainsi que le que le décompte des zéros présents dans cette fenêtre de k nombres.

On initialisera ensuite une variable maxi avant de parcourir les valeurs restantes en mettant à jour ces trois variables.

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

.128013au x;5So03_[-z,)yv49:dfmg=w*prsh68kbc(+it]e7/Pnl12050w0R0P0b0O0W0F0d0L0W0b0F0F0A010P0O0D010406050F0c0y0y0b0E0r040h0i0W0c0?0i0V050T0}0 11130{0D04051j1c1m0T1j0{0w0O0s0+0-0/0;0G0O0z0G0W1A0G0P0_050$0K0W0R1v0.0:011z1B1D1B0P1J1L1H0P0E1k0P0G0+160F0D0b0V0;0Y011N1x010x0(0R0V0b0y0R1H1*1,1;1P1@1L1`1|0_0a0d0U0E0i0D0i0F0O190V0d0!1(0E0E0R0L2h1c1 0V1k0T1$2u1Z1#1!1I0w210;1D0V1_2e1H1s1u0,1O2E0O2G0V0i2K1H0D2n1k2s2u2Y0|1+2i2M1=2R0E100W0_0d0X2r2$0`2#202(1P2*2,2.0Y2;1,2?2s2D012{0b2-040d0k2 2t0{322_0;35370d0t3b312$333h2.0g3l3d3n3f340i2+362.0H3s2@2%1w2`3x2|380S3C3e3F3g3H3z380I3L3u3N3w3y3i0u3T2^3V3p040X0j3!3E2N3W3I0X2:1d2=3t3#3-3%0X2~3=303@3,2)3P370X3a3}3c3D3o420_0X3k463m3^413X4b3r4e3 494i3(3B4l483v3`3K4r3M3_4a3(3S4w3U4y4o0X3Z4C4g3G4o0Y3*4I404K3I0Y3;2Y4m4t4z0Y3|4U4s3$4X454!4x4h4R4d4)4D4+3Q0Y4k4.4J3O4L4q4@4P4_4R4v4|4n4R4B514W4L4H554$4o0k4N594E3I0k4T2=1n2W1c2K2x0w1#2C3v0L2S1}1k5n1l5l2!4e055t0!2X4/1P0J0_0!0x3l4#3-0B2.5M4*2`0x0_2V2S0c2g0l100e0O5R5G0;0^040M5(4^340_0s360R0c0E0F5.4}015+0p3l0d5N2)0_0J5{335+0q0v3s0d6c615S3g0_0o0R2b0F0l0w1,6l0x1_0#2n60621P0i0_0A6u6f010y0O0_5d3?6d6e5)5:045W0w5Y0P0l2R0V6R0c0)6A6K6x046z4e6J5/6D4b6b6d6v0;5I040x3x6X5/0V0_5%6$6-010i5P042P6?5|0V0K0_0E1,0z0R663v5+5-5B6B6^04657f6K686a4l6I6I6|7h0e72336Z6#2Y6%735;5?5^5`7k5/5+0m7b3$6_7J3-5+0Q6+7p7z336/0O5L6{7g0_7t7X6Y6y7x2=7S3v6)046G306|5+7n4U7R7R7r6h6j2e6m6o0l6q2G1Z7a7#5/6Z0N7(307*3V7,5i3~7@8a3-6/0R0)832!6B7;7Q8f8g636M2b6O5Z6S6U6W845|6Z0C882t8r2`7Z8p6|7U7W7y7_046i6k7}0V6p6r827u3v7w8E386|7,7.2t7:0_7=6H7@8O5#6`8N6B7w8X7K8t5X8w1a8y7E7?6,6B8i8k7M1=8o7o8.7Y048:8^3-8@8A338%3s067q920_6;0E9d8s8;7)6|6~6_1b9g4t7504770V79951P7d9F6g7i9I5}0_5 9y3$9A249L9H7F7A045=1L7D9T0_0q698p9l6K7s9q6w6y9-9J9Y5@5_9#047I9V3o7L9P9e0_0n9:6L7j8m7l0_7P987^9m708M9t9a7!8=7$6!8!8G0;9i9{7c8+9)999+7`8R6n8T7 8V6t9~1=6Z0nak8$6E3(ar6c8K0_8j0F8l5j8naqa98q8O6N6P6R8}0V6V8 aeai0T0TaFaf9j8f8Oaga%859/aB8H9X7C9@ao3V7H9L7h9s7/aR04a890aa6K8La29,a@0;8Za2ana57GaSb6aU9a8Q7|aw8U81aAaha=0487bfaH8d3ca.abaNaPb2a6048,8e8qaK9aaW8|6Ta!8zbt8B0_8Dba8I4l9kas5/b9bc6Lbn6lbpaybrbE8F9u7%bx6Fa29v041,0wbW8`8v6Q8xbQa$89b:04020z0P0fb|9ca|7Nbj8-bK8/0b5$b@a?bS9|b}aXc0a#a-91b8760#5^9xcm4t0_cb4!0T5D0R2u2VcG5m1t5o2x2A2v0b1KcJ0T5n0{cT0#0%0)04.

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

.128013au x;5So03_[-z,)yv49:dfmg=w*prsh68kbc(+it]e7/Pnl12050w0R0P0b0O0W0F0d0L0W0b0F0F0A010P0O0D010406050F0c0y0y0b0E0r040h0i0W0c0?0i0V050T0}0 11130{0D04051j1c1m0T1j0{0w0O0s0+0-0/0;0G0O0z0G0W1A0G0P0_050$0K0W0R1v0.0:011z1B1D1B0P1J1L1H0P0E1k0P0G0+160F0D0b0V0;0Y011N1x010x0(0R0V0b0y0R1H1*1,1;1P1@1L1`1|0_0a0d0U0E0i0D0i0F0O190V0d0!1(0E0E0R0L2h1c1 0V1k0T1$2u1Z1#1!1I0w210;1D0V1_2e1H1s1u0,1O2E0O2G0V0i2K1H0D2n1k2s2u2Y0|1+2i2M1=2R0E100W0_0d0X2r2$0`2#202(1P2*2,2.0Y2;1,2?2s2D012{0b2-040d0k2 2t0{322_0;35370d0t3b312$333h2.0g3l3d3n3f340i2+362.0H3s2@2%1w2`3x2|380S3C3e3F3g3H3z380I3L3u3N3w3y3i0u3T2^3V3p040X0j3!3E2N3W3I0X2:1d2=3t3#3-3%0X2~3=303@3,2)3P370X3a3}3c3D3o420_0X3k463m3^413X4b3r4e3 494i3(3B4l483v3`3K4r3M3_4a3(3S4w3U4y4o0X3Z4C4g3G4o0Y3*4I404K3I0Y3;2Y4m4t4z0Y3|4U4s3$4X454!4x4h4R4d4)4D4+3Q0Y4k4.4J3O4L4q4@4P4_4R4v4|4n4R4B514W4L4H554$4o0k4N594E3I0k4T2=1n2W1c2K2x0w1#2C3v0L2S1}1k5n1l5l2!4e055t0!2X4/1P0J0_0!0x3l4#3-0B2.5M4*2`0x0_2V2S0c2g0l100e0O5R5G0;0^040M5(4^340_0s360R0c0E0F5.4}015+0p3l0d5N2)0_0J5{335+0q0v3s0d6c615S3g0_0o0R2b0F0l0w1,6l0x1_0#2n60621P0i0_0A6u6f010y0O0_5d3?6d6e5)5:045W0w5Y0P0l2R0V6R0c0)6A6K6x046z4e6J5/6D4b6b6d6v0;5I040x3x6X5/0V0_5%6$6-010i5P042P6?5|0V0K0_0E1,0z0R663v5+5-5B6B6^04657f6K686a4l6I6I6|7h0e72336Z6#2Y6%735;5?5^5`7k5/5+0m7b3$6_7J3-5+0Q6+7p7z336/0O5L6{7g0_7t7X6Y6y7x2=7S3v6)046G306|5+7n4U7R7R7r6h6j2e6m6o0l6q2G1Z7a7#5/6Z0N7(307*3V7,5i3~7@8a3-6/0R0)832!6B7;7Q8f8g636M2b6O5Z6S6U6W845|6Z0C882t8r2`7Z8p6|7U7W7y7_046i6k7}0V6p6r827u3v7w8E386|7,7.2t7:0_7=6H7@8O5#6`8N6B7w8X7K8t5X8w1a8y7E7?6,6B8i8k7M1=8o7o8.7Y048:8^3-8@8A338%3s067q920_6;0E9d8s8;7)6|6~6_1b9g4t7504770V79951P7d9F6g7i9I5}0_5 9y3$9A249L9H7F7A045=1L7D9T0_0q698p9l6K7s9q6w6y9-9J9Y5@5_9#047I9V3o7L9P9e0_0n9:6L7j8m7l0_7P987^9m708M9t9a7!8=7$6!8!8G0;9i9{7c8+9)999+7`8R6n8T7 8V6t9~1=6Z0nak8$6E3(ar6c8K0_8j0F8l5j8naqa98q8O6N6P6R8}0V6V8 aeai0T0TaFaf9j8f8Oaga%859/aB8H9X7C9@ao3V7H9L7h9s7/aR04a890aa6K8La29,a@0;8Za2ana57GaSb6aU9a8Q7|aw8U81aAaha=0487bfaH8d3ca.abaNaPb2a6048,8e8qaK9aaW8|6Ta!8zbt8B0_8Dba8I4l9kas5/b9bc6Lbn6lbpaybrbE8F9u7%bx6Fa29v041,0wbW8`8v6Q8xbQa$89b:04020z0P0fb|9ca|7Nbj8-bK8/0b5$b@a?bS9|b}aXc0a#a-91b8760#5^9xcm4t0_cb4!0T5D0R2u2VcG5m1t5o2x2A2v0b1KcJ0T5n0{cT0#0%0)04.