Score d'un mot au Scrabble (II)

Au Scrabble, chaque lettre possède une valeur et le score d'un mot est la somme des valeurs des lettres qui le compose. Ce score peut être modifié par des bonus liés au placement du mot sur le plateau de jeu. Les bonus possibles sont :

  • « lettre compte double » qui multiplie par 2 la valeur de la lettre positionnée sur cet emplacement ;
  • « lettre compte triple » qui multiplie par 3 la valeur de la lettre positionnée sur cet emplacement ;
  • « mot compte double » qui multiplie par 2 la valeur totale du mot (après application des éventuels bonus de lettre) ;
  • « mot compte triple » qui multiplie par 3 la valeur totale du mot (après application des éventuels bonus de lettre).

Une case du plateau ne peut contenir qu'un seul bonus. Il est possible que le score d'un mot soit modifié par plusieurs bonus « mot ». Dans ce cas, les bonus sont tous appliqués.

Exemple

On place le mot :

GIRAFE

sur les cases suivantes :

Cases

Sa valeur est : \(\left(2\times2 + 1 + 1 + 1 + 4 + 1 \right) \times 2 = 24\)

On modélise les propriétés des cases sur lesquelles sont posées les lettres par les symboles suivants :

  • "+" indique un bonus « lettre compte double » ;
  • "*" indique un bonus « lettre compte triple » ;
  • "#" indique un bonus « mot compte double » ;
  • "@" indique un bonus « mot compte triple » ;
  • "-" indique une case sans bonus.

Les cases sur lesquelles sont posées les lettres d'un mot sont modélisées par une chaine de caractères que l'on appellera cases. Dans l'exemple précédent, cases est la chaine "+---#-".

Compléter la définition de la fonction calcul_score qui prend en paramètres deux chaines de caractères :

  • mot dont on veut calculer le score ;
  • cases représentant l'emplacement du mot.

Cette fonction calcule le score du mot en tenant compte des éventuels bonus des cases.

On fournit trois dictionnaires VALEURS, BONUS_LETTRE et BONUS_MOT contentant les valeurs des lettres au Scrabble et les coefficients multiplicateurs des différents bonus.

###(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

