4justinstewart
2/28/2014 - 9:51 PM

phase 0 unit 2 week 1 boggle class challenge

phase 0 unit 2 week 1 boggle class challenge

class BoggleBoard

  attr_reader :board

  def initialize(board_name = create_board)
    @board = board_name
  end

  def create_word(*coords)
    coords.map { |coord| board[coord.first][coord.last] }.join
  end

  def get_row(row_number)
    board[row_number]
  end

  def get_column(column_number)
    column = []
    board.each do |row|
      row.each do 
        column << row[column_number]
        break
      end
    end
    column 
  end

  def get_diagonal(start_coord, end_coord)
    row_difference = (start_coord.first - end_coord.first)
    column_difference = (start_coord.last - end_coord.last)
    raise ArgumentError.new "No diagonal is possible." unless row_difference.abs == column_difference.abs

    if row_difference.abs > 1
      if row_difference > 0
        rows = (0..row_difference).to_a.reverse
      else
        rows = (0..row_difference.abs).to_a
      end

      if column_difference > 0
        columns = (0..column_difference).to_a.reverse
      else
        columns = (0..column_difference.abs).to_a
      end

      diagonal_coords = rows.zip(columns)
    else
      diagonal_coords = [] << start_coord << end_coord
    end

      diagonal = []
      diagonal_coords.each { |x| diagonal << create_word(x) }
      diagonal.join

  end

  def create_board
    letter_frequencies = {
      'e' => 10,
      'a' => 8,
      'i' => 7,
      'o' => 6,
      'l' => 5,
      'n' => 5,
      's' => 5,
      't' => 5,
      'd' => 4,
      'r' => 4,
      'u' => 4,
      'b' => 3,
      'c' => 3,
      'g' => 3,
      'h' => 3,
      'm' => 3,
      'p' => 3,
      'y' => 3,
      'f' => 2,
      'k' => 2,
      'v' => 2,
      'w' => 2,
      'j' => 1,
      'q' => 1,
      'x' => 1,
      'z' => 1
    }

    boggle_dice = Array.new(16){[]}
    boggle_board = []

    boggle_dice.each do |die| 
      while die.length < 6 do 
        random_letter = letter_frequencies.keys.sample
        letter_frequencies[random_letter] <=0 ? next : die << random_letter
        letter_frequencies[random_letter] -= 1
      end
      roll = die.sample
      boggle_board << roll
    end
    puts "This is your Boggle Board:"
    p boggle_board[0..3]
    p boggle_board[4..7]
    p boggle_board[8..11]
    p boggle_board[12..15]

  end

end

# DRIVER CODE TESTING
# -------------------------------------

dice_grid = [["b", "r", "a", "e"],
             ["i", "o", "d", "t"],
             ["e", "c", "l", "r"],
             ["t", "a", "k", "e"]]

boggle_board = BoggleBoard.new(dice_grid)
p boggle_board.get_column(2)
p boggle_board.get_row(1)
p boggle_board.create_word([3,0], [3,1], [3,2], [3,3]) == 'take'
p boggle_board.get_diagonal([2,0], [0,2]) == "eoa"
p boggle_board.get_diagonal([0,2], [2,0]) == "aoe"
p boggle_board.get_diagonal([3,0], [0,3]) == "tcde"

boggle_board = BoggleBoard.new