From 72e6faea224b349414b8c4aa383407f8d18cd68e Mon Sep 17 00:00:00 2001 From: Nidhi Date: Thu, 21 Feb 2019 15:38:27 -0800 Subject: [PATCH 1/7] Did some work, need to push --- lib/adagrams.rb | 93 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 93 insertions(+) diff --git a/lib/adagrams.rb b/lib/adagrams.rb index e69de29..576a809 100644 --- a/lib/adagrams.rb +++ b/lib/adagrams.rb @@ -0,0 +1,93 @@ +def draw_letters + letter_pool = [] + number_of_letters = [9, 2, 2, 3, 12, 2, 3, 2, 9, 1, 1, 4, 2, 6, 8, 2, 1, 6, 4, 6, 4, 2, 2, 1, 2, 1] + letters = ("A".."Z").to_a + i = 0 + while i < 26 + number_of_letters[i].times do + letter_pool.push(letters[i]) + end + i = i + 1 + end + + return letter_pool.sample(10) +end + +puts "Using the following letters, create an Adagram" +test = draw_letters +puts test + +puts "What is your Adagram?:" +Adagram_input = gets.chomp.to_s.upcase + +def uses_available_letters?(input, letters_in_hand) + input_array = input.chars + i = 0 + result = true + while i < input_array.length + if letters_in_hand.include?(input[i]) == true + letters_in_hand.delete(input[i]) + else + result = false + end + i = i + 1 + end + return result +end + +puts uses_available_letters?(Adagram_input, test) + +SCORE_HASH = { "A" => 1, "E" => 1, "I" => 1, "O" => 1, "U" => 1, "L" => 1, "N" => 1, "R" => 1, "S" => 1, "T" => 1, "D" => 2, "G" => 2, "B" => 3, "C" => 3, "M" => 3, "P" => 3, "F" => 4, "H" => 4, "V" => 4, "W" => 4, "Y" => 4, "K" => 5, "J" => 8, "X" => 8, "Q" => 10, "Z" => 10 } + +def score_word(word) + points = 0 + if word == "" + points = 0 + else + letters = word.upcase.chars + points = 0 + letters.each do |letter| + points += SCORE_HASH[letter] + end + + if letters.length > 6 + points = points + 8 + end + end + + return points +end + +puts score_word(Adagram_input) + +def highest_score_from(words) + word_scores = words.map do |word| + score_word(word) + end + + words_scores_hash = {} + i = 0 + while i < words.length + words_scores_hash[words[i]] = word_scores[i] + i += 1 + end + highest_score = word_scores.max + highest_score_hash = words_scores_hash.select { |k, v| v == highest_score } + # highest_hash = words_scores_hash.max_by { |k, v| v } + + if highest_score_hash.length > 1 + winner = 0 + keys = highest_score_hash.keys + lengths = keys.map {|key| key.length} + if lengths.include? 10 == true + winner = highest_score_hash.select{|k,v| v == 10} + else + winner = keys.min_by {|key| key.length} + end + highest_score_hash = winner + end + return highest_score_hash +end + +test = ["quail", "dog", "zuail", "cat", 'BBBBBB', 'AAAAAAAAAA'] +puts highest_score_from(test) From 9d6ffe5e72d74cbe229d0e645db7231cfcfb8470 Mon Sep 17 00:00:00 2001 From: Nidhi Date: Thu, 21 Feb 2019 16:51:21 -0800 Subject: [PATCH 2/7] wave 4 updated --- lib/adagrams.rb | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/lib/adagrams.rb b/lib/adagrams.rb index 576a809..ba19301 100644 --- a/lib/adagrams.rb +++ b/lib/adagrams.rb @@ -73,21 +73,31 @@ def highest_score_from(words) end highest_score = word_scores.max highest_score_hash = words_scores_hash.select { |k, v| v == highest_score } - # highest_hash = words_scores_hash.max_by { |k, v| v } + + winning_word = highest_score_hash.values + result = {word: winning_word[0], score: highest_score} if highest_score_hash.length > 1 - winner = 0 + winner = {} keys = highest_score_hash.keys lengths = keys.map {|key| key.length} if lengths.include? 10 == true - winner = highest_score_hash.select{|k,v| v == 10} + winner = {word: keys[lengths.find_index(10)], score: highest_score} + + #highest_score_hash.find{|k,v| v == 10}.first else - winner = keys.min_by {|key| key.length} + min = keys.min_by {|key| key.length} + winner = {word: min, score: highest_score} + #winner = highest_score_hash.find{|k,v| k == min}.first end highest_score_hash = winner end - return highest_score_hash + + result = highest_score_hash + + return result + end -test = ["quail", "dog", "zuail", "cat", 'BBBBBB', 'AAAAAAAAAA'] +test = ['X', 'XX', 'XXX', 'XXXX'] puts highest_score_from(test) From f680588c9ba8a264d2dc0a78804631b3986f20a7 Mon Sep 17 00:00:00 2001 From: Riyo Date: Thu, 21 Feb 2019 16:57:59 -0800 Subject: [PATCH 3/7] some changes --- lib/adagrams.rb | 32 ++++++++++++++++++++++++-------- 1 file changed, 24 insertions(+), 8 deletions(-) diff --git a/lib/adagrams.rb b/lib/adagrams.rb index 576a809..76a81b7 100644 --- a/lib/adagrams.rb +++ b/lib/adagrams.rb @@ -1,3 +1,6 @@ +require_relative '../assets/dictionary - english.csv"' +csv.read("dictionary - english.csv") + def draw_letters letter_pool = [] number_of_letters = [9, 2, 2, 3, 12, 2, 3, 2, 9, 1, 1, 4, 2, 6, 8, 2, 1, 6, 4, 6, 4, 2, 2, 1, 2, 1] @@ -37,7 +40,7 @@ def uses_available_letters?(input, letters_in_hand) puts uses_available_letters?(Adagram_input, test) -SCORE_HASH = { "A" => 1, "E" => 1, "I" => 1, "O" => 1, "U" => 1, "L" => 1, "N" => 1, "R" => 1, "S" => 1, "T" => 1, "D" => 2, "G" => 2, "B" => 3, "C" => 3, "M" => 3, "P" => 3, "F" => 4, "H" => 4, "V" => 4, "W" => 4, "Y" => 4, "K" => 5, "J" => 8, "X" => 8, "Q" => 10, "Z" => 10 } +SCORE_HASH = {"A" => 1, "E" => 1, "I" => 1, "O" => 1, "U" => 1, "L" => 1, "N" => 1, "R" => 1, "S" => 1, "T" => 1, "D" => 2, "G" => 2, "B" => 3, "C" => 3, "M" => 3, "P" => 3, "F" => 4, "H" => 4, "V" => 4, "W" => 4, "Y" => 4, "K" => 5, "J" => 8, "X" => 8, "Q" => 10, "Z" => 10} def score_word(word) points = 0 @@ -76,18 +79,31 @@ def highest_score_from(words) # highest_hash = words_scores_hash.max_by { |k, v| v } if highest_score_hash.length > 1 - winner = 0 + winner = {} keys = highest_score_hash.keys - lengths = keys.map {|key| key.length} + lengths = keys.map { |key| key.length } if lengths.include? 10 == true - winner = highest_score_hash.select{|k,v| v == 10} + winner = highest_score_hash.select { |k, v| v == 10 }.first else - winner = keys.min_by {|key| key.length} + min = keys.min_by { |key| key.length } + winner = highest_score_hash.select { |k, v| k == min }.first end - highest_score_hash = winner + highest_score_hash[winner[0]] = winner[1] end - return highest_score_hash + puts "#{highest_score_hash}" + puts highest_score_hash.class + winning_word = highest_score_hash.keys + result = {word: winning_word[0], score: highest_score_hash[winning_word[0]]} + return result end -test = ["quail", "dog", "zuail", "cat", 'BBBBBB', 'AAAAAAAAAA'] +def is_in_english_dict?(input) + if dictionary - english.csv.include?(input) + return true + else return false end +end + +test = ["quail", "dog", "zuail", "cat", "BBBBBB", "AAAAAAAAAA"] puts highest_score_from(test) + +puts is_in_english_dict?("pig") From effa16d1eb9aab43d02f70eecbf39116a1454d04 Mon Sep 17 00:00:00 2001 From: Nidhi Date: Thu, 21 Feb 2019 21:02:06 -0800 Subject: [PATCH 4/7] passes all tests, needs to be cleaned up --- lib/adagrams.rb | 29 ++++++++++++----------------- 1 file changed, 12 insertions(+), 17 deletions(-) diff --git a/lib/adagrams.rb b/lib/adagrams.rb index ba19301..88abc16 100644 --- a/lib/adagrams.rb +++ b/lib/adagrams.rb @@ -74,30 +74,25 @@ def highest_score_from(words) highest_score = word_scores.max highest_score_hash = words_scores_hash.select { |k, v| v == highest_score } - winning_word = highest_score_hash.values - result = {word: winning_word[0], score: highest_score} - if highest_score_hash.length > 1 winner = {} keys = highest_score_hash.keys + lengths = keys.map {|key| key.length} - if lengths.include? 10 == true - winner = {word: keys[lengths.find_index(10)], score: highest_score} - - #highest_score_hash.find{|k,v| v == 10}.first + if lengths.include?(10) == true + tie_winner = {keys[lengths.find_index(10)] => highest_score} + else min = keys.min_by {|key| key.length} - winner = {word: min, score: highest_score} - #winner = highest_score_hash.find{|k,v| k == min}.first + tie_winner = {min => highest_score} end - highest_score_hash = winner + highest_score_hash = tie_winner end - result = highest_score_hash - - return result - -end + + winning_word = highest_score_hash.keys + win_formatted = {word: winning_word[0], score: highest_score} + + return win_formatted -test = ['X', 'XX', 'XXX', 'XXXX'] -puts highest_score_from(test) +end \ No newline at end of file From b75ac8d185841c8402a3d6b81e3a2ede2cd13bec Mon Sep 17 00:00:00 2001 From: Riyo Date: Fri, 22 Feb 2019 13:46:12 -0800 Subject: [PATCH 5/7] "commit" --- lib/adagrams.rb | 25 ++++++++----------------- 1 file changed, 8 insertions(+), 17 deletions(-) diff --git a/lib/adagrams.rb b/lib/adagrams.rb index 7d137eb..9862098 100644 --- a/lib/adagrams.rb +++ b/lib/adagrams.rb @@ -1,5 +1,3 @@ - - def draw_letters letter_pool = [] number_of_letters = [9, 2, 2, 3, 12, 2, 3, 2, 9, 1, 1, 4, 2, 6, 8, 2, 1, 6, 4, 6, 4, 2, 2, 1, 2, 1] @@ -76,29 +74,22 @@ def highest_score_from(words) highest_score = word_scores.max highest_score_hash = words_scores_hash.select { |k, v| v == highest_score } - winning_word = highest_score_hash.values - result = {word: winning_word[0], score: highest_score} - if highest_score_hash.length > 1 winner = {} keys = highest_score_hash.keys - lengths = keys.map { |key| key.length } - if lengths.include? 10 == true - winner = {word: keys[lengths.find_index(10)], score: highest_score} - #highest_score_hash.find{|k,v| v == 10}.first + lengths = keys.map { |key| key.length } + if lengths.include?(10) == true + tie_winner = {keys[lengths.find_index(10)] => highest_score} else min = keys.min_by { |key| key.length } - winner = {word: min, score: highest_score} - #winner = highest_score_hash.find{|k,v| k == min}.first + tie_winner = {min => highest_score} end - highest_score_hash[winner[0]] = winner[1] + highest_score_hash = tie_winner end - result = highest_score_hash + winning_word = highest_score_hash.keys + win_formatted = {word: winning_word[0], score: highest_score} - return result + return win_formatted end - -test = ["X", "XX", "XXX", "XXXX"] -puts highest_score_from(test) From 226668291c7264f5a8aa16111ac43c7c19531686 Mon Sep 17 00:00:00 2001 From: Riyo Date: Fri, 22 Feb 2019 13:47:45 -0800 Subject: [PATCH 6/7] added wave 5 --- lib/adagrams.rb | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/lib/adagrams.rb b/lib/adagrams.rb index 9862098..8f738c7 100644 --- a/lib/adagrams.rb +++ b/lib/adagrams.rb @@ -1,3 +1,5 @@ +require "csv" + def draw_letters letter_pool = [] number_of_letters = [9, 2, 2, 3, 12, 2, 3, 2, 9, 1, 1, 4, 2, 6, 8, 2, 1, 6, 4, 6, 4, 2, 2, 1, 2, 1] @@ -93,3 +95,17 @@ def highest_score_from(words) return win_formatted end + +def is_in_english_dict?(input) + input_in_dictionary = false + CSV.foreach("../assets/dictionary-english.csv") do |row| + row.each do |word| + if word == input + input_in_dictionary = true + end + end + end + return input_in_dictionary +end + +puts is_in_english_dict?("yaw") From cdc785454cb4c956590ad92da0722b5f1599157b Mon Sep 17 00:00:00 2001 From: Riyo Date: Fri, 22 Feb 2019 14:12:08 -0800 Subject: [PATCH 7/7] Final changes --- lib/adagrams.rb | 47 ++++++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/lib/adagrams.rb b/lib/adagrams.rb index 8f738c7..1ee4872 100644 --- a/lib/adagrams.rb +++ b/lib/adagrams.rb @@ -16,51 +16,51 @@ def draw_letters end puts "Using the following letters, create an Adagram" -test = draw_letters -puts test +hand = draw_letters +puts hand puts "What is your Adagram?:" -Adagram_input = gets.chomp.to_s.upcase +adagram_input = gets.chomp.to_s.upcase def uses_available_letters?(input, letters_in_hand) - input_array = input.chars + letters_array = input.chars i = 0 result = true - while i < input_array.length + while i < letters_array.length if letters_in_hand.include?(input[i]) == true letters_in_hand.delete(input[i]) else result = false end - i = i + 1 + i += 1 end return result end -puts uses_available_letters?(Adagram_input, test) +puts uses_available_letters?(adagram_input, hand) SCORE_HASH = {"A" => 1, "E" => 1, "I" => 1, "O" => 1, "U" => 1, "L" => 1, "N" => 1, "R" => 1, "S" => 1, "T" => 1, "D" => 2, "G" => 2, "B" => 3, "C" => 3, "M" => 3, "P" => 3, "F" => 4, "H" => 4, "V" => 4, "W" => 4, "Y" => 4, "K" => 5, "J" => 8, "X" => 8, "Q" => 10, "Z" => 10} def score_word(word) - points = 0 - if word == "" + score = 0 + if score == "" points = 0 else letters = word.upcase.chars - points = 0 + score = 0 letters.each do |letter| - points += SCORE_HASH[letter] + score += SCORE_HASH[letter] end if letters.length > 6 - points = points + 8 + score += 8 end end - return points + return score end -puts score_word(Adagram_input) +puts score_word(adagram_input) def highest_score_from(words) word_scores = words.map do |word| @@ -77,19 +77,20 @@ def highest_score_from(words) highest_score_hash = words_scores_hash.select { |k, v| v == highest_score } if highest_score_hash.length > 1 - winner = {} + tie_winner = {} keys = highest_score_hash.keys - lengths = keys.map { |key| key.length } + if lengths.include?(10) == true tie_winner = {keys[lengths.find_index(10)] => highest_score} else - min = keys.min_by { |key| key.length } - tie_winner = {min => highest_score} + shortest_word = keys.min_by { |key| key.length } + tie_winner = {shortest_word => highest_score} end + highest_score_hash = tie_winner end - + # reformats hash to match the results in test winning_word = highest_score_hash.keys win_formatted = {word: winning_word[0], score: highest_score} @@ -98,9 +99,9 @@ def highest_score_from(words) def is_in_english_dict?(input) input_in_dictionary = false - CSV.foreach("../assets/dictionary-english.csv") do |row| - row.each do |word| - if word == input + CSV.foreach("../assets/dictionary-english.csv") do |word_array| + word_array.each do |word| + if word == input.downcase input_in_dictionary = true end end @@ -108,4 +109,4 @@ def is_in_english_dict?(input) return input_in_dictionary end -puts is_in_english_dict?("yaw") +puts is_in_english_dict?(adagram_input)