任务 · 算法 简单 Python ·
Valid Sudoku
A partially filled 9×9 Sudoku board is given as 9 strings of 9 characters, each a digit 1–9 or "." for an empty cell. Return True if no row, no column and no 3×3 box contains the same digit twice. The board doesn't have to be solvable.
函数签名
def valid_sudoku(board: list[str]) -> bool:示例
valid_sudoku(['53..7....', '6..195...', '.98....6.', '8...6...3', '4..8.3..1', '7...2...6', '.6....28.', '...419..5', '....8..79']) # -> True
valid_sudoku(['83..7....', '6..195...', '.98....6.', '8...6...3', '4..8.3..1', '7...2...6', '.6....28.', '...419..5', '....8..79']) # -> False另有 6 个隐藏测试和 0 个限时海量数据测试;其输入数据不公开。 任务以英文提示词提供给模型。
第 1 名DeepSeek V4 Pro 0423已解决 · 通过 8/8 个测试生成耗时 5.7 秒 · 执行耗时 6 毫秒 · $0.0006 ✓ valid_sudoku(['53..7....', '6..195...', '.98....6.', '8...6...3', '4..8.3..1', '7...2...6', '.6....28.', '...419..5', '....8..79'])预期 True <1 毫秒 ✓ valid_sudoku(['83..7....', '6..195...', '.98....6.', '8...6...3', '4..8.3..1', '7...2...6', '.6....28.', '...419..5', '....8..79'])预期 False <1 毫秒 ✓ <1 毫秒✓ <1 毫秒✓ <1 毫秒✓ <1 毫秒✓ <1 毫秒✓ 2 毫秒代码
def valid_sudoku(board: list[str]) -> bool: # Check rows for row in board: seen = 0 for ch in row: if ch == '.': continue d = int(ch) mask = 1 << d if seen & mask: return False seen |= mask # Check columns for c in range(9): seen = 0 for r in range(9): ch = board[r][c] if ch == '.': continue d = int(ch) mask = 1 << d if seen & mask: return False seen |= mask # Check 3x3 boxes for box_r in range(0, 9, 3): for box_c in range(0, 9, 3): seen = 0 for r in range(box_r, box_r + 3): for c in range(box_c, box_c + 3): ch = board[r][c] if ch == '.': continue d = int(ch) mask = 1 << d if seen & mask: return False seen |= mask return True第 1 名OpenAI GPT-6 Luna已解决 · 通过 8/8 个测试生成耗时 1.8 秒 · 执行耗时 8 毫秒 · $0.0001 ✓ valid_sudoku(['53..7....', '6..195...', '.98....6.', '8...6...3', '4..8.3..1', '7...2...6', '.6....28.', '...419..5', '....8..79'])预期 True <1 毫秒 ✓ valid_sudoku(['83..7....', '6..195...', '.98....6.', '8...6...3', '4..8.3..1', '7...2...6', '.6....28.', '...419..5', '....8..79'])预期 False <1 毫秒 ✓ 1 毫秒✓ 2 毫秒✓ <1 毫秒✓ <1 毫秒✓ <1 毫秒✓ <1 毫秒代码
def valid_sudoku(board: list[str]) -> bool: rows = [0] * 9 cols = [0] * 9 boxes = [0] * 9 for r, line in enumerate(board): for c, ch in enumerate(line): if ch == ".": continue bit = 1 << (ord(ch) - ord("1")) box = (r // 3) * 3 + c // 3 if rows[r] & bit or cols[c] & bit or boxes[box] & bit: return False rows[r] |= bit cols[c] |= bit boxes[box] |= bit return True第 1 名MiniMax M3.1 Flash已解决 · 通过 8/8 个测试生成耗时 805 毫秒 · 执行耗时 8 毫秒 · $0.0001 ✓ valid_sudoku(['53..7....', '6..195...', '.98....6.', '8...6...3', '4..8.3..1', '7...2...6', '.6....28.', '...419..5', '....8..79'])预期 True <1 毫秒 ✓ valid_sudoku(['83..7....', '6..195...', '.98....6.', '8...6...3', '4..8.3..1', '7...2...6', '.6....28.', '...419..5', '....8..79'])预期 False <1 毫秒 ✓ 2 毫秒✓ 1 毫秒✓ 1 毫秒✓ <1 毫秒✓ <1 毫秒✓ <1 毫秒代码
def valid_sudoku(board: list[str]) -> bool: rows = [0] * 9 cols = [0] * 9 boxes = [0] * 9 for r, row in enumerate(board): for c, ch in enumerate(row): if ch == ".": continue bit = 1 << (ord(ch) - ord("1")) b = (r // 3) * 3 + c // 3 if (rows[r] | cols[c] | boxes[b]) & bit: return False rows[r] |= bit cols[c] |= bit boxes[b] |= bit return True第 1 名Anthropic Claude Opus 5.5已解决 · 通过 8/8 个测试生成耗时 2.7 秒 · 执行耗时 8 毫秒 · $0.0056 ✓ valid_sudoku(['53..7....', '6..195...', '.98....6.', '8...6...3', '4..8.3..1', '7...2...6', '.6....28.', '...419..5', '....8..79'])预期 True <1 毫秒 ✓ valid_sudoku(['83..7....', '6..195...', '.98....6.', '8...6...3', '4..8.3..1', '7...2...6', '.6....28.', '...419..5', '....8..79'])预期 False 2 毫秒 ✓ <1 毫秒✓ <1 毫秒✓ <1 毫秒✓ <1 毫秒✓ 2 毫秒✓ <1 毫秒代码
def valid_sudoku(board: list[str]) -> bool: seen = set() add = seen.add for i in range(9): row = board[i] bi = (i // 3) * 3 for j in range(9): c = row[j] if c == '.': continue r = (0, i, c) k = (1, j, c) b = (2, bi + j // 3, c) if r in seen or k in seen or b in seen: return False add(r) add(k) add(b) return True
Token 成本: $0.0065 · 轮次运行与评分规则 →