From 7078d1459e15bdf3531977004964df39e9736bf8 Mon Sep 17 00:00:00 2001 From: Yolotzin Dunbar Date: Wed, 12 Feb 2020 11:34:10 -0800 Subject: [PATCH 1/5] Passed tests --- lib/adagrams.rb | 129 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) diff --git a/lib/adagrams.rb b/lib/adagrams.rb index e69de29..b005cda 100644 --- a/lib/adagrams.rb +++ b/lib/adagrams.rb @@ -0,0 +1,129 @@ +def score_word(word) + letter_values = { + "A" => 1, + "B" => 3, + "C" => 3, + "D" => 2, + "E" => 1, + "F" => 4, + "G" => 2, + "H" => 4, + "I" => 1, + "J" => 8, + "K" => 5, + "L" => 1, + "M" => 3, + "N" => 1, + "O" => 1, + "P" => 3, + "Q" => 10, + "R" => 1, + "S" => 1, + "T" => 1, + "U" => 1, + "V" => 4, + "W" => 4, + "X" => 8, + "Y" => 4, + "Z" => 10 + } + total_score = 0 + word.upcase.split(//).each do |letter| + total_score += letter_values[letter] + end + + if word.length > 6 + total_score += 8 + end + + return total_score +end + +# p score_word("AAAAAAAz") + +def draw_letters + letter_quantities = { + "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_pool = [] + letter_quantities.each do |letter, num| + num.times do + letter_pool << letter + end + end + + hand = letter_pool.shuffle[0..9] + return hand +end + +def uses_available_letters?(input, letters_in_hand) + input_array = input.upcase.split(//) + input_array.each do |letter| + if input_array.count(letter) > letters_in_hand.count(letter) + # puts "error" + return false + end + end + return true +end + +# p uses_available_letters?("dOgoz", ["D", "O", "G", "O"]) + +def highest_score_from(words) + highest_score = 0 + winning_words = [] + words.each do |word| + if score_word(word) > highest_score + highest_score = score_word(word) + winning_words.clear << word + elsif score_word(word) == highest_score + winning_words << word + end + end + + if winning_words.count == 1 + output_hash = {word: winning_words[0], score: highest_score} + return output_hash + else + winning_words.each do |word1| + if word1.length == 10 + output_hash = {word: word1, score: highest_score} + return output_hash + end + end + + winner = winning_words.min_by do |word2| + word2.length + end + output_hash = {word: winner, score: highest_score} + return output_hash + end +end + +# p highest_score_from(["X", "XX", "XXX", "XXXX"]) From 02b05d8882e17e5f0dad087b331ce94623b20315 Mon Sep 17 00:00:00 2001 From: Yolotzin Dunbar Date: Wed, 12 Feb 2020 14:37:53 -0800 Subject: [PATCH 2/5] Added comments --- lib/adagrams.rb | 92 +++++++++++++++++++++++++++---------------------- 1 file changed, 51 insertions(+), 41 deletions(-) diff --git a/lib/adagrams.rb b/lib/adagrams.rb index b005cda..29048fb 100644 --- a/lib/adagrams.rb +++ b/lib/adagrams.rb @@ -1,46 +1,7 @@ -def score_word(word) - letter_values = { - "A" => 1, - "B" => 3, - "C" => 3, - "D" => 2, - "E" => 1, - "F" => 4, - "G" => 2, - "H" => 4, - "I" => 1, - "J" => 8, - "K" => 5, - "L" => 1, - "M" => 3, - "N" => 1, - "O" => 1, - "P" => 3, - "Q" => 10, - "R" => 1, - "S" => 1, - "T" => 1, - "U" => 1, - "V" => 4, - "W" => 4, - "X" => 8, - "Y" => 4, - "Z" => 10 - } - total_score = 0 - word.upcase.split(//).each do |letter| - total_score += letter_values[letter] - end - - if word.length > 6 - total_score += 8 - end - return total_score -end # p score_word("AAAAAAAz") - +# Wave 1 method: drawing 10 letters into hand def draw_letters letter_quantities = { "A" => 9, @@ -82,6 +43,7 @@ def draw_letters return hand end +# Wave 2: Checks that input uses letters that are in hand def uses_available_letters?(input, letters_in_hand) input_array = input.upcase.split(//) input_array.each do |letter| @@ -92,9 +54,52 @@ def uses_available_letters?(input, letters_in_hand) end return true end + +# Wave 3: return a score for input word +def score_word(word) + letter_values = { + "A" => 1, + "B" => 3, + "C" => 3, + "D" => 2, + "E" => 1, + "F" => 4, + "G" => 2, + "H" => 4, + "I" => 1, + "J" => 8, + "K" => 5, + "L" => 1, + "M" => 3, + "N" => 1, + "O" => 1, + "P" => 3, + "Q" => 10, + "R" => 1, + "S" => 1, + "T" => 1, + "U" => 1, + "V" => 4, + "W" => 4, + "X" => 8, + "Y" => 4, + "Z" => 10 + } + total_score = 0 + word.upcase.split(//).each do |letter| + total_score += letter_values[letter] + end + + if word.length > 6 + total_score += 8 + end + + return total_score +end # p uses_available_letters?("dOgoz", ["D", "O", "G", "O"]) +# Wave 4: Outputs winning word and score def highest_score_from(words) highest_score = 0 winning_words = [] @@ -107,20 +112,25 @@ def highest_score_from(words) end end + # no tie scenario if winning_words.count == 1 output_hash = {word: winning_words[0], score: highest_score} return output_hash else + + # tie scenario winning_words.each do |word1| + # determines whether word is 10 letters long if word1.length == 10 output_hash = {word: word1, score: highest_score} return output_hash end end - + # if there is no 10 letter word, find shortest word winner = winning_words.min_by do |word2| word2.length end + output_hash = {word: winner, score: highest_score} return output_hash end From 4409c569625f7f41dbdcb4e568334049381c8d77 Mon Sep 17 00:00:00 2001 From: Yolotzin Dunbar Date: Wed, 12 Feb 2020 14:51:21 -0800 Subject: [PATCH 3/5] Refactored return statements --- lib/adagrams.rb | 23 ++++++++--------------- 1 file changed, 8 insertions(+), 15 deletions(-) diff --git a/lib/adagrams.rb b/lib/adagrams.rb index 29048fb..3d31115 100644 --- a/lib/adagrams.rb +++ b/lib/adagrams.rb @@ -1,6 +1,3 @@ - - -# p score_word("AAAAAAAz") # Wave 1 method: drawing 10 letters into hand def draw_letters letter_quantities = { @@ -39,8 +36,7 @@ def draw_letters end end - hand = letter_pool.shuffle[0..9] - return hand + return letter_pool.shuffle[0..9] end # Wave 2: Checks that input uses letters that are in hand @@ -114,25 +110,22 @@ def highest_score_from(words) # no tie scenario if winning_words.count == 1 - output_hash = {word: winning_words[0], score: highest_score} - return output_hash + return {word: winning_words[0], score: highest_score} else # tie scenario - winning_words.each do |word1| + winning_words.each do |word| # determines whether word is 10 letters long - if word1.length == 10 - output_hash = {word: word1, score: highest_score} - return output_hash + if word.length == 10 + return {word: word, score: highest_score} end end # if there is no 10 letter word, find shortest word - winner = winning_words.min_by do |word2| - word2.length + winner = winning_words.min_by do |word| + word.length end - output_hash = {word: winner, score: highest_score} - return output_hash + return {word: winner, score: highest_score} end end From ae9aaf149618785bf039cecb416336f972cb8ea0 Mon Sep 17 00:00:00 2001 From: Yolotzin Dunbar Date: Wed, 12 Feb 2020 16:10:47 -0800 Subject: [PATCH 4/5] Added wave 5 --- lib/adagrams.rb | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/lib/adagrams.rb b/lib/adagrams.rb index 3d31115..12947c3 100644 --- a/lib/adagrams.rb +++ b/lib/adagrams.rb @@ -44,7 +44,6 @@ def uses_available_letters?(input, letters_in_hand) input_array = input.upcase.split(//) input_array.each do |letter| if input_array.count(letter) > letters_in_hand.count(letter) - # puts "error" return false end end @@ -92,8 +91,6 @@ def score_word(word) return total_score end - -# p uses_available_letters?("dOgoz", ["D", "O", "G", "O"]) # Wave 4: Outputs winning word and score def highest_score_from(words) @@ -129,4 +126,10 @@ def highest_score_from(words) end end -# p highest_score_from(["X", "XX", "XXX", "XXXX"]) +# Wave 5: check if input is an english word +def is_in_english_dict?(input) + file = File.open("assets/dictionary-english.csv", "r") + dictionary = file.collect(&:chomp) + file.close + return dictionary.include?(input.downcase) +end \ No newline at end of file From 4af3e22b8cd5e61984b6db401a0f6fcaff41a8f0 Mon Sep 17 00:00:00 2001 From: Yolotzin Dunbar Date: Wed, 12 Feb 2020 16:20:47 -0800 Subject: [PATCH 5/5] Added tests --- test/adagrams_test.rb | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/test/adagrams_test.rb b/test/adagrams_test.rb index 90ec44d..bb2bd3e 100644 --- a/test/adagrams_test.rb +++ b/test/adagrams_test.rb @@ -178,4 +178,14 @@ expect(best_word[:score]).must_equal 18 end end + describe 'is_in_english_dict? method' do + it 'returns true if the input is an english word' do + result = is_in_english_dict?("cat") + expect(result).must_equal true + end + it 'returns false if the input is not an english word' do + result = is_in_english_dict?("ghxz") + expect(result).must_equal false + end + end end