diff --git a/lib/adagrams.rb b/lib/adagrams.rb index e69de29..7bc6c59 100644 --- a/lib/adagrams.rb +++ b/lib/adagrams.rb @@ -0,0 +1,121 @@ +def display_welcome_message + puts "Welcome to Adagrams!" + puts "Let's draw 10 letters from the letter pool..." +end + +def display_drawn_letters(letters) + puts "You have drawn the letters:" + puts letters.join(', ') +end + +def draw_letters + all_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} + + letter_pool = [] + all_letters.each do |letter,count| + letter_pool.concat(Array.new(count) { letter.to_s }) + end + hand_letters = letter_pool.sample(10) + return hand_letters +end + +def display_game_instructions + puts "Please input a word that only uses the letters from the letter bank" +end + +def display_needs_valid_input_message + puts "You entered in a word that contains characters not in the letter bank" + display_game_instructions +end + +def display_score(score) + puts "Your submitted anagram scored #{score} points" +end + +def uses_available_letters?(input, letters_in_hand) + letter_bank = letters_in_hand.dup + + input.split(//).each do |l| + if letter_bank.include?(l) + letter_bank.delete_at(letter_bank.index(l)) + else + return false + end + end + return true +end + +def score_word(word) + + letters = word.upcase.split(//) + score_pool = {["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 + + letters.each do |l| + score_pool.each do |array, points| + if array.include?(l) + score += points + end + end + end + if letters.size >=7 && letters.size <=10 + score += 8 + end + return score +end + +def display_retry_instructions + puts "Should we play another round?" + puts "Enter y to replay" +end + +def display_goodbye_message + puts "Thanks for playing Adagrams!" +end + +def get_user_input + gets.chomp.upcase +end + +def run_game + played_words = [] + + display_welcome_message + + should_continue = true + + while should_continue + puts "Let's draw 10 letters from the letter pool..." + + letter_bank = draw_letters + display_drawn_letters(letter_bank) + + display_game_instructions + + user_input_word = get_user_input + + while ( !(uses_available_letters?(user_input_word, letter_bank)) ) + display_needs_valid_input_message + user_input_word = get_user_input + end + + score = score_word(user_input_word) + played_words << user_input_word + + display_score(score) + + display_retry_instructions + should_continue = get_user_input == "y" + end + + display_highest_score(highest_score_from(played_words)) + display_goodbye_message +end + + + + + + + diff --git a/sara_hala_space.rb b/sara_hala_space.rb new file mode 100644 index 0000000..acad7af --- /dev/null +++ b/sara_hala_space.rb @@ -0,0 +1,90 @@ +#WAVE 1 +def draw_letters + all_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} + + letter_pool = [] + all_letters.each do |letter,count| + letter_pool.concat(Array.new(count) { letter.to_s }) + end + hand_letters = letter_pool.sample(10) + return hand_letters +end + +#WAVE 2 +def uses_available_letters?(input, letters_in_hand) + letter_bank = letters_in_hand.dup + + input.split(//).each do |l| + if letter_bank.include?(l) + letter_bank.delete_at(letter_bank.index(l)) + else + return false + end + end + return true +end + +#WAVE 3 +def score_word(word) + + letters = word.upcase.split(//) + score_pool = {["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 + + letters.each do |l| + score_pool.each do |array, points| + if array.include?(l) + score += points + end + end + end + if letters.size >=7 && letters.size <=10 + score += 8 + end + return score +end + +#WAVE 4 +def highest_score_from(arr) + word_score ={} + arr.each do |item| + word_score[item] = score_word(item) + end + sorted_hash = word_score.sort_by{|k, v| -v}.to_h + + highest_score = sorted_hash.values.max + sorted_hash.delete_if{|k,v| v != highest_score} + if sorted_hash.size > 1 + if sorted_hash.any? {|key, value| key.length == 10 } + sorted_hash.delete_if { |k,v| k.length != 10 } + sorted_hash.delete_if { |k,v| k != sorted_hash.keys[0] } + elsif + shortest_hash = sorted_hash.keys.sort_by {|k, v| k.length} + shortest_word = shortest_hash[0] + score_of_winningword = sorted_hash.values_at(shortest_hash) + sorted_hash.delete_if { |k,v| k != shortest_word } + end + end + winning_score = {} + winning_score[:word] = sorted_hash.keys[0] + winning_score[:score] = sorted_hash.values[0] + return winning_score +end + +#WAVE 5 +def is_in_english_dict?(input) + word = false + CSV.foreach("../assets/dictionary-english.csv") do |record| + if record.include?(input.downcase) + word = true + end + end + return word +end + + + + + + diff --git a/wave-1-game.rb b/wave-1-game.rb index 159f620..87c50b8 100644 --- a/wave-1-game.rb +++ b/wave-1-game.rb @@ -10,9 +10,29 @@ def display_drawn_letters(letters) puts letters.join(', ') end -def run_game - display_welcome_message - display_drawn_letters(draw_letters) -end - +def draw_letters + all_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} + + letter_bank = [] + all_letters.each do |letter, n| + n.times do + letter_bank << letter.to_s + end + end + hand_letters = letter_bank.sample(10) + return hand_letters + + end + + + def run_game + display_welcome_message + display_drawn_letters(draw_letters) + end run_game + +#we need a way to store the letters + + + + \ No newline at end of file diff --git a/wave-2-game.rb b/wave-2-game.rb index 18745b7..17477a2 100644 --- a/wave-2-game.rb +++ b/wave-2-game.rb @@ -1,7 +1,6 @@ -require_relative 'lib/adagrams' - def display_welcome_message puts "Welcome to Adagrams!" + puts "Let's draw 10 letters from the letter pool..." end def display_drawn_letters(letters) @@ -9,6 +8,19 @@ def display_drawn_letters(letters) puts letters.join(', ') end +def draw_letters +all_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} + + letter_pool = [] + all_letters.each do |letter, n| + n.times do + letter_pool << letter.to_s + end + end + hand_letters = letter_pool.sample(10) + return hand_letters +end + def display_game_instructions puts "Please input a word that only uses the letters from the letter bank" end @@ -22,6 +34,20 @@ def display_score(score) puts "Your submitted anagram scored #{score} points" end +def uses_available_letters?(input, letters_in_hand) + word = input.split(//) + letter_bank = letters_in_hand.dup + count_letters = 0 + + word.each do |l| + if letter_bank.include?(l) + count_letters += 1 + letter_bank.delete_at(letter_bank.index(l)) + end + end + return word.length == count_letters ? true : false +end + def display_retry_instructions puts "Should we play another round?" puts "Enter y to replay" @@ -32,7 +58,7 @@ def display_goodbye_message end def get_user_input - gets.chomp + gets.chomp.upcase end def run_game @@ -62,4 +88,4 @@ def run_game display_goodbye_message end -run_game +run_game \ No newline at end of file