You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求协助完成从Python转换的Ruby版Sudoku Validator

Ruby版数独验证器补全实现

先修正并补全你的代码,实现完整的数独验证逻辑:

class Sudoku
  def is_in_range(board)
    n = 9
    n.times do |i|
      n.times do |j|
        val = board[i][j]
        return false if val <= 0 || val > 9
      end
    end
    true
  end

  def valid_sudoku?(board)
    n = 9
    # 检查所有数字是否在1-9范围内
    return false unless is_in_range(board)

    # 检查每行是否有重复
    board.each do |row|
      return false if row.uniq.length != n
    end

    # 检查每列是否有重复
    n.times do |col|
      column = []
      n.times do |row|
        column << board[row][col]
      end
      return false if column.uniq.length != n
    end

    # 检查每个3x3子格是否有重复
    3.times do |box_row|
      3.times do |box_col|
        box = []
        3.times do |i|
          3.times do |j|
            box << board[box_row*3 + i][box_col*3 + j]
          end
        end
        return false if box.uniq.length != n
      end
    end

    # 所有检查通过
    true
  end
end

if __FILE__ == $0
  board = [
    [7, 9, 2, 1, 5, 4, 3, 8, 6],
    [6, 4, 3, 8, 2, 7, 1, 5, 9],
    [8, 5, 1, 3, 9, 6, 7, 2, 4],
    [2, 6, 5, 9, 7, 3, 8, 4, 1],
    [4, 8, 9, 5, 6, 1, 2, 7, 3],
    [3, 1, 7, 4, 8, 2, 9, 6, 5],
    [1, 3, 6, 7, 4, 8, 5, 9, 2],
    [9, 7, 4, 2, 1, 5, 6, 3, 8],
    [5, 2, 8, 6, 3, 9, 4, 1, 7]
  ]
  if Sudoku.new.valid_sudoku?(board)
    puts "valid"
  else
    puts "Not valid"
  end
end

关键修正与补充说明:

  • 修复is_in_range方法:

    • 原代码用raise抛出异常不符合验证逻辑,改为直接返回布尔值
    • 循环范围修正为0-8(共9个元素),避免数组越界
    • 使用Ruby更简洁的times循环替代for循环
  • 补全valid_sudoku?方法:

    • 添加行重复检查:通过uniq方法判断去重后长度是否为9
    • 添加列重复检查:提取每一列的元素后做同样的去重长度验证
    • 添加3x3子格检查:遍历每个子格的起始坐标,提取3x3区域元素后验证重复
  • 主程序修正:

    • 实例化Sudoku对象后调用实例方法,原代码直接调用会报错
    • 格式化数独数组,提升可读性

内容的提问来源于stack exchange,提问作者monish ravindra

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 00:01:03