Aller au contenu

Pile et file triées, somme de deux éléments, cible

Le cadre

On dispose d'une pile et d'une file, non vides, d'éléments insérés dans l'ordre croissant.

On cherche à obtenir la somme d'un élément de la pile et d'un élément de la file la plus proche possible d'une cible donnée.

Exemples

Des paramètres
la pile  : | 10, 11, 13, 16, 20, 25, 31, 38 ↔
la file  : ← 50, 60, 71, 82, 93, 104, 115 ←
la cible : 120

Parmi les sommes proches de la cible avec un élément de la pile et de la file, on a :

  • \(10 + 115 = 125\) ; écart avec \(120\) : \(5\)
  • \(13 + 104 = 117\) ; écart avec \(120\) : \(3\)
  • \(16 + 104 = 120\) ; écart avec \(120\) : \(0\)

Ainsi, le plus petit écart entre la somme d'un élément de cette pile et de cette file avec la cible est \(0\).

Des paramètres
la pile  : | 100, 110, 130, 160, 200, 250, 310, 380 ↔
la file  : ← 501, 602, 713, 824, 935, 1046, 1157 ←
la cible : 1200

Parmi les sommes proches de la cible avec un élément de la pile et de la file, on a :

  • \(130 + 1057 = 1187\) ; écart avec \(1200\) : \(13\)
  • \(160 + 1046 = 1206\) ; écart avec \(1200\) : \(6\)
  • \(250 + 935 = 1185\) ; écart avec \(1200\) : \(15\)
  • \(380 + 824 = 1204\) ; écart avec \(1200\) : \(4\)
  • ... mais pas mieux que \(4\)

Ainsi, le plus petit écart entre la somme d'un élément de cette pile et de cette file avec la cible est \(4\).

Exercice 💥💥💥

Coder une fonction écart_mini_somme

  • qui prend en paramètres :
    • une_pile non vide de nombres entiers qui ont été insérés dans l'ordre croissant,
    • une_file non vide de nombres entiers qui ont été insérés dans l'ordre croissant,
    • une cible qui est un nombre entier,
  • et qui renvoie le plus petit écart entre une somme d'un élément de une_pile et de une_file avec la cible.

  • 👍 une_pile est une instance d'une classe Pile disponible dans cet exercice ayant les méthodes classiques est_vide, empile et dépile.

  • 👍 une_file est une instance d'une classe File disponible dans cet exercice ayant les méthodes classiques est_vide, enfile et défile.
  • ⚠ On attend un algorithme de cout linéaire en la somme des tailles des structures linéaires, et non en leur produit. 👍 Pour être simple et direct : on pourra dépiler et défiler tant que c'est possible et faire une opération à cout constant.
###(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 : /
.128013x,59/f.T78r;nb _o=ylaepcwgu)vd4613kméhtsP(S0+2-i:050E0w0N0v0W0u0O0p0y0u0v0O0O0s010N0W0x010406050O0B0K0K0v0l0t040R0r0u0B0=0r0n050f0|0~10120`0x04051i1b1l0f1i0`0E0W0D0*0,0.0:0M0W0A0M0u1z0M0N0^050#0o0u0w1u0-0/011y1A1C1A0N1I1K1G0N0l1j0N0M1M1w010g0%0w0n0v0K0w010*150O0x0v0n0:0U1G1@1_1%1O1*1K1-1/0^0a0p0P0l0r0x0r0O0W180n0p0Z1=0l0l0w0y2g1b1~0n1j0f1#2t1Y1!1Z1H0E200:1C0n1,2d1G1r1t0+1N2D0W2F0n0r2J1G0x2m1j2r2t2X0{1^2h2L1(2Q0l0 0u0^0p0H2q2#0_2!1 2%1O2)2+2-0U2:1_2=2r2C012`0v2,040p0I2~2s0`312^0:34360p0F3a302#323g2-0d3k3c3m3e330r2*352-0G3r2?2$1v2_3w2{370j3B3d3E3f3G3y370k3K3t3M3v3x3h0e3S2@3U3o040H0S3Z3D2M3V3H0H2/1c2;3s3!3,3$0H2}3;2 3?3+2(3O360H393|3b3C3n410^0H3j453l3@403W4a3q4d3~484h3%3A4k473u3_3J4q3L3^493%3R4v3T4x4n0H3Y4B4f3F4n0U3)4H3 4J3H0U3:2X4l4s4y0U3{4T4r3#4W442Z1o2V1b2J2w0E1!2B3u0y2R1:1j4,1k4*4(2Z4=0Z2W4C1(0J0^0Z0g3k4!3,0z2-574w2(0g0^0L0y100N0q0K2O0W0q0O0r0~0w5c511O0@040Q5u4I3f0^0B2F0q0x1+5A4O0:5x0c3k0p582(5D5F225t4d5Q5w0^5N4d5P5d2_0^0y0W1J5V2Z5%5L0^0C0X3r0p5^5$5v5C040b5O5X0:0r0^0s5 5/335S0w5G5I5W6662040h5J3n540L5H1K6h3u5x0Q0C5@5_6067040t655{016e645#6u0n680q5U6n3U6e6g6c6z6F040E0L6I6N5B016p6r4k5_5`6V6P1r0g0g0L2m0n0y5-2;6#5K6A636y6V6p6J3^0^5~6D6d0^0T6^6=6P6x6U6=5x6Y2X6;326e0V736i045*5,6s5^6E5g5i0l5k5m0n0W7g3u6B7v3#0o0^0v0o0O6{1(6`777h6(6*6,6.7F5Y047a3=6!6u53040W566 6O7o5j5l5n7y3,6B6C7b6u5m0^4M5.6z5x5?6Z6!6t667V2m0N0B0l1a7Z6V7/047;7S7{6z7V0z1y6m836=0J0y0^0i0l0B6/2 6u7@7l7`7U0^7X7)5R6Q7X7L1,7N8f7d0^020A0N0m8w1O85878o668q7_7`8s7|8u7Y7-666P5E696l8n2s6u6L7O5|0w0O5k0D0W0Z8+6W0^6q7^4T8S8|896V7}0!80828X7!045h7$7s7u8R8}7c4s6}8K616@8D9e048!6a8e7=6V8*7I9k6R8$8?6X8r7T8U040w0(8%506_0^8`6:9d3U0y0H0^032i8z6+8B1L020u8I0p8N3b9c8~8g8V9g6v9m6T9p6=9r9-7h8-8/8;9E8p8^5=9y9#9K3,907 819)6P977q7%7t9|8S7n6w9)7x9j3#6G9,2;8)0^6M9:9t6S6ban3U9x4k068}ab7K9S6-9E9~1(ae949G5y8?6P6~aF9.71a30^76ar3,79ad0^7faf6|7i5+9o88aa8Y7#7qaU047,6:6E7A047C7E9sas8^aI549R7M9^8P5;a9aC1O7V8vaX8xa57r7(b61O6e8G8IaO967p0N9w9Hb19z95b8a79aaL8Ea,bgb8bm9$32b48Wa.a(bh5ja+0sa-2 b20:8Mbk049I3}9}8T8a0^7~929)bM4q0f4~0w2t2Ub$4+1s4-2w2z2u7C1K2t4,0`0f0Z0#0%0O04.