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

.128013s3o_8;bcdufvg/0ly n7apSr1-me,(P2=4:+twzki9][5h*x)6050j0C0L0v0P0q0b0s0i0q0v0b0b0H010L0P0w010406050b0k0B0B0v0y0r040x0d0q0k0?0d0t050o0}0 11130{0w041c1j051m0o1m1o1j0{0j0P0m0+0-0/0;0U0P0n0U0q1C0U0L0_050$0h0q0C1x0.0:011B1D1F1D0L1L1N1J0L0h0d0j131K0y1k0L0U0+160b0w0v0t0;0G011P1z010l0(0C0t0v0B0C1J1;1?1{1R1~1N21230_0a0s0F0y0d0w0d0b0P190t0s0!1/0y0y0C0i2o1c260t1k0o1-2B0L1+1*1,0j280;1F0t202l1J1u1w0,1Q2L0P2N0t1%1v1J0w2u1k2z2B2)0|1=2p2T1|2Y0y100q0_0s0z2y2-0`2,272/1R2;2?2^0G2{1?2}2z2K01320v2@040s0c362A0{39300;3c3e0s0I3i382-3a3o2^0T3s3k3u3m3b0d2=3d2^0Y3z2~2.1y313E333f0u3J3l3M3n3O3G3f0f3S3B3U3D3F3p0Q3!2 3$3w040z0p3+3L2U3%3P0z2`1d2|3A3,3@3.0z353|373~3?2:3W3e0z3h443j3K3v490_0z3r4d3t3 483(4i3y4l464g4p3/3I4s4f3C413R4y3T404h3/3Z4D3#4F4v0z3*4J4n3N4v0G3;4P474R3P0G3{2)4t4A4G0G434#4z3-4(4c4+4E4o4Y4k4:4K4=3X0G4r4^4Q3V4S4x4~4W504Y4C534u4Y4I584%4S4O5c4-4v0c4U5g4L3P0c4!2|1l2%1c2R2E0j2I3a0i1%241k5u1n5s2+4l055z0!2(4_1R0O0_0!0l3s4,3@0M2^5S4;310l0_2$1%0k2n0e100W0P5X5M0;0^040E5.4 3b0_0m3d0C0k0y0b5@54015;0D3s0s5T2:0_0O613a5;0X0J3z0s6i675Y3n0_0N0C2i0b0e0j1?6r0l200#2u66681R0d0_0H6A6l010B0P0_5k3}6j6k5/5_045$0j5(0L0e2Y0t6X0k0)6G6Q6D046F4l6P5^6J4i6h6j6B0;5O040l3E6%5^0t0_5-6,6?010d5V042W6|620t0h0_0y1?0n0C6c3C5;5?5H6H6~046b7l6Q6e6g4s6O6O727n0W783a6)6+2)6-795`5|5~607q5^5;0S7h3-6 7P3@5;0R6;7v7F3a6^0P5R717m0_7z7%6(6E7D2|7Y3C6/046M37725;7t4#7X7X7x6n6p2l6s6u0e6w2N2F7g7+5^6)0K7.377:3$7=5p457}8g3@6^0C0)892+6H7`7W8l8m696S2i6U5)6Y6!6$8a626)0V8e2A8x317)8v727!7$7E7 046o6q830t6v6x887A3C7C8K3f727=7@2A7_0_7{6N7}8U5+708T6H7C8%7Q8z5%8C1a8E7K7|6=6H8o8q7S1|8u7u8@7(048_8~3@8}8G3a8-3z067w980_6`0y9j8y8`7/72746 1b9m4A7b047d0t7f9b1R7j9L6m7o9O630_659E3-9G2b9R9N7L7G045{1N7J9Z0_0X6f8v9r6Q7y9w6C6E9?9P9(5}5 9+047O9#3v7R9V9k0_0A9_6R7p8s7r0_7V9e7~9s768S9z9g7*8{7,6*8*8M0;9oa17i8;9/9f9;808X6t8Z858#6za41|6)0Aaq8,6K3/ax6i8Q0_8p0b8r5q8tawaf8w8U6T6V6X930t6#95akao0o0oaLal9p8l8Uama-8b9^aH8N9%7I9}au3$7N9R7n9y7^aX04ae96ag6Q8Ra89=a}0;8)a8atab7MaYbca!9g8W82aC8!87aGana{048dblaN8j3ja@ahaTaVb8ac048=8k8waQ9ga$926Za*8Fbz8H0_8Jbg8O4s9qay5^bfbi6Rbt6rbvaEbxbK8L9A7-bD6La89B041?0jb$908B6W8DbWa,8fb_04020n0L0gc29ib27Tbp8?bQ8^0v5,b}a|bYa2c3a%c6a+a?97be7c0#5~9Dcs4A0_ch4+0o5J0C2B2$cM5t1v5v2E2G2C1$1(2E0v1McP0o5u0{c$0#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

.128013s3o_8;bcdufvg/0ly n7apSr1-me,(P2=4:+twzki9][5h*x)6050j0C0L0v0P0q0b0s0i0q0v0b0b0H010L0P0w010406050b0k0B0B0v0y0r040x0d0q0k0?0d0t050o0}0 11130{0w041c1j051m0o1m1o1j0{0j0P0m0+0-0/0;0U0P0n0U0q1C0U0L0_050$0h0q0C1x0.0:011B1D1F1D0L1L1N1J0L0h0d0j131K0y1k0L0U0+160b0w0v0t0;0G011P1z010l0(0C0t0v0B0C1J1;1?1{1R1~1N21230_0a0s0F0y0d0w0d0b0P190t0s0!1/0y0y0C0i2o1c260t1k0o1-2B0L1+1*1,0j280;1F0t202l1J1u1w0,1Q2L0P2N0t1%1v1J0w2u1k2z2B2)0|1=2p2T1|2Y0y100q0_0s0z2y2-0`2,272/1R2;2?2^0G2{1?2}2z2K01320v2@040s0c362A0{39300;3c3e0s0I3i382-3a3o2^0T3s3k3u3m3b0d2=3d2^0Y3z2~2.1y313E333f0u3J3l3M3n3O3G3f0f3S3B3U3D3F3p0Q3!2 3$3w040z0p3+3L2U3%3P0z2`1d2|3A3,3@3.0z353|373~3?2:3W3e0z3h443j3K3v490_0z3r4d3t3 483(4i3y4l464g4p3/3I4s4f3C413R4y3T404h3/3Z4D3#4F4v0z3*4J4n3N4v0G3;4P474R3P0G3{2)4t4A4G0G434#4z3-4(4c4+4E4o4Y4k4:4K4=3X0G4r4^4Q3V4S4x4~4W504Y4C534u4Y4I584%4S4O5c4-4v0c4U5g4L3P0c4!2|1l2%1c2R2E0j2I3a0i1%241k5u1n5s2+4l055z0!2(4_1R0O0_0!0l3s4,3@0M2^5S4;310l0_2$1%0k2n0e100W0P5X5M0;0^040E5.4 3b0_0m3d0C0k0y0b5@54015;0D3s0s5T2:0_0O613a5;0X0J3z0s6i675Y3n0_0N0C2i0b0e0j1?6r0l200#2u66681R0d0_0H6A6l010B0P0_5k3}6j6k5/5_045$0j5(0L0e2Y0t6X0k0)6G6Q6D046F4l6P5^6J4i6h6j6B0;5O040l3E6%5^0t0_5-6,6?010d5V042W6|620t0h0_0y1?0n0C6c3C5;5?5H6H6~046b7l6Q6e6g4s6O6O727n0W783a6)6+2)6-795`5|5~607q5^5;0S7h3-6 7P3@5;0R6;7v7F3a6^0P5R717m0_7z7%6(6E7D2|7Y3C6/046M37725;7t4#7X7X7x6n6p2l6s6u0e6w2N2F7g7+5^6)0K7.377:3$7=5p457}8g3@6^0C0)892+6H7`7W8l8m696S2i6U5)6Y6!6$8a626)0V8e2A8x317)8v727!7$7E7 046o6q830t6v6x887A3C7C8K3f727=7@2A7_0_7{6N7}8U5+708T6H7C8%7Q8z5%8C1a8E7K7|6=6H8o8q7S1|8u7u8@7(048_8~3@8}8G3a8-3z067w980_6`0y9j8y8`7/72746 1b9m4A7b047d0t7f9b1R7j9L6m7o9O630_659E3-9G2b9R9N7L7G045{1N7J9Z0_0X6f8v9r6Q7y9w6C6E9?9P9(5}5 9+047O9#3v7R9V9k0_0A9_6R7p8s7r0_7V9e7~9s768S9z9g7*8{7,6*8*8M0;9oa17i8;9/9f9;808X6t8Z858#6za41|6)0Aaq8,6K3/ax6i8Q0_8p0b8r5q8tawaf8w8U6T6V6X930t6#95akao0o0oaLal9p8l8Uama-8b9^aH8N9%7I9}au3$7N9R7n9y7^aX04ae96ag6Q8Ra89=a}0;8)a8atab7MaYbca!9g8W82aC8!87aGana{048dblaN8j3ja@ahaTaVb8ac048=8k8waQ9ga$926Za*8Fbz8H0_8Jbg8O4s9qay5^bfbi6Rbt6rbvaEbxbK8L9A7-bD6La89B041?0jb$908B6W8DbWa,8fb_04020n0L0gc29ib27Tbp8?bQ8^0v5,b}a|bYa2c3a%c6a+a?97be7c0#5~9Dcs4A0_ch4+0o5J0C2B2$cM5t1v5v2E2G2C1$1(2E0v1McP0o5u0{c$0#0%0)04.