Aller au contenu

Score d'un mot au Scrabble⚓︎

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 lors du 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.

Exemple

Si 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.

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 « masque ». Dans l'exemple précédent, le masque est la chaine "+---#-". Le caractère "-" représente une case sans bonus.

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
  • masque représentant l'emplacement du mot

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

# testsbksl-nlassert calculpy-undscore("GIRAFE","-+---#") == 22bksl-nlassert calculpy-undscore("KAYAK", "--+--") == 42bksl-nlassert calculpy-undscore("INFORMATIQUE", "--@---------") == 69bksl-nlbksl-nlbksl-nlbksl-nl# autres testsbksl-nlassert calculpy-undscore("OXYGENER", "@--+---@") == 261bksl-nlassert calculpy-undscore("PROGRAMME", "py-str---py-str---py-str") == 24bksl-nlassert calculpy-undscore("PYTHON", "------") == 20bksl-nlbksl-nlbksl-nlbksl-nl ∞/∞

VALEURS = {'A': 1, 'B': 3, 'C': 3, 'D': 2, 'E': 1, 'F': 4, 'G': 2, 'H': 4, bksl-nl 'I': 1, 'J': 8, 'K': 10, 'L': 1, 'M': 2, 'N': 1, 'O': 1, 'P': 3, bksl-nl 'Q': 8, 'R': 1, 'S': 1, 'T': 1, 'U': 1, 'V': 4, 'W': 10, 'X': 10, bksl-nl 'Y': 10, 'Z': 10}bksl-nlbksl-nlBONUSpy-undLETTRE = {'+': 2, 'py-str': 3}bksl-nlBONUSpy-undMOT = {'#': 2, '@': 3}bksl-nlbksl-nldef calculpy-undscore(mot, masque):bksl-nl score = 0bksl-nl multiplicateurpy-undtotal = 1bksl-nl for i in range(len(mot)):bksl-nl lettre, symbolepy-undbonus = mot[i], masque[i]bksl-nl pointspy-undlettre = ...bksl-nl if symbolepy-undbonus in BONUSpy-undLETTRE:bksl-nl pointspy-undlettre = pointspy-undlettre py-str ...bksl-nl elif symbolepy-undbonus in ... :bksl-nl multiplicateurpy-undtotal = ...bksl-nl score = score + ...bksl-nl return ...bksl-nlbksl-nl# testsbksl-nlassert calculpy-undscore("GIRAFE","+---#-") == 24bksl-nlassert calculpy-undscore("KAYAK", "--+--") == 42bksl-nlassert calculpy-undscore("INFORMATIQUE", "--@---------") == 69bksl-nlbksl-nlVALEURS = {'A': 1, 'B': 3, 'C': 3, 'D': 2, 'E': 1, 'F': 4, 'G': 2, 'H': 4, bksl-nl 'I': 1, 'J': 8, 'K': 10, 'L': 1, 'M': 2, 'N': 1, 'O': 1, 'P': 3, bksl-nl 'Q': 8, 'R': 1, 'S': 1, 'T': 1, 'U': 1, 'V': 4, 'W': 10, 'X': 10, bksl-nl 'Y': 10, 'Z': 10}bksl-nlbksl-nlbksl-nlBONUSpy-undLETTRE = {'+': 2, 'py-str': 3}bksl-nlBONUSpy-undMOT = {'#': 2, '@': 3}bksl-nlbksl-nldef calculpy-undscore(mot, masque):bksl-nl score = 0bksl-nl multiplicateurpy-undtotal = 1bksl-nl for i in range(len(mot)):bksl-nl lettre, symbolepy-undbonus = mot[i], masque[i]bksl-nl pointspy-undlettre = VALEURS[lettre]bksl-nl if symbolepy-undbonus in BONUSpy-undLETTRE:bksl-nl pointspy-undlettre = pointspy-undlettre py-str BONUSpy-undLETTRE[symbolepy-undbonus]bksl-nl elif symbolepy-undbonus in BONUSpy-undMOT:bksl-nl multiplicateurpy-undtotal = multiplicateurpy-undtotal py-str BONUSpy-undMOT[symbolepy-undbonus]bksl-nl score = score + pointspy-undlettrebksl-nl return score py-str multiplicateurpy-undtotalbksl-nlbksl-nl# testsbksl-nlassert calculpy-undscore("GIRAFE","+---#-") == 24bksl-nlassert calculpy-undscore("KAYAK", "--+--") == 42bksl-nlassert calculpy-undscore("INFORMATIQUE", "--@---------") == 69bksl-nlbksl-nlbksl-nlbksl-nlbksl-nlbksl-nl

A

Z

Retour en haut de la page