Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save LightningLord/7966615 to your computer and use it in GitHub Desktop.
Save LightningLord/7966615 to your computer and use it in GitHub Desktop.
phase 0 unit 2 week 1 boggle class challenge
#initial
class BoggleBoard
def initialize(board)
@board = board
end
def create_word(*coords)
coords.map { |coord| @board[coord.first][coord.last]}.join("")
end
def get_row(row)
@board[row]
end
def get_col(col)
@board.collect {|row| row[col]}
end
end
dice_grid = [["b", "r", "a", "e"],
["i", "o", "d", "t"],
["e", "c", "l", "r"],
["t", "a", "k", "e"]]
boggle_board = BoggleBoard.new(dice_grid)
#step 2
puts boggle_board.create_word([1,2], [1,1], [2,1], [3,2]) #=> dock
puts boggle_board.get_row(3) #=> ["t", "a", "k", "e"]
puts boggle_board.get_col(0) #=> ["b", "i", "e", "t"]
puts boggle_board.get_row(0).join
puts boggle_board.get_row(1).join
puts boggle_board.get_row(2).join
puts boggle_board.get_row(3).join
puts boggle_board.get_col(0).join
puts boggle_board.get_col(1).join
puts boggle_board.get_col(2).join
puts boggle_board.get_col(3).join
#expected output =>
# brae
# iodt
# eclr
# take
# biet
# roca
# adlk
# etre
#step 3
puts boggle_board.create_word([3,2]) #=> k
#refactored, including get_diagonal
class BoggleBoard
def initialize(board)
@board = board
end
def create_word(*coords)
coords.map { |coord| @board[coord.first][coord.last]}.join
end
def get_row(row)
@board[row]
end
def get_col(col)
@board.collect {|row| row[col]}
end
def get_diagonal(coord1, coord2)
if (coord1.first - coord2.first).abs != (coord1.last - coord2.last).abs
raise ArgumentError.new("These coordinates do not form a diagonal")
else
result = []
diagonal_length = (coord1.first - coord2.first).abs + 1
row = coord1.first
col = coord1.last
diagonal_length.times { result.push(@board[row][col])
row += (coord2.first - coord1.first) / (coord1.first - coord2.first)
col += (coord2.last - coord1.last) / (coord1.first - coord2.first)
}
end
result
end
end
dice_grid = [["b", "r", "a", "e"],
["i", "o", "d", "t"],
["e", "c", "l", "r"],
["t", "a", "k", "e"]]
boggle_board = BoggleBoard.new(dice_grid)
#step 2
puts boggle_board.create_word([1,2], [1,1], [2,1], [3,2]) #=> dock
puts boggle_board.get_row(3) #=> ["t", "a", "k", "e"]
puts boggle_board.get_col(0) #=> ["b", "i", "e", "t"]
puts boggle_board.get_row(0).join
puts boggle_board.get_row(1).join
puts boggle_board.get_row(2).join
puts boggle_board.get_row(3).join
puts boggle_board.get_col(0).join
puts boggle_board.get_col(1).join
puts boggle_board.get_col(2).join
puts boggle_board.get_col(3).join
#expected output =>
# brae
# iodt
# eclr
# take
# biet
# roca
# adlk
# etre
#step 3
puts boggle_board.create_word([3,2]) #=> k
#step 4
puts boggle_board.get_diagonal([3,0],[0,3]).join #=> tcde
puts boggle_board.get_diagonal([0,0], [3,3]).join #=> bole
puts boggle_board.get_diagonal([0,3], [3,0]).join #=> edct
puts boggle_board.get_diagonal([0,2], [2,0]).join #=> aoe
puts boggle_board.get_diagonal([1,0],[0,1]).join #=> ir
puts boggle_board.get_diagonal([0,0], [0,2]) #=> argument error
#Reflection
#In OOP, you have to define a class and an initialize method. you also must initialize an instance of the class
#before you can call any class methods.
#OOP allows you to store the board array as an instance variable, which means you don't have to
#pass in the board as an argument every time. OOP allows you store class definitions easily and inherit from them
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment