Backtracking solution in ruby

def is_valid_sudoku(board)
  validate(board)
end

def validate(board)
  9.times do |i|
    return false unless validate_row(board, i)
    return false unless validate_column(board, i)
    return false unless validate_box(board, 3  (i / 3), 3  (i % 3))
  end
  true
end

def validate_row(board, row)
  seen = Array.new(9, false)
  9.times do |col|
    value = board[row][col]
    return false if value != "." && seen[value.to_i - 1]
    seen[value.to_i - 1] = true
  end
  true
end

def validate_column(board, col)
  seen = Array.new(9, false)
  9.times do |row|
    value = board[row][col]
    return false if value != "." && seen[value.to_i - 1]
    seen[value.to_i - 1] = true
  end
  true
end

def validate_box(board, start_row, start_col)
  seen = Array.new(9, false)
  3.times do |i|
    3.times do |j|
      value = board[start_row + i][start_col + j]
      return false if value != "." && seen[value.to_i - 1]
      seen[value.to_i - 1] = true
    end
  end
  true
end