Inspecting the Game ‘Contact’: Word Analysis Using Python

Isaac
5 min readDec 5, 2019

If you’ve ever traveled more than an hour in a car, you’ve likely played a game or two to chip away at the time. ‘I Spy’ ring any bells? You know what I’m talking about. Car games! There’s one game in particular that’s been my personal go-to for many long road trips: a word game called ‘Contact’. After playing countless hours, and in true ‘nerd’ fashion, I took to Python and used simple NLP techniques to possibly optimize the game play of ‘Contact’.

So first, how is Contact played? Contact requires three or more players. One person thinks of a word and all other players are then teamed together to try to guess the player’s word. The person who came up with the word is called the Defender. They are defending against all the other players learning more letters of their word. The Defender begins by telling the guessers the first letter of their word. Let’s use the word ‘Tractor’ as an example. The Defender who thought of ‘Tractor’ would tell the players their word starts with a ‘T’. The other players are now trying to get more letters so they come closer to guessing the word.

To get another letter, the guessers must think of a word that starts with the given root (‘T’), and get the other guessers to say that word BEFORE the Defender says it. If the guessers think of the word before the Defender, they must say, ‘Contact!’ (to signal that they’ve thought of their teammate’s word) then the two team members say, ‘3…2…1…’ followed by the word they’re thinking in unison. They count down from 3 to give the Defender a buffer to guess the word first. If the word the guessers called out is the same, then the Defender must give another letter of their word.

Back to the example — since our root letter is ‘T’. The guessers would need to come up with any word that starts with ‘T’, let’s say ‘Toll’. The guesser that thought of ‘Toll’ would describe the word in a question saying, “Is your word a fee collected on the highway?” If the Defender thinks of the word, they don’t need to say ‘Contact’, they can directly call out ‘Nope, my word isn’t Toll’ (or just say ‘Toll’). Then the word is dead. The guessers don’t get another letter. BUT if the Defender can’t think of Toll (maybe they’re unfamiliar with the term because they’ve somehow managed to avoid all toll roads in their divinely blessed lifetime), then a guesser would say ‘Contact!’ when they think of the word. And then the two guessers (the one that gave the clue for ‘Toll’, and the person that said Contact) would count down and say, “3…2…1…Toll” in unison. Then the Defender would need to give them another letter (‘r’). If they say different words (let’s say ‘Toll’, and someone mistakingly said ‘Tip’) then the Defender doesn’t have to give another letter.

Once the guessers get the next letter, now they need to think of a word with that new root (‘Tr’ in our example). They continue this way until they finally guess the word. Then another person becomes the Defender and you keep word guessing until you reach your destination (or until someone’s thoroughly annoyed)!

‘Contact’ Analysis — the Search for the Perfect Word!

In playing this game, I noticed that the words with commonly used roots were the most fun to play for everyone (even for the Defender). You might think a rare word like ‘Ozotype’ would be a good word, but once the guessers get the ‘Oz’ root, your selection for words to give as clues to your teammates is severely limited (Oz from the Wizard of Oz, Ozone, Ozark, Ozzy Osborne are all I can think of). So the round would either be done very quickly (when we think of Ozotype), or the round would become a ‘guess the exact word I’m thinking’ game (if we couldn’t think of Ozotype), which honestly isn’t that fun. The fun comes from giving creative clues to your teammates, and the Defender has fun blocking the letter accrual by correctly guessing the words first. An abundance of possible words is the goal. It keeps the game moving. Thus, common roots lead to the best words.

With this thought process, I wanted to find the best roots, and possibly the best words to choose in Contact. So I wrote a Python script to find these roots.

This function identifies the roots that have the most off-shoot words, and returns the number of words for each root. Here’s a table of the findings for each letter:

I figured once you find a good root, then you want to pick a semi-rare word with that root. For instance, ‘under’ is an extremely good root. But I might want to chose ‘underworld’ instead of ‘underwear’ because it will be slightly harder to guess than ‘underwear’. With this logic, a next step for this analysis could be to identify rare-ish words to find using these common roots.

Finally, I wanted to find the words that have the most possible off-shoot words. This is one word for each letter that adds up all the possible words for each letter. So ‘apple’ is calculated as ‘a’ (14,537 words that start with ‘a’), ‘ap’ (899 words), ‘app’ (296 words), ‘appl’ (54 words) and one word for ‘apple’. So that adds up to 15,787. Below are the 26 words that added up to the most possible words for game-play:

From this word breakdown analysis, you can see that ‘understandableness’ has the most off-shoot words when added together. I’m not saying this is the perfect word, you’d probably stop the round at ‘understand’ (we normally just play until the full root of a word), but it’s just fun to find the words that would lead to the most off-shoot words! If you’d like to run this code with any word you’re thinking of, visit my script for this project at the link below:

Please view my script for more insight into how I ran this analysis and please leave suggestions! Thanks.

--

--