Skip to content

40. Gra Sudoku

This content is not available in your language yet.

Implementacja gry Sudoku — plansza 9×9, wpisywanie liczb, walidacja reguł Sudoku (wiersz, kolumna, 3×3 kwadrat), podpowiedzi.

// Walidacja reguł Sudoku
function isValidPlacement(board, row, col, num) {
// Sprawdzenie wiersza
for (let c = 0; c < 9; c++) {
if (board[row][c] === num && c !== col) return false;
}
// Sprawdzenie kolumny
for (let r = 0; r < 9; r++) {
if (board[r][col] === num && r !== row) return false;
}
// Sprawdzenie kwadratu 3×3
const boxRow = Math.floor(row / 3) * 3;
const boxCol = Math.floor(col / 3) * 3;
for (let r = boxRow; r < boxRow + 3; r++) {
for (let c = boxCol; c < boxCol + 3; c++) {
if (board[r][c] === num && (r !== row || c !== col)) return false;
}
}
return true;
}
function useSudoku(initialBoard) {
const [board, setBoard] = useState(initialBoard.map((row) => [...row]));
const [selected, setSelected] = useState(null);
const [errors, setErrors] = useState(new Set());
function setCell(row, col, num) {
if (initialBoard[row][col] !== 0) return; // komórka wstępnie wypełniona
const newBoard = board.map((r) => [...r]);
newBoard[row][col] = num;
// Znajdź konflikty
const newErrors = new Set();
for (let r = 0; r < 9; r++) {
for (let c = 0; c < 9; c++) {
if (newBoard[r][c] !== 0 && !isValidPlacement(newBoard, r, c, newBoard[r][c])) {
newErrors.add(`${r}-${c}`);
}
}
}
setErrors(newErrors);
setBoard(newBoard);
}
const isComplete = board.every((row) => row.every((cell) => cell !== 0)) && errors.size === 0;
return { board, selected, setSelected, setCell, errors, isComplete };
}
  • Plansza Sudoku z hardcoded puzzlem
  • Wpisywanie liczb (kliknięcie + klawiatura lub numpad)
  • Podświetlenie wybranej komórki i wiersza/kolumny/kwadratu
  • Walidacja z zaznaczeniem błędów (czerwony)
  • Sprawdzenie ukończenia
Ocena: 3.0

Powodzenia!

Sudoku to jeden z najtrudniejszych projektów indywidualnych — ale i jeden z najbardziej satysfakcjonujących. Walidacja reguł (sprawdzenie wiersza, kolumny i kwadratu 3×3) to core algorytm. W wariancie A użyj kilku hardcoded plansz (możesz je znaleźć online) — generator (backtracking) zostawia wariantowi C. Podświetlenie wybranego wiersza/kolumny/kwadratu znacznie poprawia UX!