Forked from dbc-challenges/0.2.1-boggle_class_from_methods.rb
Last active
December 29, 2015 19:09
-
-
Save wiltonmaddams/7715264 to your computer and use it in GitHub Desktop.
phase 0 unit 2 week 1
boggle class challenge
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
class BoggleBoard | |
def initialize(board) #(board = []) | |
@board = board | |
end | |
def create_word(*coords) | |
coords.map {|coord| @board[coord.first][coord.last]}.join("") | |
end | |
def get_row(row) | |
@board[row].join("") | |
end | |
def get_col(col) | |
@board.transpose[col] | |
end | |
def get_char(coord) | |
@board[coord.first][coord.last] | |
end | |
def get_diagonal(coord1, coord2) | |
unless (coord1[1] - coord2[1]).abs == (coord1[0] - coord2[0]).abs && coord1[1] - coord2[1] != 0 | |
puts "This will not produce a diagonal!" | |
else | |
diagonal = [] | |
until coord1[1] == coord2[1] && coord1[0] == coord2[0] | |
diagonal << @board[coord1[0]][coord1[1]] | |
if coord1[0] < coord2[0] | |
coord1[0] += 1 | |
if coord1[1] < coord2[1] | |
coord1[1] +=1 | |
else | |
coord1[1] -= 1 | |
end | |
else | |
coord1[0] -= 1 | |
if coord1[1] < coord2[1] | |
coord1[1] += 1 | |
else | |
coord1[1] -= 1 | |
end | |
end | |
end | |
diagonal << @board[coord2[0]][coord2[1]] | |
end | |
print diagonal | |
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) | |
puts boggle_board.create_word([1,2], [1,1], [2,1], [3,2]) #==> should return dock | |
puts "--" | |
puts boggle_board.create_word([2,1], [1,1], [1,2], [0,3]) #==> should return code | |
puts "--" | |
puts boggle_board.create_word([0,1], [0,2], [1,2]) #==> should return rad | |
puts "--" | |
puts boggle_board.create_word([0,0], [0,1], [1,0], [2,1], [3,2]) #==> should return brick | |
puts "--" | |
puts boggle_board.create_word([0,1], [1,1], [2,1], [3,2], [3,1], [0,1], [1,1], [2,2], [2,2]) #==> should return rockaroll | |
puts "--" | |
puts boggle_board.get_row(0) #==> should return ["b", "r", "a", "e"] | |
puts "--" | |
puts boggle_board.get_row(1) #==> should return ["i", "o", "d", "t"] | |
puts "--" | |
puts boggle_board.get_row(2) #==> should return ["e", "c", "l", "r"] | |
puts "--" | |
puts boggle_board.get_row(3) #==> should return ["t", "a", "k", "e"] | |
puts "--" | |
puts boggle_board.get_col(0) #==> should return ["b", "i", "e", "t"] | |
puts "--" | |
puts boggle_board.get_col(1) #==> should return ["r", "o", "c", "a"] | |
puts "--" | |
puts boggle_board.get_col(2) #==> should return ["a", "d", "l", "k"] | |
puts "--" | |
puts boggle_board.get_col(3) #==> should return ["e", "t", "r", "e"] | |
puts "--" | |
puts boggle_board.get_char([0,1]) #==> should return "r" | |
puts "--" | |
puts boggle_board.get_char([1,3]) #==> should return "t" | |
puts "--" | |
puts boggle_board.get_char([2,2]) #==> should return "l" | |
puts "--" | |
puts boggle_board.get_char([3,3]) #==> should return "e" | |
puts "--" | |
puts boggle_board.create_word([3,2]) #==> should return "k" | |
puts "--" | |
puts boggle_board.create_word([2,1]) #==> should return "c" | |
puts "--" | |
puts boggle_board.get_diagonal([0,0],[1,1]) #==> should return ["b", "o"] | |
puts "--" | |
puts boggle_board.get_diagonal([3,3], [2,2]) #==> should return ["e", "l"] | |
puts "--" | |
puts boggle_board.get_diagonal([0,1],[0,2]) #==> should return "This will not produce a diagonal!" | |
puts "--" | |
puts boggle_board.get_diagonal([0,3],[3,0]) #==> should return ["e", "d", "c", "t"] | |
puts "--" | |
puts boggle_board.get_diagonal([0,0],[3,3]) #==> should return ["b", "o", "l", "e"] | |
#Reflection | |
# The benefit to creating a class first an instantiating objects means each object has access to an unlimited number of methods, | |
# and each method can refer to the same variable and manipulate it. It allows a programmer/user to very quickly perform a number of tasks | |
# on any instance of a class and seamlessly call multiple methods to change its properties. I was grateful to have learned the benefits of using | |
# the .transpose method for switching nested arrays so that I could return the columns, and additionally .map would have been a great method to use | |
# to find the column. I also created a get_char method that takes a coordinate and returns the value at that element, however, it can also be done | |
# using the create word method and only passing a single coordinate as an argument. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment