Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save kpnetdev/8347906 to your computer and use it in GitHub Desktop.
Save kpnetdev/8347906 to your computer and use it in GitHub Desktop.
phase 0 unit 2 week 1 boggle class challenge
class BoggleBoard
def initialize(grid)
@grid = grid
end
def create_word(*coords)
coords.map { |coord| @grid[coord.first][coord.last]}.join("")
end
def get_row(row)
@grid[row]
end
def get_col(col)
@grid.collect {|row| row[col]}
end
def get_diagonal(start, finish)
raise ArgumentError, "Hey, that's not a diagonal!" unless (start.first - finish.first).abs == (start.last - finish.last).abs
x_coords = neg_range_ok(start.first, finish.first)
y_coords = neg_range_ok(start.last, finish.last)
(0...x_coords.count).collect {|idx| @grid[x_coords[idx]][y_coords[idx]]}
end
def neg_range_ok(start, finish)
# this method 'sanitizes' ranges, turning both positive and negative ranges into arrays
start > finish ? start.downto(finish).to_a : (start..finish).to_a
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)
# implement tests for each of the methods here:
p boggle_board.create_word([1,2], [1,1], [2,1], [3,2]) == "dock"
p boggle_board.get_row(2) == ["e", "c", "l", "r"]
p boggle_board.get_col(2) == ["a", "d", "l", "k"]
p boggle_board.get_row(3)[2] == "k"
(0..3).each do |idx|
puts boggle_board.get_row(idx).join('')
puts boggle_board.get_col(idx).join('')
end
p boggle_board.get_diagonal([0,0], [3,3]) == ["b", "o", "l", "e"]
@jwrobes
Copy link

jwrobes commented Jan 15, 2014

Amazing diagonal method! Dude really, amazing. I love it.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment