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

.128013x5P4*h_,w1zp/0;9n(u:[t-o3r+vsb7gck]e28lyf6d)am i=S050R0K0w0T0W0N0D0V0H0N0T0D0D0X010w0W0m010406050D0t0U0U0T0A0O040Y0y0N0t0?0y0r050n0}0 11130{0m041c1j051m0n1m1o1j0{0R0W0C0+0-0/0;0g0W0G0g0N1C0g0w0_050$0E0N0K1x0.0:011B1D1F1D0w1L1N1J0w0E0y0R131K0A1k0w0g0+160D0m0T0r0;0L011P1z010P0(0K0r0T0U0K1J1;1?1{1R1~1N21230_0a0V0d0A0y0m0y0D0W190r0V0!1/0A0A0K0H2o1c260r1k0n1-2B0w1+1*1,0R280;1F0r202l1J1u1w0,1Q2L0W2N0r1%1v1J0m2u1k2z2B2)0|1=2p2T1|2Y0A100N0_0V0k2y2-0`2,272/1R2;2?2^0L2{1?2}2z2K01320T2@040V0z362A0{39300;3c3e0V0e3i382-3a3o2^0c3s3k3u3m3b0y2=3d2^0Q3z2~2.1y313E333f0F3J3l3M3n3O3G3f0M3S3B3U3D3F3p0q3!2 3$3w040k0o3+3L2U3%3P0k2`1d2|3A3,3@3.0k353|373~3?2:3W3e0k3h443j3K3v490_0k3r4d3t3 483(4i3y4l464g4p3/3I4s4f3C413R4y3T404h3/3Z4D3#4F4v0k3*4J4n3N4v0L3;4P474R3P0L3{2)4t4A4G0L434#4z3-4(4c4+4E4o4Y4k4:4K4=3X0L4r4^4Q3V4S4x4~4W504Y4C534u4Y4I584%4S4O5c4-4v0z4U5g4L3P0z4!2|1l2%1c2R2E0R2I3a0H1%241k5u1n5s2+4l055z0!2(4_1R0I0_0!0P3s4,3@0j2^5S4;310P0_2$1%0t2n0h100b0W5X5M0;0^040s5.4 3b0_0C3d0K0t0A0D5@54015;0i3s0V5T2:0_0I613a5;0S0u3z0V6i675Y3n0_0l0K2i0D0h0R1?6r0P200#2u66681R0y0_0X6A6l010U0W0_5k3}6j6k5/5_045$0R5(0w0h2Y0r6X0t0)6G6Q6D046F4l6P5^6J4i6h6j6B0;5O040P3E6%5^0r0_5-6,6?010y5V042W6|620r0E0_0A1?0G0K6c3C5;5?5H6H6~046b7l6Q6e6g4s6O6O727n0b783a6)6+2)6-795`5|5~607q5^5;0v7h3-6 7P3@5;0J6;7v7F3a6^0W5R717m0_7z7%6(6E7D2|7Y3C6/046M37725;7t4#7X7X7x6n6p2l6s6u0h6w2N2F7g7+5^6)0B7.377:3$7=5p457}8g3@6^0K0)892+6H7`7W8l8m696S2i6U5)6Y6!6$8a626)0f8e2A8x317)8v727!7$7E7 046o6q830r6v6x887A3C7C8K3f727=7@2A7_0_7{6N7}8U5+708T6H7C8%7Q8z5%8C1a8E7K7|6=6H8o8q7S1|8u7u8@7(048_8~3@8}8G3a8-3z067w980_6`0A9j8y8`7/72746 1b9m4A7b047d0r7f9b1R7j9L6m7o9O630_659E3-9G2b9R9N7L7G045{1N7J9Z0_0S6f8v9r6Q7y9w6C6E9?9P9(5}5 9+047O9#3v7R9V9k0_0x9_6R7p8s7r0_7V9e7~9s768S9z9g7*8{7,6*8*8M0;9oa17i8;9/9f9;808X6t8Z858#6za41|6)0xaq8,6K3/ax6i8Q0_8p0D8r5q8tawaf8w8U6T6V6X930r6#95akao0n0naLal9p8l8Uama-8b9^aH8N9%7I9}au3$7N9R7n9y7^aX04ae96ag6Q8Ra89=a}0;8)a8atab7MaYbca!9g8W82aC8!87aGana{048dblaN8j3ja@ahaTaVb8ac048=8k8waQ9ga$926Za*8Fbz8H0_8Jbg8O4s9qay5^bfbi6Rbt6rbvaEbxbK8L9A7-bD6La89B041?0Rb$908B6W8DbWa,8fb_04020G0w0pc29ib27Tbp8?bQ8^0T5,b}a|bYa2c3a%c6a+a?97be7c0#5~9Dcs4A0_ch4+0n5J0K2B2$cM5t1v5v2E2G2C1$1(2E0T1McP0n5u0{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

.128013x5P4*h_,w1zp/0;9n(u:[t-o3r+vsb7gck]e28lyf6d)am i=S050R0K0w0T0W0N0D0V0H0N0T0D0D0X010w0W0m010406050D0t0U0U0T0A0O040Y0y0N0t0?0y0r050n0}0 11130{0m041c1j051m0n1m1o1j0{0R0W0C0+0-0/0;0g0W0G0g0N1C0g0w0_050$0E0N0K1x0.0:011B1D1F1D0w1L1N1J0w0E0y0R131K0A1k0w0g0+160D0m0T0r0;0L011P1z010P0(0K0r0T0U0K1J1;1?1{1R1~1N21230_0a0V0d0A0y0m0y0D0W190r0V0!1/0A0A0K0H2o1c260r1k0n1-2B0w1+1*1,0R280;1F0r202l1J1u1w0,1Q2L0W2N0r1%1v1J0m2u1k2z2B2)0|1=2p2T1|2Y0A100N0_0V0k2y2-0`2,272/1R2;2?2^0L2{1?2}2z2K01320T2@040V0z362A0{39300;3c3e0V0e3i382-3a3o2^0c3s3k3u3m3b0y2=3d2^0Q3z2~2.1y313E333f0F3J3l3M3n3O3G3f0M3S3B3U3D3F3p0q3!2 3$3w040k0o3+3L2U3%3P0k2`1d2|3A3,3@3.0k353|373~3?2:3W3e0k3h443j3K3v490_0k3r4d3t3 483(4i3y4l464g4p3/3I4s4f3C413R4y3T404h3/3Z4D3#4F4v0k3*4J4n3N4v0L3;4P474R3P0L3{2)4t4A4G0L434#4z3-4(4c4+4E4o4Y4k4:4K4=3X0L4r4^4Q3V4S4x4~4W504Y4C534u4Y4I584%4S4O5c4-4v0z4U5g4L3P0z4!2|1l2%1c2R2E0R2I3a0H1%241k5u1n5s2+4l055z0!2(4_1R0I0_0!0P3s4,3@0j2^5S4;310P0_2$1%0t2n0h100b0W5X5M0;0^040s5.4 3b0_0C3d0K0t0A0D5@54015;0i3s0V5T2:0_0I613a5;0S0u3z0V6i675Y3n0_0l0K2i0D0h0R1?6r0P200#2u66681R0y0_0X6A6l010U0W0_5k3}6j6k5/5_045$0R5(0w0h2Y0r6X0t0)6G6Q6D046F4l6P5^6J4i6h6j6B0;5O040P3E6%5^0r0_5-6,6?010y5V042W6|620r0E0_0A1?0G0K6c3C5;5?5H6H6~046b7l6Q6e6g4s6O6O727n0b783a6)6+2)6-795`5|5~607q5^5;0v7h3-6 7P3@5;0J6;7v7F3a6^0W5R717m0_7z7%6(6E7D2|7Y3C6/046M37725;7t4#7X7X7x6n6p2l6s6u0h6w2N2F7g7+5^6)0B7.377:3$7=5p457}8g3@6^0K0)892+6H7`7W8l8m696S2i6U5)6Y6!6$8a626)0f8e2A8x317)8v727!7$7E7 046o6q830r6v6x887A3C7C8K3f727=7@2A7_0_7{6N7}8U5+708T6H7C8%7Q8z5%8C1a8E7K7|6=6H8o8q7S1|8u7u8@7(048_8~3@8}8G3a8-3z067w980_6`0A9j8y8`7/72746 1b9m4A7b047d0r7f9b1R7j9L6m7o9O630_659E3-9G2b9R9N7L7G045{1N7J9Z0_0S6f8v9r6Q7y9w6C6E9?9P9(5}5 9+047O9#3v7R9V9k0_0x9_6R7p8s7r0_7V9e7~9s768S9z9g7*8{7,6*8*8M0;9oa17i8;9/9f9;808X6t8Z858#6za41|6)0xaq8,6K3/ax6i8Q0_8p0D8r5q8tawaf8w8U6T6V6X930r6#95akao0n0naLal9p8l8Uama-8b9^aH8N9%7I9}au3$7N9R7n9y7^aX04ae96ag6Q8Ra89=a}0;8)a8atab7MaYbca!9g8W82aC8!87aGana{048dblaN8j3ja@ahaTaVb8ac048=8k8waQ9ga$926Za*8Fbz8H0_8Jbg8O4s9qay5^bfbi6Rbt6rbvaEbxbK8L9A7-bD6La89B041?0Rb$908B6W8DbWa,8fb_04020G0w0pc29ib27Tbp8?bQ8^0T5,b}a|bYa2c3a%c6a+a?97be7c0#5~9Dcs4A0_ch4+0n5J0K2B2$cM5t1v5v2E2G2C1$1(2E0T1McP0n5u0{c$0#0%0)04.