0

I have an array, which is generated randomly every time, and I want to create a matrix using it. The matrix is for a sudoku game so it should be generated by a pattern. The first line is always the array that I am using. The pattern (from here: https://gamedev.stackexchange.com/a/138228) goes like this:

line 0: 8 9 3  2 7 6  4 5 1
line 1: 2 7 6  4 5 1  8 9 3 (shift 3)
line 2: 4 5 1  8 9 3  2 7 6 (shift 3)

line 3: 5 1 8  9 3 2  7 6 4 (shift 1)
line 4: 9 3 2  7 6 4  5 1 8 (shift 3)
line 5: 7 6 4  5 1 8  9 3 2 (shift 3)

line 6: 6 4 5  1 8 9  3 2 7 (shift 1)
line 7: 1 8 9  3 2 7  6 4 5 (shift 3)
line 8: 3 2 7  6 4 5  1 8 9 (shift 3)

How do I assign the array to the first line and then for the rest of the lines the shifted line from before? It doesn't work how I tried...

function generateArray() {
  var min = 1;
  var max = 9;
  var stop = 9;
  var numbers = [];
  for (let i = 0; i < stop; i++) {
    var n = Math.floor(Math.random() * max) + min;
    var check = numbers.includes(n);
    if (check === false) {
      numbers.push(n);
    } else {
      while (check === true) {
        n = Math.floor(Math.random() * max) + min;
        check = numbers.includes(n);
        if (check === false) {
          numbers.push(n);
        }
      }
    }
  }
  return numbers;
}

function shiftArray(array, nr) {
  array = array.concat(array.splice(0, nr)); // shift left by nr
  return array;
}

function generateMatrix() {
  var v = generateArray();
  var m = [];
  m[0] = v;
  m[1] = shiftArray(m[0], 3);
  m[2] = shiftArray(m[1], 3);
  m[3] = shiftArray(m[2], 1);
  m[4] = shiftArray(m[3], 3);
  m[5] = shiftArray(m[4], 3);
  m[6] = shiftArray(m[5], 1);
  m[7] = shiftArray(m[6], 3);
  m[8] = shiftArray(m[7], 3);
  console.log("matrix: ", m);
  return m;
}
generateMatrix();

3
  • Won't this help you? stackoverflow.com/questions/8301400/… Commented Jan 21, 2022 at 16:48
  • 1
    function shiftArray(arr, nr) { arr = arr.map((_, b) => arr[(b + nr) % arr.length]); return arr; } Commented Jan 21, 2022 at 16:59
  • 1
    @OzgurMurat That really helps! It solved my problem, thanks! I don't understand the code though, and why my method of shifting didn't work... Commented Jan 21, 2022 at 18:41

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.