From cad4ffa34ef74c716860ac23b289f9882c1e4ed9 Mon Sep 17 00:00:00 2001 From: Nina Date: Mon, 26 Sep 2022 12:26:04 -0700 Subject: [PATCH 1/5] Passed first two tests of Wave 1 --- README.md | 6 +++++ adagrams/game.py | 56 ++++++++++++++++++++++++++++++++++++++++++- tests/test_wave_01.py | 3 +++ tests/test_wave_02.py | 5 ++++ tests/test_wave_03.py | 4 ++++ tests/test_wave_04.py | 7 ++++++ 6 files changed, 80 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 6a066368..4d2472d6 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,11 @@ # AdaGrams +#Pair Plan! +Learning styles: We both learn by doing. Once we learn a concept, we learn by applying. +Prefer receiving feedback like: Upfront, honest, straightforward +Communication skills we want to improve: Communicating ideas more, speaking up more +After Tuesday afternoon co-working, we'll check in about progress and sync up schedules if needed and consider office hours if need. If we're really stuck or struggling then we should ask for help! + ## Skills Assessed - Following directions and reading comprehension diff --git a/adagrams/game.py b/adagrams/game.py index 5fb37b11..038d4c70 100644 --- a/adagrams/game.py +++ b/adagrams/game.py @@ -1,5 +1,59 @@ +import random + def draw_letters(): - pass + # Import random - assign the randomized number to the index + # "bag" of letters will be a dictionary as shown below + # hand will be a list +# | A : 9 | N : 6 | +# | B : 2 | O : 8 | +# | C : 2 | P : 2 | +# | D : 4 | Q : 1 | +# | E : 12 | R : 6 | +# | F : 2 | S : 4 | +# | G : 3 | T : 6 | +# | H : 2 | U : 4 | +# | I : 9 | V : 2 | +# | J : 1 | W : 2 | +# | K : 1 | X : 1 | +# | L : 4 | Y : 2 | +# | M : 2 | Z : 1 | + bag_of_letters = { + '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 +} + num_of_letter = bag_of_letters + hand = [] + while len(hand) < 10: + for letter in bag_of_letters: + hand.append(letter) + break + return hand + +print(draw_letters()) def uses_available_letters(word, letter_bank): pass diff --git a/tests/test_wave_01.py b/tests/test_wave_01.py index 25ef73e7..65d114b1 100644 --- a/tests/test_wave_01.py +++ b/tests/test_wave_01.py @@ -31,6 +31,7 @@ 'Z': 1 } +#@pytest.mark.skip def test_draw_letters_draws_ten(): # Arrange/Act letters = draw_letters() @@ -38,6 +39,7 @@ def test_draw_letters_draws_ten(): # Assert assert len(letters) == 10 +#@pytest.mark.skip def test_draw_letters_is_list_of_letter_strings(): # Arrange/Act letters = draw_letters() @@ -49,6 +51,7 @@ def test_draw_letters_is_list_of_letter_strings(): assert type(elem) == str assert len(elem) == 1 +#@pytest.mark.skip def test_letter_not_selected_too_many_times(): for i in range(1000): diff --git a/tests/test_wave_02.py b/tests/test_wave_02.py index a5170d8a..fb1f7c4f 100644 --- a/tests/test_wave_02.py +++ b/tests/test_wave_02.py @@ -2,6 +2,7 @@ from adagrams.game import uses_available_letters +@pytest.mark.skip def test_uses_available_letters_true_word_in_letter_bank(): # Arrange letters = ["D", "O", "G", "X", "X", "X", "X", "X", "X", "X"] @@ -13,6 +14,7 @@ def test_uses_available_letters_true_word_in_letter_bank(): # Assert assert is_valid == True +@pytest.mark.skip def test_uses_available_letters_false_word_in_letter_bank(): # Arrange letters = ["D", "O", "X", "X", "X", "X", "X", "X", "X", "X"] @@ -24,6 +26,7 @@ def test_uses_available_letters_false_word_in_letter_bank(): # Assert assert is_valid == False +@pytest.mark.skip def test_uses_available_letters_false_word_overuses_letter(): # Arrange letters = ["A", "X", "X", "X", "X", "X", "X", "X", "X", "X"] @@ -35,6 +38,7 @@ def test_uses_available_letters_false_word_overuses_letter(): # Assert assert is_valid == False +@pytest.mark.skip def test_uses_available_letters_does_not_change_letter_bank(): # Arrange letters = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"] @@ -48,6 +52,7 @@ def test_uses_available_letters_does_not_change_letter_bank(): assert is_valid == True assert letters == letters_copy +@pytest.mark.skip def test_uses_available_letters_ignores_case(): # Arrange letters = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"] diff --git a/tests/test_wave_03.py b/tests/test_wave_03.py index 5473db39..879941ca 100644 --- a/tests/test_wave_03.py +++ b/tests/test_wave_03.py @@ -2,22 +2,26 @@ from adagrams.game import score_word +@pytest.mark.skip def test_score_word_accurate(): # Assert assert score_word("A") == 1 assert score_word("DOG") == 5 assert score_word("WHIMSY") == 17 +@pytest.mark.skip def test_score_word_accurate_ignores_case(): # Assert assert score_word("a") == 1 assert score_word("dog") == 5 assert score_word("wHiMsY") == 17 +@pytest.mark.skip def test_score_zero_for_empty(): # Assert assert score_word("") == 0 +@pytest.mark.skip def test_score_extra_points_for_seven_or_longer(): # Assert assert score_word("XXXXXXX") == 64 diff --git a/tests/test_wave_04.py b/tests/test_wave_04.py index 8fdedf66..57649c2c 100644 --- a/tests/test_wave_04.py +++ b/tests/test_wave_04.py @@ -2,6 +2,7 @@ from adagrams.game import score_word, get_highest_word_score +@pytest.mark.skip def test_get_highest_word_score_accurate(): # Arrange words = ["X", "XX", "XXX", "XXXX"] @@ -14,6 +15,7 @@ def test_get_highest_word_score_accurate(): assert best_word[0] == "XXXX" assert best_word[1] == 32 +@pytest.mark.skip def test_get_highest_word_score_accurate_unsorted_list(): # Arrange words = ["XXX", "XXXX", "XX", "X"] @@ -25,6 +27,7 @@ def test_get_highest_word_score_accurate_unsorted_list(): assert best_word[0] == "XXXX" assert best_word[1] == 32 +@pytest.mark.skip def test_get_highest_word_tie_prefers_shorter_word(): # Arrange words = ["MMMM", "WWW"] @@ -38,6 +41,7 @@ def test_get_highest_word_tie_prefers_shorter_word(): assert best_word[0] == "WWW" assert best_word[1] == 12 +@pytest.mark.skip def test_get_highest_word_tie_prefers_shorter_word_unsorted_list(): # Arrange words = ["WWW", "MMMM"] @@ -51,6 +55,7 @@ def test_get_highest_word_tie_prefers_shorter_word_unsorted_list(): assert best_word[0] == "WWW" assert best_word[1] == 12 +@pytest.mark.skip def test_get_highest_word_tie_prefers_ten_letters(): # Arrange words = ["AAAAAAAAAA", "BBBBBB"] @@ -62,6 +67,7 @@ def test_get_highest_word_tie_prefers_ten_letters(): assert best_word[0] == "AAAAAAAAAA" assert best_word[1] == 18 +@pytest.mark.skip def test_get_highest_word_tie_prefers_ten_letters_unsorted_list(): # Arrange words = ["BBBBBB", "AAAAAAAAAA"] @@ -73,6 +79,7 @@ def test_get_highest_word_tie_prefers_ten_letters_unsorted_list(): assert best_word[0] == "AAAAAAAAAA" assert best_word[1] == 18 +@pytest.mark.skip def test_get_highest_word_tie_same_length_prefers_first(): # Arrange words = ["AAAAAAAAAA", "EEEEEEEEEE"] From f05fcf706c109238ff67084b34639145b24b7074 Mon Sep 17 00:00:00 2001 From: Nina Date: Tue, 27 Sep 2022 13:39:25 -0700 Subject: [PATCH 2/5] Finished Wave 1 --- adagrams/game.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/adagrams/game.py b/adagrams/game.py index 038d4c70..70b5219b 100644 --- a/adagrams/game.py +++ b/adagrams/game.py @@ -17,7 +17,7 @@ def draw_letters(): # | K : 1 | X : 1 | # | L : 4 | Y : 2 | # | M : 2 | Z : 1 | - bag_of_letters = { + bag_of_letters_dict = { 'A': 9, 'B': 2, 'C': 2, @@ -45,16 +45,21 @@ def draw_letters(): 'Y': 2, 'Z': 1 } - num_of_letter = bag_of_letters + bag_of_letters_list = [] + for key, value in bag_of_letters_dict.items(): + for letter in range(value): + bag_of_letters_list.append(key) + hand = [] + while len(hand) < 10: - for letter in bag_of_letters: + for letter in bag_of_letters_list: hand.append(letter) + letter_of_index = bag_of_letters_list.index(letter) + bag_of_letters_list.pop(letter_of_index) break return hand -print(draw_letters()) - def uses_available_letters(word, letter_bank): pass From 68f1d92b6bcbc254b9f0fbdc19c1361e8a1b1c7f Mon Sep 17 00:00:00 2001 From: Nina Date: Tue, 27 Sep 2022 14:48:37 -0700 Subject: [PATCH 3/5] Finished Wave 2 --- adagrams/game.py | 19 ++++++++++++++++++- tests/test_wave_02.py | 10 +++++----- 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/adagrams/game.py b/adagrams/game.py index 70b5219b..81f6ec20 100644 --- a/adagrams/game.py +++ b/adagrams/game.py @@ -61,7 +61,24 @@ def draw_letters(): return hand def uses_available_letters(word, letter_bank): - pass + true_false = [] + word = word.upper() + word_list = [] + print(letter_bank) + print("-------") + print(word) + for letter in word: + word_list.append(letter) + if letter in letter_bank and word_list.count(letter) == letter_bank.count(letter): + true_false.append(True) + # letter_of_index = letter_bank.index(letter) + # letter_bank.pop(letter_of_index) + else: + true_false.append(False) + if False in true_false: + return False + else: + return True def score_word(word): pass diff --git a/tests/test_wave_02.py b/tests/test_wave_02.py index fb1f7c4f..e7ee5c1b 100644 --- a/tests/test_wave_02.py +++ b/tests/test_wave_02.py @@ -2,7 +2,7 @@ from adagrams.game import uses_available_letters -@pytest.mark.skip +#@pytest.mark.skip def test_uses_available_letters_true_word_in_letter_bank(): # Arrange letters = ["D", "O", "G", "X", "X", "X", "X", "X", "X", "X"] @@ -14,7 +14,7 @@ def test_uses_available_letters_true_word_in_letter_bank(): # Assert assert is_valid == True -@pytest.mark.skip +#@pytest.mark.skip def test_uses_available_letters_false_word_in_letter_bank(): # Arrange letters = ["D", "O", "X", "X", "X", "X", "X", "X", "X", "X"] @@ -26,7 +26,7 @@ def test_uses_available_letters_false_word_in_letter_bank(): # Assert assert is_valid == False -@pytest.mark.skip +#@pytest.mark.skip def test_uses_available_letters_false_word_overuses_letter(): # Arrange letters = ["A", "X", "X", "X", "X", "X", "X", "X", "X", "X"] @@ -38,7 +38,7 @@ def test_uses_available_letters_false_word_overuses_letter(): # Assert assert is_valid == False -@pytest.mark.skip +#@pytest.mark.skip def test_uses_available_letters_does_not_change_letter_bank(): # Arrange letters = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"] @@ -52,7 +52,7 @@ def test_uses_available_letters_does_not_change_letter_bank(): assert is_valid == True assert letters == letters_copy -@pytest.mark.skip +#@pytest.mark.skip def test_uses_available_letters_ignores_case(): # Arrange letters = ["A", "B", "C", "D", "E", "F", "G", "H", "I", "J"] From c000af3d2b25a1baef9f7872765245fb3880476e Mon Sep 17 00:00:00 2001 From: Nina Date: Wed, 28 Sep 2022 13:29:34 -0700 Subject: [PATCH 4/5] Wave 3 finished --- adagrams/game.py | 29 +++++++++++++++++++++++------ tests/test_wave_03.py | 8 ++++---- 2 files changed, 27 insertions(+), 10 deletions(-) diff --git a/adagrams/game.py b/adagrams/game.py index 81f6ec20..8fc88702 100644 --- a/adagrams/game.py +++ b/adagrams/game.py @@ -64,15 +64,11 @@ def uses_available_letters(word, letter_bank): true_false = [] word = word.upper() word_list = [] - print(letter_bank) - print("-------") - print(word) + for letter in word: word_list.append(letter) if letter in letter_bank and word_list.count(letter) == letter_bank.count(letter): true_false.append(True) - # letter_of_index = letter_bank.index(letter) - # letter_bank.pop(letter_of_index) else: true_false.append(False) if False in true_false: @@ -81,7 +77,28 @@ def uses_available_letters(word, letter_bank): return True def score_word(word): - pass + scoreboard = { + 1 : "A, E, I, O, U, L, N, R, S, T", + 2 : "D, G", + 3 : "B, C, M, P", + 4 : "F, H, V, W, Y", + 5 : "K", + 8 : "J, X", + 10 : "Q, Z" + } + word = word.upper() + #- If the length of the word is 7, 8, 9, or 10, + # then the word gets an additional 8 points + score = 0 + for letter in word: + for key, value in scoreboard.items(): + if letter in value: + score += key + if len(word) > 6: + score += 8 + return score + + def get_highest_word_score(word_list): pass \ No newline at end of file diff --git a/tests/test_wave_03.py b/tests/test_wave_03.py index 879941ca..396ea3a2 100644 --- a/tests/test_wave_03.py +++ b/tests/test_wave_03.py @@ -2,26 +2,26 @@ from adagrams.game import score_word -@pytest.mark.skip +# @pytest.mark.skip def test_score_word_accurate(): # Assert assert score_word("A") == 1 assert score_word("DOG") == 5 assert score_word("WHIMSY") == 17 -@pytest.mark.skip +# @pytest.mark.skip def test_score_word_accurate_ignores_case(): # Assert assert score_word("a") == 1 assert score_word("dog") == 5 assert score_word("wHiMsY") == 17 -@pytest.mark.skip +# @pytest.mark.skip def test_score_zero_for_empty(): # Assert assert score_word("") == 0 -@pytest.mark.skip +# @pytest.mark.skip def test_score_extra_points_for_seven_or_longer(): # Assert assert score_word("XXXXXXX") == 64 From 6452333a10b1f2d3e229778beaa4c4e3146aa96a Mon Sep 17 00:00:00 2001 From: Nina Date: Wed, 28 Sep 2022 15:04:26 -0700 Subject: [PATCH 5/5] First half of Wave 4 tests passed --- adagrams/game.py | 24 +++++++++++++++++++++++- tests/test_wave_04.py | 6 +++--- 2 files changed, 26 insertions(+), 4 deletions(-) diff --git a/adagrams/game.py b/adagrams/game.py index 8fc88702..44f74524 100644 --- a/adagrams/game.py +++ b/adagrams/game.py @@ -101,4 +101,26 @@ def score_word(word): def get_highest_word_score(word_list): - pass \ No newline at end of file + tuple = () + winner_score = 0 + word_score = {} + winner_word = '' + for word in word_list: + word_score[word] = score_word(word) + for key, value in word_score.items(): + if value > winner_score: + winner_score = value + winner_word = key + if value == winner_score: + if len(key) < len(winner_word): + winner_word = key + + tuple = (winner_word, winner_score) + return tuple + # winner = () + # word_score = {} + # for word in word_list: + # word_score[word] = score_word(word) + # for key, value in word_score.items(): + # winner + max(value),key + # return winner diff --git a/tests/test_wave_04.py b/tests/test_wave_04.py index 57649c2c..e28cdee1 100644 --- a/tests/test_wave_04.py +++ b/tests/test_wave_04.py @@ -2,7 +2,7 @@ from adagrams.game import score_word, get_highest_word_score -@pytest.mark.skip +#@pytest.mark.skip def test_get_highest_word_score_accurate(): # Arrange words = ["X", "XX", "XXX", "XXXX"] @@ -15,7 +15,7 @@ def test_get_highest_word_score_accurate(): assert best_word[0] == "XXXX" assert best_word[1] == 32 -@pytest.mark.skip +#@pytest.mark.skip def test_get_highest_word_score_accurate_unsorted_list(): # Arrange words = ["XXX", "XXXX", "XX", "X"] @@ -27,7 +27,7 @@ def test_get_highest_word_score_accurate_unsorted_list(): assert best_word[0] == "XXXX" assert best_word[1] == 32 -@pytest.mark.skip +#@pytest.mark.skip def test_get_highest_word_tie_prefers_shorter_word(): # Arrange words = ["MMMM", "WWW"]