Le vérificateur de Sudoku ne fonctionne pas ? Quelqu'un peut-il m'aider à identifier l'erreur ?
P粉217784586
P粉217784586 2024-04-06 21:21:07
0
1
452

J'ai tout essayé sur l'éditeur en ligne mais j'obtiens toujours l'erreur. Mais quand je fais cela sur VSCode sur ma machine, cela fonctionne bien. Je suis confus et je ne peux pas soumettre le code sans trouver le bug. Je ne sais plus où chercher. J'aurais aimé avoir une autre paire d'yeux qui regardent ça pour moi. Je suis vraiment reconnaissant.

//puzzle
let puzzle = [
  [8, 9, 5, 7, 4, 2, 1, 3, 6],
  [2, 7, 1, 9, 6, 3, 4, 8, 5],
  [4, 6, 3, 5, 8, 1, 7, 9, 2],

  [9, 3, 4, 6, 1, 7, 2, 5, 8],
  [5, 1, 7, 2, 3, 8, 9, 6, 4],
  [6, 8, 2, 4, 5, 9, 3, 7, 1],

  [1, 5, 9, 8, 7, 4, 6, 2, 3],
  [7, 4, 6, 3, 2, 5, 8, 1, 9],
  [3, 2, 8, 1, 9, 6, 5, 4, 7],
];

//puzzle 2
let puzzleTwo = [
  [8, 9, 5, 7, 4, 2, 1, 3, 6],
  [8, 7, 1, 9, 6, 3, 4, 8, 5],
  [4, 6, 3, 5, 8, 1, 7, 9, 2],
  [9, 3, 4, 6, 1, 7, 2, 5, 8],
  [5, 1, 7, 2, 3, 8, 9, 6, 4],
  [6, 8, 2, 4, 5, 9, 3, 7, 1],
  [1, 5, 9, 8, 7, 4, 6, 2, 3],
  [7, 4, 6, 3, 2, 5, 8, 1, 9],
  [3, 2, 8, 1, 9, 6, 5, 4, 7],
];

//DO NOT EDIT ABOVE

function getRow(puzzle, row) {
  let array = [];
  for (let i = 0; i < puzzle.length; i++) {
    if (i === row)
      for (let j = 0; j < puzzle[i].length; j++) array.push(puzzle[i][j]);
  }
  return array;
}

function getColumn(puzzle, col) {
  let array = [];
  for (let i = 0; i < puzzle.length; i++) {
    for (let j = 0; j < puzzle[i].length; j++)
      if (j === col) array.push(puzzle[i][col]);
  }
  return array;
}

function getSection(puzzle, x, y) {
  let array = [];
  let xIndex = 0;
  let yIndex = 0;

  if (x === 0) yIndex = 0;
  else if (x === 1) yIndex = 3;
  else yIndex = 6;

  if (y === 0) xIndex = 0;
  else if (y === 1) xIndex = 3;
  else xIndex = 6;

  for (let i = xIndex; i < xIndex + 3; i++)
    for (let j = yIndex; j < yIndex + 3; j++) array.push(puzzle[i][j]);

  return array;
}

function includes1To9(arr) {
  let prev = arr[0];
  for (let i = 1; i < arr.length; i++) {
    if (arr[i] === prev) return false;
    prev = arr[i];
  }
  return true;
}

function sudokuIsValid(puzzle) {
  for (let x = 0; x < 3; x++)
    for (let y = 0; y < 3; y++)
      if (includes1To9(getSection(puzzle, x, y)) === false) return false;

  for (let i = 0; i < puzzle.length; i++) {
    if (includes1To9(getRow(puzzle, i)) === false) return false;
    if (includes1To9(getColumn(puzzle, i)) === false) return false;
  }

  return true;
}

console.log(sudokuIsValid(puzzle)); //Returns true
console.log(sudokuIsValid(puzzleTwo)); //Returns false

Voici le message d'erreur que j'ai reçu. Lorsque le sudoku n'est pas valide, l'invite me demande de renvoyer false. Comme vous pouvez le voir, il renvoie false pour les puzzles invalides, mais pas pour tous les puzzles invalides.

FAIL ./index.test.js
  sudoku sudokuIsValid
    ✓ returns false for an invalid puzzle (2 ms)
    ✕ returns false for other invalid puzzles (2 ms)

  ● sudoku sudokuIsValid › returns false for other invalid puzzles

    expect(received).toBe(expected) // Object.is equality

    Expected: false
    Received: true

      21 |     ];
      22 |     let result = sudoku.sudokuIsValid(puzzle)
    > 23 |     expect(result).toBe(false);
         |                    ^
      24 |   });
      25 |
      26 | });

      at Object.<anonymous> (index.test.js:23:20)

P粉217784586
P粉217784586

répondre à tous(1)
P粉301523298

Votre includes1To9() vérifie uniquement si les éléments adjacents sont les mêmes :

function includes1To9(arr) {
  let prev = arr[0];
  for (let i = 1; i 
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!