## 02 - Word Values Part II - A Simple Game

This challenge write-up first appeared on PyBites.

This week, each one of you has a homework assignment ... - Tyler Durden (Fight club)

### Given a random set of 7 letters build the most valuable word

Using what we've learned the last challenge this week we build a simple Scrabble-like game (without board):

```Letters drawn: G, A, R, Y, T, E, V
Form a valid word: gary  << user input
Word chosen: GARY (value: 8)
Optimal word possible: GARVEY (value: 13)
You scored: 61.5
```

Start coding by forking our challenges repo:

```\$ git clone https://github.com/pybites/challenges
```

If you already forked it sync it:

```# assuming using ssh key
\$ git remote add upstream [email protected]:pybites/challenges.git
\$ git fetch upstream
# if not on master:
\$ git checkout master
\$ git merge upstream/master
```

Use one of the templates:

```\$ cd 02
\$ cp game-TEMPLATE.py game.py
# code
```

### Requirements / steps

Last time we provided unittests and a guiding template. We received feedback that this was a bit too stringent. Therefore we provide two templates this time: game-help.py and game-nohelp.py

• We load in the necessary data structures to focus on the game:

```# Note that DICTIONARY is a set for O(1) lookups
from data import DICTIONARY, LETTER_VALUES, POUCH
```
• Draw 7 random letters from POUCH.

As said POUCH is given and contains a distribution of Scrabble letters so that the player gets enough vowels (equally drawing A-Z makes it extremely hard because you need more vowels to make words):

```['A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'B', 'B', 'C', 'C',
'D', 'D', 'D', 'D', ...]
```
• Ask the player to form a word with one or more of the 7 letters of the draw. Validate input for:

```1) all letters of word are in draw;
2) word is in DICTIONARY.
```
• Calculate the word value and show it to the player.

To focus on this challenge we re-use two methods from the previous challenge for this: calc_word_value and max_word_value.

• Calculate the optimal word (= max word value) checking all permutations of the 7 letters of the draw, cross-checking the DICTIONARY set for valid ones. This is a bit more advanced, but allows you to score the player (next).

• Show the player what the optimal word and its value is.

• Give the player a score based on the previous steps, basically: player_score / optimal_score.

### Bonus (not required)

The optimal solution calculation might be a bit difficult for some, that's why we stop here. But if you are feeling creative you might consider expanding this game:

• Keep scores in a shelve (file, db) and notify the player when a new record is reached.

• Work with hints and bonuses: hints cost x points, give a bonus of y points, for example when a 7 letter word is created (complete draw exhausted).

• Make a simple web, mobile app or pygame.

### Good luck!

Remember: there is no best solution, only learning more and better Python.

Enjoy and we're looking forward reviewing on Friday all the cool / creative / Pythonic stuff you come up with.

Have fun!

Again to start coding fork our challenges repo or sync it.