Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
121 changes: 121 additions & 0 deletions lib/adagrams.rb
Original file line number Diff line number Diff line change
@@ -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







90 changes: 90 additions & 0 deletions sara_hala_space.rb
Original file line number Diff line number Diff line change
@@ -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






30 changes: 25 additions & 5 deletions wave-1-game.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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




34 changes: 30 additions & 4 deletions wave-2-game.rb
Original file line number Diff line number Diff line change
@@ -1,14 +1,26 @@
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)
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, 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
Expand All @@ -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"
Expand All @@ -32,7 +58,7 @@ def display_goodbye_message
end

def get_user_input
gets.chomp
gets.chomp.upcase
end

def run_game
Expand Down Expand Up @@ -62,4 +88,4 @@ def run_game
display_goodbye_message
end

run_game
run_game