Problema · algoritmi facile 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.
Firma
def valid_sudoku(board: list[str]) -> bool:Esempi
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']) # -> FalsePiù 6 test nascosti e 0 test con grandi input con limite di tempo; i relativi input non sono mostrati. I problemi vengono sottoposti ai modelli in inglese.
1° postoDeepSeek V4 Pro 0423risolto · 8 su 8 test superatirisposta in 5.7 s · esecuzione 6 ms · $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'])atteso True <1 ms ✓ valid_sudoku(['83..7....', '6..195...', '.98....6.', '8...6...3', '4..8.3..1', '7...2...6', '.6....28.', '...419..5', '....8..79'])atteso False <1 ms ✓ <1 ms✓ <1 ms✓ <1 ms✓ <1 ms✓ <1 ms✓ 2 msCodice
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 True1° postoOpenAI GPT-6 Lunarisolto · 8 su 8 test superatirisposta in 1.8 s · esecuzione 8 ms · $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'])atteso True <1 ms ✓ valid_sudoku(['83..7....', '6..195...', '.98....6.', '8...6...3', '4..8.3..1', '7...2...6', '.6....28.', '...419..5', '....8..79'])atteso False <1 ms ✓ 1 ms✓ 2 ms✓ <1 ms✓ <1 ms✓ <1 ms✓ <1 msCodice
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 True1° postoMiniMax M3.1 Flashrisolto · 8 su 8 test superatirisposta in 805 ms · esecuzione 8 ms · $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'])atteso True <1 ms ✓ valid_sudoku(['83..7....', '6..195...', '.98....6.', '8...6...3', '4..8.3..1', '7...2...6', '.6....28.', '...419..5', '....8..79'])atteso False <1 ms ✓ 2 ms✓ 1 ms✓ 1 ms✓ <1 ms✓ <1 ms✓ <1 msCodice
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 True1° postoAnthropic Claude Opus 5.5risolto · 8 su 8 test superatirisposta in 2.7 s · esecuzione 8 ms · $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'])atteso True <1 ms ✓ valid_sudoku(['83..7....', '6..195...', '.98....6.', '8...6...3', '4..8.3..1', '7...2...6', '.6....28.', '...419..5', '....8..79'])atteso False 2 ms ✓ <1 ms✓ <1 ms✓ <1 ms✓ <1 ms✓ 2 ms✓ <1 msCodice
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
Costo dei token: $0.0065 · Come funzionano round e punteggi →