Somme fixée de deux valeurs d'un tableau trié

On dispose d'un tableau d'entiers triés dans l'ordre croissant, mais on ne dispose pas d'accès à la valeur d'un élément, on dispose de la somme de deux éléments d'indices distincts donnés. L'objectif est de savoir si on peut obtenir une somme donnée avec deux indices distincts.

Deux exemples

  1. Avec le tableau \(3, 4, 6, 9, 13, 18, 19\), il est impossible d'obtenir \(20\) comme somme de deux éléments distincts.
  2. Avec le tableau \(3, 5, 7, 8, 9, 12, 16, 19\), il est possible d'obtenir \(21\) comme somme de deux éléments distincts.

Vous disposez d'une classe Tableau qui dispose :

  • d'une méthode taille qui renvoie la taille du tableau trié considéré ;
  • d'une méthode telle que somme(i, j) renvoie la somme de deux éléments distincts d'un tableau.

Attention, on veillera à ce que 0 <= i < j < taille() sinon une erreur se produira. D'autre part, il ne sera autorisé d'utiliser la fonction somme qu'au maximum taille() fois, et vous ne connaissez pas la structure cachée derrière somme, ni taille.

Écrire une fonction est_somme qui prend en paramètres une instance de la classe Tableau et un entier et qui renvoie True cet entier peut être la somme de deux éléments distincts du tableau, et False sinon.

Exemples

Avec l'exemple 1 précédent :

🐍 Console Python
>>> t = Tableau([3, 4, 6, 9, 13, 18, 19])
>>> taille()
7
>>> somme(0, 2)
9
>>> est_somme(t, 20)
False

Avec l'exemple 2 précédent :

🐍 Console Python
>>> t = Tableau([3, 5, 7, 8, 9, 12, 16, 19])
>>> t.taille()
8
>>> t.somme(0, 2)
10
>>> est_somme(t, 21)
True

###(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/T0ly n7apS.r1F-me,(P2=4:+jtwki95hx)6050j0F0P0w0S0r0b0t0i0r0w0b0b0K010P0S0x010406050b0k0E0E0w0A0s040y0d0r0k0?0d0u050o0}0 11130{0x041c1j051m0o1m1o1j0{0j0S0m0+0-0/0;0V0S0n0V0r1C0V0P0_050$0h0r0F1x0.0:011B1D1F1D0P1L1N1J0P0h0d0j131K0A1k0P0V0+160b0x0w0u0;0J011P1z010l0(0F0u0w0E0F1J1;1?1{1R1~1N21230_0a0t0I0A0d0x0d0b0S190u0t0!1/0A0A0F0i2o1c260u1k0o1-2B0P1+1*1,0j280;1F0u202l1J1u1w0,1Q2L0S2N0u1%1v1J0x2u1k2z2B2)0|1=2p2T1|2Y0A100r0_0t0B2y2-0`2,272/1R2;2?2^0J2{1?2}2z2K01320w2@040t0c362A0{39300;3c3e0t0L3i382-3a3o2^0U3s3k3u3m3b0d2=3d2^0Y3z2~2.1y313E333f0v3J3l3M3n3O3G3f0f3S3B3U3D3F3p0T3!2 3$3w040B0q3+3L2U3%3P0B2`1d2|3A3,3@3.0B353|371l2%1c2R2E0j2I3a0i1%241k491n472+442A054e0!2(3#3@0R0_0!0l3s3K3a0Q2^4y3T400l0_0F0b0P0e0b0d0 0F4D4s1|0^040H4Q3 2:0_1Y0F0w0k4W3?4S0_0G3s0t4z3C0u0_0W4(3a4T0X0M3z0t4}4.4E4Y040S4-4/3$0d0_0K54501R0E0S0_3;4m0`4~4 4R310_0O5a5l0;5704595h5k4X5m044!4$4@3C5s0z5C3-4Z0%0r1N5G3@4T0H0X5p5x5r0_0D5R4)5c5e3/4|4~554t0_0Q1B5L5v5%51535-5b5T04020r0P0g5W3v5n5M4*044{5h065j5j5.5y0s5|5D586a5H5z0w1M4#4%5h675?5F6k5=3b0_4M4O5 1R5O6u3n0_5:2+6p4T4,5;5q6q045o6o6G4_5#655w5X0;4u524x6F5S6H696V6Q015s5^5`6d404=6x014T622)646O656l6H6A2|6P3a5s0N5u2)6{3C5d0_3{6:6=713$6S0F1F6U706@4;046Y7e6p6$0n6(6Z5}044?6K6W6.6N77786*6I6)1|5s0D6 6`6@735!63776@7a0)4P7s6!7u7J7w4}7L0_2u0P0k0A1b7o3C0R0i0_0p0A0k7O765$6p6S7X7Z7#7j6G7(0_0C3d0b7.3}1c4p0F2B2$84481v4a2E2G2C1$1(2E6g1N2B490{0o0!0$0(0b04.