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

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"
(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 : 5/5

.128013kg: r;)Sé/q(.èlo4y,6b=ac1+5udz3t28_Pw7evLp-fh0O9mnRis050D0N0G0x0!0p0#0e0y0p0x0#0#0w010G0!0Q010406050#0C0X0X0x0f0s040i0q0p0C0_0q0Y0e020x0X0Q0g0e0Z0N130f0l0C0N0#050k101214160~0Q04051B1u1E0k1B0~0D0!0O0.0:0=0@0:0Y0c0C0x0c0N0R0Q0s0G0T1d0e0T0!0c0T0p1*0T0G0|050)0v0p0N1N0;0?011)1+1-1+0G1?1^1;0G0f1C1#0.190#0Q0x0Y0@0H011`1P010S0+0N0Y1h0N1;2c2e2j1|2m1^2p0X2r040a0e0K0f0q0Q0q0#0!1c1e0%2a0f0f0N0y2M1u2t0Y1C0k1#2Y2628271=0D2v1Q0!0Y2o2J1;1K1M0/1{2,2.0Y0q2=1;0Q2R1C2W2Y320 2d1e2@2k2{0f130p1;0x1(2R0S0@030J0J0y2|0N1-2`0q0R0z3t0|0e0z1u0x33360}352u381|3a3c3e3g0N3i013k3m3o3q2/3t0R2h040e0H3z3B2e3D2W2+013I0x3d1C3f0T3h3j3l3n0%3S2{3U0F3w0F3!2V3C0~3(3G0@3+3-053/3;3O3?3R2-3T3u0r3w0r3 1v413E371O3H0q3b3,3K3:3M3=3Q3^4e3`3u0B3w0B4k3242363)464u4a3P3@3p4A3s3u0u3w0u4G4m434p454r3J3.3L3N4O4d3r3U0M3w0M4X3$4I3F4!3*4$4t4(4v4*4c4z4-3u0I3w0I4=2X4@4o2^4`4s47494w4b4y4Q520R0W3w0W573%4J445c4%484)4x4P3_4S3t0U0|0z0U5p594K4{5e5w5h5y4R3U0z0z5D3y0k3A404?4n5I5d4M5g4+514f3t3W0z3Z5U3#585Y5s4L4}4N505j5)0z3|045|5G5;4_5?5v4~5x4,5{4h5~4j5.5W2X1F301u2=2#0D282*5s4P2;1L1C2 0N313C6d1C4P6u2u0!0D0@3l2W5P3K6B6D5i5z6G0e2z0N6J5N5k5R2Y5V4Z5b0b0|0%0S6w0e615b0Y0S0|0S0x0C0=0N0J0Q0!2S0N6w6(2k0{040m6`6W390|261s4r705r4_6}0t6$6{3H6Z0N0v1b774^5b7a7c717e042m0Y7j5a6|0|0h0d6w0~4l3$5Y6I016E363U3W5v7E5_6L3u2h6N2q6Q674B3V1;6c7o0@0L3w0e7$7t3)0#0D0|021q0q0G0g7-0C7/7;7.7:7z7(7L0J6F3u5}7K6C7F6K5O802i6O7S5(7U817X785b7*7#7$1m0Y0O0q6@0e1^6N110j2G0e2O0:0e6-6/0#1_6?0o0y1_0D2e0-8q260j0#767B5:8P6z1e7}7 0R69828a5`7U4h7Q2A8Z7N8W7W6V8f2k8h3X7$0e0P1_8L8N0f0e2-2L0!3,2a1i0G1_5,0I0e8D8F1t8R7A343(8U7H4C6H837M860R4D8%6P846R5)4D6U8S7)7+8;7$7=7@9A7:9C0g7{8R7D9j7~9g0R4U4(7}9r7U4U9o8)9l9N3!8=6%7Y016Y040!6#8R9Z8.7p0%7h0G7n9,0@0q0|0A9;7k2k0X0!5D9`7u1|9@040w0wa04K6,2-7(5s6}7y9*9+9{1|0y6T030e0C2.0e8B0C8q988G8I8p3f0E1d8G02030F0W0g0j0G0C0%9G9d4J9f2e4.9i9U5k4/9T9q7T5A4/9u9Y9Y7d0@9$2RaH0f7s9*a$3*7f9/aK6v9e9J8V549O9J9Q5A54aU9k5ka`3!9ca?aMa^9L5ma{aR5)5mb0855kba9X8=a.0Y0|9}1-0N0Ca75sa3a6a-9!6}6 9H9!bm049.7ibw9=01a39_bGah45a9a,aLbM016}0hbs4_a30k0kbV5b9}0|5-4H7|b8aO3u5EaQaV8b5Ab.bfa}5P5CaZbkbB0|0q0v8B0f0O0x2UbLa19?0|bv32agc7a/043n1i146_bAbHbyab62732R8`cn7l0|7bc6a8bD7gbFbQcd7mcw5=bn0+6@brckbRcDcbblcGbpcJcB3)cM3Ccccx7rcs7v04bU9bb*6J8V5Qb/b15{5Rb@aW5P6Tbj7%9!9$9(b!7204b c1c3c5cN9!bucacVa.0#3W9E0c6.0y0T0N9EcZ1|ada=7Ca@c)9L5,c,bg5{7P89b:8!b=7J5.a!b|bHa(0(0Ca+c|7p8z6:6=6@8Fdi0@cmcKcdbC74crdScTcudIbNcya;dXacdZcEco04bocIdPbS7wdl6edn84c*813f9Pc;b-3|c:b;5P8d3Aa#c_0|3p8Bd:dkc%dXaN0Y5P8Xd|a|d~3t8$dvc-7U0z8XdAdBcW5sdEa*bPd7b}7q6.dL6?6^eb0|bzcScF04dV8OeK79d*d3bHbCd.bqeH04cveSbRbCcYd(eQc#d?2Y6y6f6t6h6q1u0G6ke=2(2Z0x1@e/0k6i1A9v5s2R0X0J6-0b6;0T5}1m1o1q1s0eae341H3D1B0V1e0Qbq0G0e0f0j3,0!c1amao0O0N0f2K1%0 261d0c9%0G8tc41Lcj0#fE1S3X2O8F221_0S1d2T0!1d0t0e1q0!fq0N2I8BapdGfw0e3,0c4r2L0T2A8v8G0!de7/0q9}0N0n1F3D2=3)1R1T1V1X1Z1#1%1~1,1.1:f14_2x2o2q0|0K1!1$ez7C6s8S5/6x3o9vef3V3vbbdw6L0H3ve1dxgzc/655Mc;gEc?8ebR9$6!d!3*6+eC8A6;eFdOe(ct6~d:dUcqeOb6cLeReAeTa:cAg,cCg.3$evd,e%ePg$7xe+9IdoaOgE7Jejbc3`h4887RgC5Oh95L5%gHh99ua.7!9y6%g#8/9x9Ehr7_9FedcSgygEd{8|eke2hyha8(hc4-hDhfep3shDhj9!8:9Y8k8m8o8q0Y8s8u8w3fdKf+at8vav8KfrdWb)eeb+eggEeihAh7hL8+gGgDh^gKhgh`es8-bRhP8=8@0e8_4r8|0Y8~90cg0Q933x0H96at9ah,hwh.gz9t8YhG3TgE9neodsh89m2ih|hKin8,gh8g9x9Yhs7?9Dhth0d^7Gh39Mdrb^gE9SiuiRiPhJivh@9W5.b5dmb7h2h/0RaYipiAgEaTiUgMi+iy5^iYgzi,etc^dD0|0L1)1^gTbCbE9:d+5ba3020p7`j7c}g|g?dY04fg4mh-i)gzb3h6iqiwa i;hC0Ra izi_gEb3i|a!a.c`9)e!dTg;j6jG3)bJgTb$5~gTd5j3bOeXjjg_g`5baj0|alan1_aqas0!8Eau0Y8Jaxaz8vaBaDaFaHaJhvjghx5liQi=bejthhj}iXiVbijBeujX2kexdGgq2Xk99-czjJjkiljmgNb`i-jy5BhE9pi.kqk4i=b.b{dBcOd-cHeWjda2c9gTdRg}c}j5jQ9^jS7qaahodjd=kEc804bYjN9~04b(kjj{imgNc?jpktc+h_hd3tgJi^iVc+kyjCeBc fzd1fYkd3Xa.bukOiccieXeJjgeLeN0feXeZg/e#jIlckOeVcRl8e)ldg_kAljlhkUcejfi%g-e*j`lv8Tk(5*j~judqk.hHlCkvlEdze5eujD0|c{lsbCk{c2fK1dkMa4d6lohOdahtdc0CdedgiKkRdQ0|jV8Qkkd_7HgNhzd}lEe0k1h`5|i@5$k,e4hmk8kAlukel1kGlRcPd/lyd@i(l?iOerlDk2mjlGiremm04 kpmjk^e6i~04e9fMllg$l:3Djlmhi*0ziok+msithbk,9njxk?iok7lNeBkLlsl2mbkBcQh00ke-1H6ge~6q7A0%0)0+0#04.