La fausse pièce

Vous avez trouvé, sur une île déserte, une malle pleine de pièces d'or ! Elle contient 128 pièces.

Vous savez néanmoins qu'une des pièces est fausse.

Ce fabuleux trésor pourrait vous permettre d'acheter un nouveau bateau mais le marchand est très méfiant : s'il découvrait la fausse pièce, les choses tourneraient mal... Il vous faut donc trouver cette fausse pièce.

Heureusement vous savez que la fausse pièce est plus légère que les autres et vous disposez d’une balance à deux plateaux.
Cette balance ne donne pas la masse d’un objet, elle permet simplement de comparer les masses sur ses deux plateaux. Si les deux plateaux sont au même niveau, la masse est identique sur chacun, sinon le plateau le plus haut correspond à la masse la plus légère. Malheureusement, cette balance est piégée. Après 10 utilisations, elle s'auto-détruira.

Comme vous êtes bien organisé, vous commencez par numéroter les pièces (de 1 à 128), et vous collez ce numéro sur chaque pièce.

On dispose de la classe class Tresor qui permet de créer des objets de type Tresor constitués de 128 pièces dont une fausse déterminée aléatoirement lors de sa création.

On demande de rédiger la fonction fausse_piece qui prend en paramètres :

  • tresor de la classe Tresor ;
  • le numéro debut de début de l'intervalle de recherche (inclus) ;
  • le numéro fin de fin de l'intervalle de recherche (exclu).

Cette fonction renvoie le numéro de la fausse pièce dans le trésor tresor

On garantit que :

  • il existe une et une seule fausse pièce ;
  • toutes les vraies pièces ont la même masse ;
  • la masse de la fausse pièce est strictement inférieure à celle d’une vraie pièce.

Les pesées des pièces sont mises en œuvre par la fonction compare(tresor, debut_gauche, fin_gauche, debut_droite, fin_droite) qui compare les masses des pièces placées sur les plateaux de gauche et de droite.

Le plateau de gauche contient les pièces du trésor dont les numéros de début et de fin sont debut_gauche(inclus) et fin_gauche (exclu). Le plateau de droite contient les pièces du trésor dont les numéros de début et de fin sont debut_droite (inclus) et fin_droite (exclu).

Cette fonction renvoie le côté de la balance le plus léger : • la fonction renvoie 'gauche' si le plateau de gauche est plus léger ; • la fonction renvoie 'équilibre' si les deux plateaux ont la même masse ; • la fonction renvoie 'droite' si le plateau de droite est plus léger. Ainsi, compare(tresor, 1, 15, 15, 50) compare les masses des pièces de numéros allant de 1 (inclus) à 15 exclu pour le plateau de gauche et de 15 (inclus) à 50 (exclu) pour le plateau de droite. La fonction compare est déjà écrite, vous ne devez pas l’écrire. Votre fonction fausse_piece doit faire appel à la fonction compare. Attention, ce nombre d'appel doit être inférieur ou égal à 10.

On fournit ci-dessous quelques exemples d’utilisation des différentes fonctions

🐍 Script Python
>>> tresor = Tresor()  
>>> tresor
'Un trésor de 128 pièces'
>>> # comparaison des pièces de numéros dans [1, 20[ et [28, 32[
>>> compare(tresor, 1, 20, 28, 32)
'gauche'
>>> compare(tresor, 10, 40, 50, 80)
'équilibre'
>>> fausse_piece(tresor, 1, 129)
42

Recopier et compléter.

Toute tentative juste de résolution sera valorisée.

Exercice

Compléter ci-dessous :

###(Dés-)Active le code après la ligne # Tests (insensible à la casse)
(Ctrl+I)
Entrer ou sortir du mode "deux colonnes"
(Ctrl+Clic pour inverser les colonnes)
Entrer ou sortir du mode "plein écran"
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 : 5/5

