sudoku problem

 avatar
unknown
javascript
2 years ago
2.3 kB
8
Indexable
//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

//get current row
function getRow(puzzle, row) {
    return puzzle[row];
}

//get current column
function getColumn(puzzle, col) {
    
    return puzzle.map( x=> x[col]);
}
//get current subgrid
function getSection(puzzle, x, y) {
    
    let arr = []
    let xStart = x * 3;
    let yStart = y * 3;

    for (let i = 0; i< 3; i ++){
        for(let j = 0; j <3; j++){
            arr.push(puzzle[i + yStart][j + xStart]);
        }
    }
    return arr;
}

//find out if arr includes 1 to 9

function includes1To9(arr) {
  let arr2 = [1,2,3,4,5,6,7,8,9];
  let sortedArr = arr.sort((a, b) => a - b);

  if(arr2.join(',') === sortedArr.join(',')){
    return true;
  }
  else{
    return false;
  }
}

function checkIfArrayIsUnique(myArray) {
  return myArray.length === new Set(myArray).size;
}

//validate is sudoku inputs are valid
function sudokuIsValid(puzzle) {
  //check rows;
  for (let i = 0; i < puzzle.length; i++){
      let row = getRow(puzzle, i);
      if(includes1To9(row) === false){
          return false;
      }
      if(checkIfArrayIsUnique(row) === false){
          return false;
      }
  }
  //check columns;
  for(let j = 0; j< 9; j++){
      let column = getColumn(puzzle, j);
      if(includes1To9(column) === false){
          return false;
      }
      if(checkIfArrayIsUnique(column) === false){
          return false;
      }
  }
  return true;  
}

//returns error expected sudokuIsValid(puzzle) to be true, received: false

Editor is loading...