From 8925772500c9339c71c663faed96a90ae40eabd2 Mon Sep 17 00:00:00 2001 From: Corinna Fabre Date: Tue, 11 Feb 2020 14:59:30 -0800 Subject: [PATCH 1/6] Finished phase 2 -- check letters in hand against input letters --- wave-1-game.rb | 22 ++++++++++++++++++++-- wave-2-game.rb | 28 +++++++++++++++++++++++++--- 2 files changed, 45 insertions(+), 5 deletions(-) diff --git a/wave-1-game.rb b/wave-1-game.rb index 159f620..17a2d9a 100644 --- a/wave-1-game.rb +++ b/wave-1-game.rb @@ -1,3 +1,4 @@ +#Adagrams: Corinna & Olga -- YAY require_relative 'lib/adagrams' def display_welcome_message @@ -6,8 +7,8 @@ def display_welcome_message end def display_drawn_letters(letters) - puts "You have drawn the letters:" - puts letters.join(', ') + puts "You have drawn the letters: " + puts letters.join(", ") end def run_game @@ -15,4 +16,21 @@ def run_game display_drawn_letters(draw_letters) end +def draw_letters + alphabet = {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} + hand = [] + 10.times do |letter, count| + tile = alphabet.keys.sample().to_sym + if alphabet[tile] > 0 + alphabet[tile] -= 1 + elsif alphabet[tile] == 0 + tile = alphabet.key.sample() + end + hand << tile.to_s + end + return hand + # puts alphabet + puts hand +end + run_game diff --git a/wave-2-game.rb b/wave-2-game.rb index 18745b7..b2101a6 100644 --- a/wave-2-game.rb +++ b/wave-2-game.rb @@ -32,9 +32,14 @@ def display_goodbye_message end def get_user_input - gets.chomp + gets.chomp.upcase end +def uses_available_letters?(get_user_input, letters_in_hand) + word_letters = Array.new(get_user_input.split("")) + puts word_letters.difference(letters_in_hand).empty? +end + def run_game display_welcome_message @@ -50,7 +55,7 @@ def run_game user_input_word = get_user_input - while ( !(uses_available_letters?(user_input_word, letter_bank)) ) + while ( (uses_available_letters?(user_input_word, letter_bank)) == false) display_needs_valid_input_message user_input_word = get_user_input end @@ -62,4 +67,21 @@ def run_game display_goodbye_message end -run_game +def draw_letters + alphabet = {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} + hand = [] + 10.times do |letter, count| + tile = alphabet.keys.sample().to_sym + if alphabet[tile] > 0 + alphabet[tile] -= 1 + elsif alphabet[tile] == 0 + tile = alphabet.key.sample() + end + hand << tile.to_s + end + return hand + # puts alphabet + puts hand +end + +run_game \ No newline at end of file From 2a83068d0b3052bcc0f718e49fe2ca3c3652a22c Mon Sep 17 00:00:00 2001 From: Corinna Fabre Date: Tue, 11 Feb 2020 15:03:18 -0800 Subject: [PATCH 2/6] Adding updated Wave 1 file with data structure --- wave-1-game.rb | 2 ++ 1 file changed, 2 insertions(+) diff --git a/wave-1-game.rb b/wave-1-game.rb index 17a2d9a..d60390b 100644 --- a/wave-1-game.rb +++ b/wave-1-game.rb @@ -1,6 +1,8 @@ #Adagrams: Corinna & Olga -- YAY require_relative 'lib/adagrams' +#comment + def display_welcome_message puts "Welcome to Adagrams!" puts "Let's draw 10 letters from the letter pool..." From 66fa8853edd2c081add6a10da721f04116bdb592 Mon Sep 17 00:00:00 2001 From: Corinna Fabre Date: Tue, 11 Feb 2020 15:55:33 -0800 Subject: [PATCH 3/6] Added score words in Wave 3 --- wave-2-game.rb | 21 ++++++++++++++++++--- wave-3-game.rb | 35 ++++++++++++++++++++++++++++++++++- 2 files changed, 52 insertions(+), 4 deletions(-) diff --git a/wave-2-game.rb b/wave-2-game.rb index b2101a6..c51c93f 100644 --- a/wave-2-game.rb +++ b/wave-2-game.rb @@ -18,7 +18,7 @@ def display_needs_valid_input_message display_game_instructions end -def display_score(score) +def display_score(score_word) puts "Your submitted anagram scored #{score} points" end @@ -37,9 +37,22 @@ def get_user_input def uses_available_letters?(get_user_input, letters_in_hand) word_letters = Array.new(get_user_input.split("")) - puts word_letters.difference(letters_in_hand).empty? + word_letters.difference(letters_in_hand).empty? end +def score_word(word) + word_letters = Array.new(word.split("")) + letter_scores = {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} + score = 0 + word_letters.each do |letter| + #p letter.to_sym + score += letter_scores[letter.to_sym] + end + return score +end + +#puts score_word(get_user_input) + def run_game display_welcome_message @@ -60,6 +73,8 @@ def run_game user_input_word = get_user_input end + #display_score + display_retry_instructions should_continue = get_user_input == "y" end @@ -84,4 +99,4 @@ def draw_letters puts hand end -run_game \ No newline at end of file +run_game diff --git a/wave-3-game.rb b/wave-3-game.rb index a04a592..7e01ac9 100644 --- a/wave-3-game.rb +++ b/wave-3-game.rb @@ -18,6 +18,17 @@ def display_needs_valid_input_message display_game_instructions end +def score_word(word) + word_letters = Array.new(word.split("")) + letter_scores = {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} + score = 0 + word_letters.each do |letter| + #p letter.to_sym + score += letter_scores[letter.to_sym] + end + return score +end + def display_score(score) puts "Your submitted anagram scored #{score} points" end @@ -32,7 +43,12 @@ def display_goodbye_message end def get_user_input - gets.chomp + gets.chomp.upcase +end + +def uses_available_letters?(get_user_input, letters_in_hand) + word_letters = Array.new(get_user_input.split("")) + word_letters.difference(letters_in_hand).empty? end def run_game @@ -66,4 +82,21 @@ def run_game display_goodbye_message end +def draw_letters + alphabet = {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} + hand = [] + 10.times do |letter, count| + tile = alphabet.keys.sample().to_sym + if alphabet[tile] > 0 + alphabet[tile] -= 1 + elsif alphabet[tile] == 0 + tile = alphabet.key.sample() + end + hand << tile.to_s + end + return hand + # puts alphabet + puts hand +end + run_game From b542dd14522a1e51d7efc25db2ad69caedff3dce Mon Sep 17 00:00:00 2001 From: Corinna Fabre Date: Wed, 12 Feb 2020 11:27:42 -0800 Subject: [PATCH 4/6] updating Wave 3 since moving on --- wave-3-game.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wave-3-game.rb b/wave-3-game.rb index 7e01ac9..dff4d73 100644 --- a/wave-3-game.rb +++ b/wave-3-game.rb @@ -76,7 +76,7 @@ def run_game display_score(score) display_retry_instructions - should_continue = get_user_input == "y" + should_continue = get_user_input == "Y" end display_goodbye_message From 2152d5c931ec08032d787aaf528217967dcdcbdc Mon Sep 17 00:00:00 2001 From: Corinna Fabre Date: Wed, 12 Feb 2020 15:07:16 -0800 Subject: [PATCH 5/6] Final wave 4 code. --- wave-4-game.rb | 70 +++++++++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 67 insertions(+), 3 deletions(-) diff --git a/wave-4-game.rb b/wave-4-game.rb index 958dc10..1f4ccbe 100644 --- a/wave-4-game.rb +++ b/wave-4-game.rb @@ -18,6 +18,21 @@ def display_needs_valid_input_message display_game_instructions end +def score_word(word) + word_letters = Array.new(word.split("")) + letter_scores = {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} + score = 0 + word_letters.each do |letter| + #p letter.to_sym + score += letter_scores[letter.to_sym] + end + if word_letters.length >= 7 + score += 8 + end + return score + +end + def display_score(score) puts "Your submitted anagram scored #{score} points" end @@ -37,7 +52,12 @@ def display_goodbye_message end def get_user_input - gets.chomp + gets.chomp.upcase +end + +def uses_available_letters?(get_user_input, letters_in_hand) + word_letters = Array.new(get_user_input.split("")) + word_letters.difference(letters_in_hand).empty? end def run_game @@ -63,16 +83,60 @@ def run_game end score = score_word(user_input_word) - played_words << user_input_word + played_words << [user_input_word, score] display_score(score) display_retry_instructions - should_continue = get_user_input == "y" + should_continue = get_user_input == "Y" end display_highest_score(highest_score_from(played_words)) display_goodbye_message end +def highest_score_from(words) + final_array = [] + words.each do |word, score| + final_array << {word: word, score: score} + end + # word with fewest letters + # first one submitted if length and score are same + highest_score = 0 + highest_score_word = "" + winner = nil + final_array.each do |word_score_hash| + if word_score_hash[:word].length == 10 + winner = word_score_hash + break + elsif word_score_hash[:score] > highest_score + highest_score = word_score_hash[:score] + winner = word_score_hash + elsif word_score_hash[:score] == highest_score && word_score_hash[:word].length < highest_score_word.length + highest_score_word = word_score_hash[:word] + winner = word_score_hash + end + end + return winner + puts winner +end + + +def draw_letters + alphabet = {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} + hand = [] + 10.times do |letter, count| + tile = alphabet.keys.sample().to_sym + if alphabet[tile] > 0 + alphabet[tile] -= 1 + elsif alphabet[tile] == 0 + tile = alphabet.key.sample() + end + hand << tile.to_s + end + return hand + # puts alphabet + puts hand +end + run_game From ee46ef55189d7a8dc05bb228f7c289caa77967a5 Mon Sep 17 00:00:00 2001 From: Corinna Fabre Date: Thu, 13 Feb 2020 15:48:01 -0800 Subject: [PATCH 6/6] Final adagrams file --- lib/adagrams.rb | 88 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/lib/adagrams.rb b/lib/adagrams.rb index e69de29..d4d2b13 100644 --- a/lib/adagrams.rb +++ b/lib/adagrams.rb @@ -0,0 +1,88 @@ +#This program simulates the Adagrams game +def draw_letters + alphabet = {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} + hand = [] + only_letters = alphabet.keys + # Builds the user letter pool + 10.times do + tile = only_letters[rand(only_letters.size)] + # Checks the availability of the letter + if alphabet[tile.to_sym] > 0 + alphabet[tile] -= 1 + elsif alphabet[tile] == 0 + tile = only_letters[rand(only_letters.size)] + end + hand << tile.to_s + end + return hand + puts hand +end + +def uses_available_letters?(input, letters_in_hand) + input = input.upcase.split("") + # Creates a duplicate to maintain integrity of original letters in hand + comparison_check = letters_in_hand.dup + input.each do |letter| + # Checks if the input word complies with available letters + if comparison_check.include?(letter) + comparison_check.delete(letter) + else + return false + end + end + return true +end + +def score_word(word) + word_letters = word.upcase.split("") + letter_scores = {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} + score = 0 + word_letters.each do |letter| + score += letter_scores[letter.to_sym] + end + # Adds 8 more points based on word length in compliance with game rules + if word_letters.length >= 7 + score += 8 + end + return score +end + +def highest_score_from(words) + final_array = [] + words.each do |word| + score = score_word(word) + final_array << {word: word, score: score} + end + highest_score = 0 + winner_word = "" + winner = nil + final_array.each do |pair| + # Declares the winner if any word is 10 characters long + if pair[:word].length == 10 + winner = pair + break + # Finds the winner pair based on its score + elsif pair[:score] > highest_score + highest_score = pair[:score] + winner_word = pair[:word] + winner = pair + # Finds the winner pair when scores are equal based on word length + elsif pair[:word].length < winner_word.length && pair[:score] == highest_score + winner_word = pair[:word] + winner = pair + # Finds the winner pair when scores are equal based on word order + elsif pair[:word].length == winner_word.length && pair[:score] == highest_score + winner = winner + end + end + return winner + p winner +end + +def in_dict?(input) + CSV.open("assets/dictionary-english.csv", "r").each do |word| + return true if word.include?(input.downcase) + end + return false +end +