.128013sHY3_8èufvIy 7ZnGaS1me(P4C2V:Ktwi]WD[hE*@)6Oo;bcdUgM/XT0lqABpQ.rLF-R,}=+Nk{95Jxé050X0w0F0s0H0)0b0n0W0)0s0b0b0`010F0H0-010406050b0i0v0v0s0:0m040t0T0)0i1k0T0q0n020s0v0-0U0n0@0w1u0:0*0i0w0b050#1r1t1v1x1p0-041V1$051)0#1)1+1$1p0X0H0k1c1e1g1i0M0H0Z0M0)1|0M0F1n05170V0)0w1@1f1h011{1}1 1}0F2527230F0V0T0X1x240:1%0F0M1c1A0b0-0s0q1i0B01291_010j190w0q1I0w232x2z2E2b2H272K0v2M040a0n0y0:0T0-0T0b0H1D1F152v0:0:0w0W2+1V2O0q1%0#2t2`0F2r2q2s0X2Q1i1 0q2J2(231;1?1d2a340H360q2n1=230-2:1%2^2`3o1q2y1F3c2F3h0:1u0)1n0n0u2@3s1o3r2P3u2b3w3y3A0B3D2z3F2^33013K0s3z040n0e3O2_1p3R3I1i3U3W0n0z3!3Q3s3S3*3A103.3$3:3(3T0T3x3V3A0R3^3G3t1^3J3}3L3X0o423%453)473 3X0g4b3`4d3|3~3+0 4j3H4l3=040u0(4q443d4m480u3C1W3E3_4r4z4t0u3N4E3P4G4y3v4f3W0u3Z4M3#433;4R1n0u3-4V3/4H4Q4n4!3@4%4O4Y4+4u414.4X3{4J4a4@4c4I4Z4u4i4|4k4~4;0u4p524)464;0B4w584P5a480B4D3o4/4_4 0B4L5k4^4s5n4U3q1,3m1V3a2}0X313S0W2n2W141=1%3l0w3n3E3.055E155M593)1n0C0+0;0N0Y0@0t3.0n5r4z0T1n0`5%5(4}2F1m040~3^0n5_5/532F0b0u1n000+005O5:2b5=0D5%5)2F0v0H4!645|661n0^69651i5~600,634%6a6h04684%5{5T016c1n5u5N6l015=6j6w6s6m5 04000A6q3q6E676k6g1i6A046C3P6J6F6i6T6y6n6M0K6P6D6U6#6u6%5f6V6d045p6-6y6G6;3S6)000N6,6Z6R1n6v3o6x6=6z6@5j6`796|6I6E6 0=722_6!6S7g6.6W4$6Q6.7f5k5`786~6L000r7k5S7e756}3{6W6_737t6$7o6(7z0c7C7m7F7N797q6f6{7M776!6 0l7R746:7U3S6W7c7K7Y046H7!7h7z117(7L7*7?7p6@517s7:7=3E7x3{6 0E7`7:76846!7-5d817E7;7G4l6 0;898h8b3P854l7-7X8h834N7w7#7z0!8n3S7n7}6y7I8u8D7Z8c7@600|8C3{8E8L7~6e6r7)8w2_8r4z6 0S8P4l8R8q8d7b8I8Q8K8*8M6M0y8%4z8)8Y8+6B8-8(8/8`8;000.8@5;7T8F7V7 8}8^8 3X8z600@946t8p908T4u9a958i4.8y910t9h1i8_9d6E8t8V7{8X9x6.6 0%9u6/9j9D8G8,9A828j8!7z0Y9H9w8Z6b9M8g8J9p977y600C9T968S9L1n7r7d9Z9C9V2b6 0J9)7|9+984!8f9/8.9!9{9$6M0$9_9J9=6?9}9n6t9C069r9E7z0da69P9Waa9N8vak9?7z0paj7+7H7b9~4N7S040_3^5l4s1n0,0S0|0Y0t0f5Y0%0%0@0Nap1i5+045-au8~5?ab6K600{at9#av1n7J7l8WaR016 0Oa%a2a)6XaZ6/aB5e3;aFaHaJ0f0!0S0%a.aTaVa(aX5@ana30003a=8:9la+7D9:a.6 0Pbf9k9,a^bba0a{5kaD4z0}1n150ja_0G3Aa_0q0j1n0W3V0W0i0)0f0b5E2:a_5=0xbF1n0v0T0FbS9ca83TbI1f1Tb!040Q9Jae5`6!0q1nbP3}0wb55,a.6Wax3#af6yb=040vbM1k0-1 bJ0F0w0i0:0f0FbY3Vb`aUb|9X4Fc079by040j3}a.c20Hb5bD043fct0V1n0:2z0Zb_bsaXbUcH4IcB042Tb+cJ9Y4_bWbYb+0Qb-5^7wb:6Ec2272hbRcK9o9;b;b?0m0v2m270f2m0q0i1UaW5*b{c{3vcTbZc*6t0LbVcyb+0Ic,c#b(0bb*d29v1nd4deb%d6di5=0IcYcZb$c22%3f0F0b0fc%2~cGb8c|cjc~3J5V5X5Z5#b+dhcRaEcN16dyd7docZ6!cp0HbBdD5U040bc/c;0wc?1Ec_cw1nczdXdjaGaIaKaMaOaQdl9*8xdpdSda04ds0qdudwdOc)dA2Fb6ct1ne0e2dxe5a?4laT0Oe904d:b0d?aPdJd5d!c:1Ad%c@d*d_04dn9qd|dT1n0w1 dWe6dEdZd#etd(c^c`eHaScxd-ePd/a aKb2b4exb.d|d}6.c2c40)c6c80scacccecg0)cib7ef4IbWc51le,e.cdcf17e=d.ehejeleWb3epdic2erd$eMewdL9beydRcna}dZbQdze^e7c}eTfbfnci0{ejebdvedfod{5_eC042:0Fcc0qejb@eebg6yf4d.e(e{c70Hc9cbe e;420#5Q5L1(5x0#5z1V0F5Bf+2 2{2m2o2}0s26f$f)5I1#bj3{2:0v0f0j0s0}d%0M0e1n1N1P1R1T0n9J1(3F1$0l0)0n1T0F0n0sc_2)0n2%1g0Hf^0n2-5E1J0)13ca0:0n271b1;2=0H1E2K0H2:gGgcev1b0s2H1F1R00191b5E0i0k2:e10ncfc_gE002Jdcc:27gwgcbJcD2=0hgNgk120H0b17e10/0n0A2;0Hgr0w3x16g;0ndcgr2ah7hag~0:0i2=ccg=1E1;2+360)gF0nbUf#3S2d1~2022f}4ldUeGfp2baT0/hIa.cpeEdVcihI0/5Of!5Fb,gdgf1:1=hw202f213k5x5v3qf#hBe_ekeVaL0NaNeof3frhFdfaYdi6 a$b+a78{6^b+d9ag60a;h ck8|exi47O600?bo9K9|9mibbl7zbei8d.9zfgc+il60bnioeTiq9 aXbu4Fc-h.d;b1f8h@dCeT5=bairaq60ineZi9i2ikd.bmigb$6W6Ya,9Bit6Mh~iRipcl7/aoiV7zi7i*ixi,i#9Oi/ieiXi17.i^8hiB4Nbw2FcpbAbCbEfabH04bJ0)bLbNfLfBi 9ZcQizh-bXd1iNh`ic79c2bJdceOjl9ocXeAfDd~jge?iSb~1ofkcS04gQ0fjnjEi+8U7vc!6.cpcr0:ejcvf3eRfJfQcMcD0qcFcPbFcMcOexjki-fljNexcWe!eBd~fAi3fKeKc=gQjOfsd0f9jpdjjYk6dmjrfljuddk9dgd5k8jx6tezjRdpiDfye3c(jhih3Se8fQdF5Y5!5$exdKkjdYj|exklcmj`e%b?fuiI0{e@fNjsea0Tdtfze4ksb$fPk3iEemh;d@k5h_djfceLk1d.dmfjjSc11njLj?eTehkPbpkRk#f7eYkf04kCkQflk,k0d)jwl5a0kHfCb$cpfGfIfKkMk`1neikwjKl9jMcU4@hS5Rf%f_5z1pf)16181a04.

###(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

.128013sHY3_8èufvIy 7ZnGaS1me(P4C2V:Ktwi]WD[hE*@)6Oo;bcdUgM/XT0lqABpQ.rLF-R,}=+Nk{95Jxé050X0w0F0s0H0)0b0n0W0)0s0b0b0`010F0H0-010406050b0i0v0v0s0:0m040t0T0)0i1k0T0q0n020s0v0-0U0n0@0w1u0:0*0i0w0b050#1r1t1v1x1p0-041V1$051)0#1)1+1$1p0X0H0k1c1e1g1i0M0H0Z0M0)1|0M0F1n05170V0)0w1@1f1h011{1}1 1}0F2527230F0V0T0X1x240:1%0F0M1c1A0b0-0s0q1i0B01291_010j190w0q1I0w232x2z2E2b2H272K0v2M040a0n0y0:0T0-0T0b0H1D1F152v0:0:0w0W2+1V2O0q1%0#2t2`0F2r2q2s0X2Q1i1 0q2J2(231;1?1d2a340H360q2n1=230-2:1%2^2`3o1q2y1F3c2F3h0:1u0)1n0n0u2@3s1o3r2P3u2b3w3y3A0B3D2z3F2^33013K0s3z040n0e3O2_1p3R3I1i3U3W0n0z3!3Q3s3S3*3A103.3$3:3(3T0T3x3V3A0R3^3G3t1^3J3}3L3X0o423%453)473 3X0g4b3`4d3|3~3+0 4j3H4l3=040u0(4q443d4m480u3C1W3E3_4r4z4t0u3N4E3P4G4y3v4f3W0u3Z4M3#433;4R1n0u3-4V3/4H4Q4n4!3@4%4O4Y4+4u414.4X3{4J4a4@4c4I4Z4u4i4|4k4~4;0u4p524)464;0B4w584P5a480B4D3o4/4_4 0B4L5k4^4s5n4U3q1,3m1V3a2}0X313S0W2n2W141=1%3l0w3n3E3.055E155M593)1n0C0+0;0N0Y0@0t3.0n5r4z0T1n0`5%5(4}2F1m040~3^0n5_5/532F0b0u1n000+005O5:2b5=0D5%5)2F0v0H4!645|661n0^69651i5~600,634%6a6h04684%5{5T016c1n5u5N6l015=6j6w6s6m5 04000A6q3q6E676k6g1i6A046C3P6J6F6i6T6y6n6M0K6P6D6U6#6u6%5f6V6d045p6-6y6G6;3S6)000N6,6Z6R1n6v3o6x6=6z6@5j6`796|6I6E6 0=722_6!6S7g6.6W4$6Q6.7f5k5`786~6L000r7k5S7e756}3{6W6_737t6$7o6(7z0c7C7m7F7N797q6f6{7M776!6 0l7R746:7U3S6W7c7K7Y046H7!7h7z117(7L7*7?7p6@517s7:7=3E7x3{6 0E7`7:76846!7-5d817E7;7G4l6 0;898h8b3P854l7-7X8h834N7w7#7z0!8n3S7n7}6y7I8u8D7Z8c7@600|8C3{8E8L7~6e6r7)8w2_8r4z6 0S8P4l8R8q8d7b8I8Q8K8*8M6M0y8%4z8)8Y8+6B8-8(8/8`8;000.8@5;7T8F7V7 8}8^8 3X8z600@946t8p908T4u9a958i4.8y910t9h1i8_9d6E8t8V7{8X9x6.6 0%9u6/9j9D8G8,9A828j8!7z0Y9H9w8Z6b9M8g8J9p977y600C9T968S9L1n7r7d9Z9C9V2b6 0J9)7|9+984!8f9/8.9!9{9$6M0$9_9J9=6?9}9n6t9C069r9E7z0da69P9Waa9N8vak9?7z0paj7+7H7b9~4N7S040_3^5l4s1n0,0S0|0Y0t0f5Y0%0%0@0Nap1i5+045-au8~5?ab6K600{at9#av1n7J7l8WaR016 0Oa%a2a)6XaZ6/aB5e3;aFaHaJ0f0!0S0%a.aTaVa(aX5@ana30003a=8:9la+7D9:a.6 0Pbf9k9,a^bba0a{5kaD4z0}1n150ja_0G3Aa_0q0j1n0W3V0W0i0)0f0b5E2:a_5=0xbF1n0v0T0FbS9ca83TbI1f1Tb!040Q9Jae5`6!0q1nbP3}0wb55,a.6Wax3#af6yb=040vbM1k0-1 bJ0F0w0i0:0f0FbY3Vb`aUb|9X4Fc079by040j3}a.c20Hb5bD043fct0V1n0:2z0Zb_bsaXbUcH4IcB042Tb+cJ9Y4_bWbYb+0Qb-5^7wb:6Ec2272hbRcK9o9;b;b?0m0v2m270f2m0q0i1UaW5*b{c{3vcTbZc*6t0LbVcyb+0Ic,c#b(0bb*d29v1nd4deb%d6di5=0IcYcZb$c22%3f0F0b0fc%2~cGb8c|cjc~3J5V5X5Z5#b+dhcRaEcN16dyd7docZ6!cp0HbBdD5U040bc/c;0wc?1Ec_cw1nczdXdjaGaIaKaMaOaQdl9*8xdpdSda04ds0qdudwdOc)dA2Fb6ct1ne0e2dxe5a?4laT0Oe904d:b0d?aPdJd5d!c:1Ad%c@d*d_04dn9qd|dT1n0w1 dWe6dEdZd#etd(c^c`eHaScxd-ePd/a aKb2b4exb.d|d}6.c2c40)c6c80scacccecg0)cib7ef4IbWc51le,e.cdcf17e=d.ehejeleWb3epdic2erd$eMewdL9beydRcna}dZbQdze^e7c}eTfbfnci0{ejebdvedfod{5_eC042:0Fcc0qejb@eebg6yf4d.e(e{c70Hc9cbe e;420#5Q5L1(5x0#5z1V0F5Bf+2 2{2m2o2}0s26f$f)5I1#bj3{2:0v0f0j0s0}d%0M0e1n1N1P1R1T0n9J1(3F1$0l0)0n1T0F0n0sc_2)0n2%1g0Hf^0n2-5E1J0)13ca0:0n271b1;2=0H1E2K0H2:gGgcev1b0s2H1F1R00191b5E0i0k2:e10ncfc_gE002Jdcc:27gwgcbJcD2=0hgNgk120H0b17e10/0n0A2;0Hgr0w3x16g;0ndcgr2ah7hag~0:0i2=ccg=1E1;2+360)gF0nbUf#3S2d1~2022f}4ldUeGfp2baT0/hIa.cpeEdVcihI0/5Of!5Fb,gdgf1:1=hw202f213k5x5v3qf#hBe_ekeVaL0NaNeof3frhFdfaYdi6 a$b+a78{6^b+d9ag60a;h ck8|exi47O600?bo9K9|9mibbl7zbei8d.9zfgc+il60bnioeTiq9 aXbu4Fc-h.d;b1f8h@dCeT5=bairaq60ineZi9i2ikd.bmigb$6W6Ya,9Bit6Mh~iRipcl7/aoiV7zi7i*ixi,i#9Oi/ieiXi17.i^8hiB4Nbw2FcpbAbCbEfabH04bJ0)bLbNfLfBi 9ZcQizh-bXd1iNh`ic79c2bJdceOjl9ocXeAfDd~jge?iSb~1ofkcS04gQ0fjnjEi+8U7vc!6.cpcr0:ejcvf3eRfJfQcMcD0qcFcPbFcMcOexjki-fljNexcWe!eBd~fAi3fKeKc=gQjOfsd0f9jpdjjYk6dmjrfljuddk9dgd5k8jx6tezjRdpiDfye3c(jhih3Se8fQdF5Y5!5$exdKkjdYj|exklcmj`e%b?fuiI0{e@fNjsea0Tdtfze4ksb$fPk3iEemh;d@k5h_djfceLk1d.dmfjjSc11njLj?eTehkPbpkRk#f7eYkf04kCkQflk,k0d)jwl5a0kHfCb$cpfGfIfKkMk`1neikwjKl9jMcU4@hS5Rf%f_5z1pf)16181a04.