From 97cae81ceb351ed48fbdb420534fcd38a1c0bcab Mon Sep 17 00:00:00 2001 From: ayaka Date: Mon, 20 Sep 2021 20:50:08 -0700 Subject: [PATCH 1/4] pass all tests of wave 1 & 2 --- adagrams/game.py | 53 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/adagrams/game.py b/adagrams/game.py index 5fb37b11..f08484ed 100644 --- a/adagrams/game.py +++ b/adagrams/game.py @@ -1,8 +1,57 @@ +import random +import string + +LETTER_POOL = { + 'A': 9, + 'B': 2, + 'C': 2, + 'D': 4, + 'E': 12, + 'F': 2, + 'G': 3, + 'H': 2, + 'I': 9, + 'J': 1, + 'K': 1, + 'L': 4, + 'M': 2, + 'N': 6, + 'O': 8, + 'P': 2, + 'Q': 1, + 'R': 6, + 'S': 4, + 'T': 6, + 'U': 4, + 'V': 2, + 'W': 2, + 'X': 1, + 'Y': 2, + 'Z': 1 +} + def draw_letters(): - pass + letters = [] + letters_counter = {} + while len(letters) < 10: + random_letter = random.choice(string.ascii_uppercase) + if letters_counter.get(random_letter) and letters_counter.get(random_letter) >= LETTER_POOL[random_letter]: + continue + else: + letters.append(random_letter) + if letters_counter.get(random_letter): + letters_counter[random_letter] += 1 + else: + letters_counter[random_letter] = 1 + return letters def uses_available_letters(word, letter_bank): - pass + for letter in word: + if word.count(letter) > letter_bank.count(letter): + return False + return True + + def score_word(word): pass From 6381975b7f5a38d216074da25216f34ad9a44ae9 Mon Sep 17 00:00:00 2001 From: ayaka Date: Wed, 22 Sep 2021 15:30:10 -0700 Subject: [PATCH 2/4] pass all tests of wave 3 & 4 --- adagrams/game.py | 38 ++++++++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/adagrams/game.py b/adagrams/game.py index f08484ed..47dcd359 100644 --- a/adagrams/game.py +++ b/adagrams/game.py @@ -54,7 +54,41 @@ def uses_available_letters(word, letter_bank): def score_word(word): - pass + letter_score = { + ("A", "E", "I", "O", "U", "L", "N", "R", "S", "T"): 1, + ("D", "G"): 2, + ("B", "C", "M", "P"): 3, + ("F", "H","V","W", "Y"): 4, + ("K",):5, + ("J", "X"): 8, + ("Q", "Z"): 10, + } + score = 0 + for letter in word.upper(): + for key in letter_score: + if letter in key: + score += letter_score.get(key) + if 7<= len(word) <= 10: + score += 8 + return score + def get_highest_word_score(word_list): - pass \ No newline at end of file + word_score = {} + for word in word_list: + word_score[word] = score_word(word) + max_score = max(list(word_score.values())) + winners = [] + for key, value in word_score.items(): + if value == max_score: + winners.append((key, value)) + min_value = len(winners[0][0]) + for item in winners: + min_value = min(min_value, len(item[0])) + winner = None + for item in winners: + if len(item[0]) == 10: + return item + elif len(item[0]) == min_value: + winner = item + return winner \ No newline at end of file From b25aafb9a4a8eb3827bd3cc5caac528d646ffde8 Mon Sep 17 00:00:00 2001 From: ayaka Date: Fri, 24 Sep 2021 17:07:42 -0700 Subject: [PATCH 3/4] refactor --- adagrams/game.py | 37 +++++++++++++++++++------------------ 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/adagrams/game.py b/adagrams/game.py index 47dcd359..9027a1e9 100644 --- a/adagrams/game.py +++ b/adagrams/game.py @@ -30,6 +30,7 @@ 'Z': 1 } + def draw_letters(): letters = [] letters_counter = {} @@ -45,6 +46,7 @@ def draw_letters(): letters_counter[random_letter] = 1 return letters + def uses_available_letters(word, letter_bank): for letter in word: if word.count(letter) > letter_bank.count(letter): @@ -52,7 +54,6 @@ def uses_available_letters(word, letter_bank): return True - def score_word(word): letter_score = { ("A", "E", "I", "O", "U", "L", "N", "R", "S", "T"): 1, @@ -74,21 +75,21 @@ def score_word(word): def get_highest_word_score(word_list): - word_score = {} + max_score_words= [] + max_score = 0 for word in word_list: - word_score[word] = score_word(word) - max_score = max(list(word_score.values())) - winners = [] - for key, value in word_score.items(): - if value == max_score: - winners.append((key, value)) - min_value = len(winners[0][0]) - for item in winners: - min_value = min(min_value, len(item[0])) - winner = None - for item in winners: - if len(item[0]) == 10: - return item - elif len(item[0]) == min_value: - winner = item - return winner \ No newline at end of file + score = score_word(word) + if score > max_score: + max_score = score + max_score_words = [(word, max_score)] + elif score == max_score: + max_score_words.append((word, max_score)) + + min_word = max_score_words[0] + for word in max_score_words: + if len(word[0]) == 10: + return word + elif len(word[0]) < len(min_word[0]): + min_word = word + return min_word + From f6797d102bfb7b74715f38d5e835a57294b4dd2f Mon Sep 17 00:00:00 2001 From: ayaka Date: Sat, 25 Sep 2021 20:09:28 -0700 Subject: [PATCH 4/4] refactor ver. 2 --- adagrams/game.py | 105 +++++++++++++++++++++++------------------------ 1 file changed, 52 insertions(+), 53 deletions(-) diff --git a/adagrams/game.py b/adagrams/game.py index 9027a1e9..e149aeb7 100644 --- a/adagrams/game.py +++ b/adagrams/game.py @@ -2,48 +2,53 @@ import string LETTER_POOL = { - 'A': 9, - 'B': 2, - 'C': 2, - 'D': 4, - 'E': 12, - 'F': 2, - 'G': 3, - 'H': 2, - 'I': 9, - 'J': 1, - 'K': 1, - 'L': 4, - 'M': 2, - 'N': 6, - 'O': 8, - 'P': 2, - 'Q': 1, - 'R': 6, - 'S': 4, - 'T': 6, - 'U': 4, - 'V': 2, - 'W': 2, - 'X': 1, - 'Y': 2, + 'A': 9, + 'B': 2, + 'C': 2, + 'D': 4, + 'E': 12, + 'F': 2, + 'G': 3, + 'H': 2, + 'I': 9, + 'J': 1, + 'K': 1, + 'L': 4, + 'M': 2, + 'N': 6, + 'O': 8, + 'P': 2, + 'Q': 1, + 'R': 6, + 'S': 4, + 'T': 6, + 'U': 4, + 'V': 2, + 'W': 2, + 'X': 1, + 'Y': 2, 'Z': 1 } +LETTER_SCORE = { + ("A", "E", "I", "O", "U", "L", "N", "R", "S", "T"): 1, + ("D", "G"): 2, + ("B", "C", "M", "P"): 3, + ("F", "H", "V", "W", "Y"): 4, + ("K",): 5, + ("J", "X"): 8, + ("Q", "Z"): 10, +} + def draw_letters(): letters = [] - letters_counter = {} while len(letters) < 10: random_letter = random.choice(string.ascii_uppercase) - if letters_counter.get(random_letter) and letters_counter.get(random_letter) >= LETTER_POOL[random_letter]: + if letters.count(random_letter) >= LETTER_POOL[random_letter]: continue else: letters.append(random_letter) - if letters_counter.get(random_letter): - letters_counter[random_letter] += 1 - else: - letters_counter[random_letter] = 1 return letters @@ -53,43 +58,37 @@ def uses_available_letters(word, letter_bank): return False return True - + def score_word(word): - letter_score = { - ("A", "E", "I", "O", "U", "L", "N", "R", "S", "T"): 1, - ("D", "G"): 2, - ("B", "C", "M", "P"): 3, - ("F", "H","V","W", "Y"): 4, - ("K",):5, - ("J", "X"): 8, - ("Q", "Z"): 10, - } score = 0 for letter in word.upper(): - for key in letter_score: + for key in LETTER_SCORE: if letter in key: - score += letter_score.get(key) - if 7<= len(word) <= 10: + score += LETTER_SCORE.get(key) + if 7 <= len(word) <= 10: score += 8 return score - + def get_highest_word_score(word_list): - max_score_words= [] max_score = 0 for word in word_list: score = score_word(word) if score > max_score: max_score = score - max_score_words = [(word, max_score)] + max_score_word_list = [word] elif score == max_score: - max_score_words.append((word, max_score)) + max_score_word_list.append(word) - min_word = max_score_words[0] - for word in max_score_words: - if len(word[0]) == 10: + winner = select_winner(max_score_word_list) + return winner, max_score + + +def select_winner(word_list): + min_word = word_list[0] + for word in word_list: + if len(word) == 10: return word - elif len(word[0]) < len(min_word[0]): + elif len(word) < len(min_word): min_word = word return min_word -