Sudoku-Checker funktioniert nicht? Kann mir jemand helfen, den Fehler zu identifizieren?
P粉217784586
P粉217784586 2024-04-06 21:21:07
0
1
796

Ich habe alles im Online-Editor versucht, bekomme aber immer noch den Fehler. Aber wenn ich das mit VSCode auf meinem Computer mache, funktioniert es einwandfrei. Ich bin verwirrt und kann den Code nicht übermitteln, ohne den Fehler zu finden. Ich weiß nicht mehr, wo ich suchen soll. Ich wünschte, ich hätte ein anderes Paar Augen, die das für mich betrachten würden. Ich bin wirklich dankbar.

//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

Dies ist die Fehlermeldung, die ich erhalten habe. Wenn das Sudoku ungültig ist, werde ich in der Eingabeaufforderung aufgefordert, „false“ zurückzugeben. Wie Sie sehen können, wird für ungültige Rätsel zwar false zurückgegeben, jedoch nicht für alle ungültigen Rätsel.

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

Antworte allen(1)
P粉301523298

您的 includes1To9() 仅检查相邻元素是否相同:

function includes1To9(arr) {
  let prev = arr[0];
  for (let i = 1; i 
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage