The list of words for each round is built before the exercise is ran to prevent list generation logic from interfering with application timing. The algorithm first gets the count of all words in the word list. Once that is done the algorithm loops and selects a random word for the word list. If the word is not in the used word list it is added to the list. This continues until all words for the word list have been selected. Once the word list generation is done a loop starts to pick the distractor words. The loop randomly selects a word and checks to see if this word is not in the used words list. If it is not it is added to the distractor list until all words for the list have been selected. Once the list has been generated the round is ran. This process continues until all rounds are complete.