.1280130ldy1,48Lké/weibmc_:35qaPr+ 7=9of.;tRg26sSOh)(zpèunv050d0o0K0y0p0c0P0C0s0c0y0P0P0E010K0p0W010406050P0Y0r0r0y0A0e040Q0G0c0Y0^0G0Z0C020y0r0W0J0C0L0o120A0x0Y0o0P050m0 1113150}0W04051A1t1D0m1A0}0d0p0!0-0/0;0?0S0p0M0S0c1R0S0K0{050(0q0c0o1M0:0=011Q1S1U1S0K1!1$1Y0K0A1B0K0S0-180P0W0y0Z0?0N011(1O010H0*0o0Z1g0o1Y1~20251*281$2b0r2d040a0C0z0A0G0W0G0P0p1b1d0$1|0A0A0o0s2y1t2f0Z1B0m1`2K1@1_1^1Z0d2h0?1U0Z2a2v1Y1J1L0.1)2U0p2W0Z0G2!1Y0W2D1B2I2K2=0~1 1d2$262+0A120c0{0C0f2H2_0|2^2g2{1*2}2 310N3420362I2T013b0y30040C0v3f2J0}3i390?3l3n0C0h3r3h2_3j3x310w3B3t3D3v3k0G2~3m310O3I372`1N3a3N3c3o0D3S3u3V3w3X3P3o0i3#3K3%3M3O3y0F3-383/3F040f0b3@3U2%3:3Y0f331u353J3^403`0f3e453g473 2|3)3n0f3q4d3s3T3E4i0{0f3A4m2K2/0o2K2!2N0d1_2S3L0s2,2n0#1K1B4w2;353B054F0$4M48260k0{0$0H3B0C4o3L0Z0H0{0H0y0Y0;0o0t0W0p2E0o4O3$400`040U4@3.490{1@1r3N4}4T1*4`0g4Z4#3_4W0o0q1a544g560{584u4!4^2|4)2)5g3j4`0T0u3~3j0n310C5A5r3L0P0d0{021p0G0K0J5H0Y5J5L5I5K5w5D5F3o5A1k2a0!0G4;0C1$0C0Z100l2s0C2A0/0C4*4,0P1%4:0X0s1%0d200,5%1@0l0P534u4f3j5E5z5A0j1%60620A0C2)2x0p3m1|1h0K1%4b0i0C5^5`1s645a40675V5A5M5O6A5K6C0J3I5W5m4~4U0{0p4Y5l6v5o040$5e0K595n1*0G0{0B6V6J1*0r0p4r6#550?6Y040E0E6+5h3w5p0Z5C3/4`5v5l6I6,010s0f0{030C0Y2W0C5?0Y5%6r5{5}5$0y0C0V1c5{02030v0F0J0l0K0Y0$6G6H5W6P1*4V042D7s0A6_6O6W6@6R5d5f64066H7y7I6(1U0o0Y6=3j6.6;7G6$0?4`4|4u7P3k5c6T7V3L6.6!7Z700Z6^6`4_0{0T7-3/6.0m0m7|406(0{4c2=7N7x7H7*040G0q5?0A0!0y2G7;6?017X816Q4F1h134?7(897$7^6Q516d8w5i045k2=6 8k7?7J7,8t7!01578n3a0{7R4;7U8K708N8j3E8Q0*8S8A7#5j8O7I287F2@8u7`7v5B897A6M8)8a8c8e8g8i8E7)7X7Y8~890P23046E0M4+0s0S0o6E8$8M0{6}867w888L7A7C0Y7E8^8H5;4-4/4;5`9e8v8U8G502D8z9z5s8(8X4$7+7L8-8L8W928L8H8R7T9x8/647O8=0{0o0+8s9L8V9g8:7w7)9m0%9o8,358F8Y049s5?9u4=9T4{9e8H8y639$8k9N9:7)9Q8!9S9E3La33g9;9I9?5qa96{9U861t4Q4x1E2:1t4z1t0K4Bas2Q2L0y1#an0m4z1z4S8k2D0r0t4*0k4.0S0v0{1l1n1p1r0C9h4N1G361A0R1d0W7T0K0C0A0l3m0p8e76780!0o0A2w1c5m1@1c0M042x5+8h1K9#a_0Za{5-1%5`1:1%0H1c2F0p1c0g0C1p0pa(0o2u5?799oa.0C3m0M3N2x0S2mb55-0p9a5J0G6(0o0I1E362!3j1,1T1V1XaE3j2j2a2c0{2p0Q0s0A0_a%0z0e1`1c4O4L3T2?4NambO3L7A4X9q4(9?4+9t4:9`ah7_9|b|8x9Ca04N8.8C9q9J6Ub 8B8Da4899raga19F045u5S3/5y6y4!c90?6x6Ecs5Q6F6u935U6H1l0Z5Z5#5%5)0r5+0Gbx5/9@5@0p5_7e0Z5~6ba)9Dakcx680C6a0C6c3N6f0Z6h6j8p0W6m320N6p7d6tcV8L6x6Hct5N6Dcu3I878;9l0{0n1Q1$c68I9Kcc8L6.020c5R9H5baf9/3g7)6|9)9Wd1a|6N9O7=c78^7/8^833{du0{6:d68+9{aUacad3/7274a.1%7a7ccN5`5-7f5/7j780d7m7o7q7s7u9V9j9*9X7B9-9pdf4 d7c89id%a58Z7S8Tdr8k8md-269ycgae6Sd8ac8 6ZdCcfc39Majd9707~80d}6%6)048546d%dHd.8`a;8|bddi2Jen26d|d`9=c+8r9{7%e0dg9 0A9{cbe4cddtcp9fc5eg7Qa7d_e99%ePeyae9ReTdjc4eJeud?dh9{7{d$9j9+6Ldqec9A8b8deqa b%eQ8ldA91e=669597999b9deNdle-emev8Pe*e|exf0eYeSdm9k707A9Z5?dEfje.eLd/dz6/d6eZ3S0mb-aoaAaCaq0%0)0+04.