const generateArray = (row, col) => {
let totalCells = row * col
const resultArray = [] // sorted
let subArray = []
let counter = 1
let trackRow = 1
let i = 0
while (i <= totalCells) {
if (counter === 1) subArray.push(trackRow)
else {
subArray.push(subArray[subArray.length - 1] + row)
}
if (subArray.length === col) {
resultArray.push(...subArray)
subArray = []
counter = 1
trackRow++
} else counter++
if (i === totalCells) { // perform swap if necessary
let lastIdx = resultArray.length - 1
let pointer1 = lastIdx
let count = 0
let pointer2 = col - 1
while(pointer1 >= 0) {
count++
if (count > col) {
pointer2 = lastIdx - pointer1 + col - 1
count = 1
}
if (pointer2 < 0 || pointer1 === pointer2 ) break // // pointers overlap and pointer on same row
if (count % 2 === 0) {
console.log('before swap', resultArray[pointer1], resultArray[pointer2]) // swap 16 13
swap(pointer2, pointer1, resultArray)
console.log('after swap', resultArray[pointer1], resultArray[pointer2]) // after swap 13 16
}
pointer2--
pointer1--
}
}
i++
}
return resultArray
}
function swap (a, b, array) {
[array[a], array[b]] = [array[b], array[a]]
}
console.log(
generateArray(4,5).map((x,i)=>`${x}`.padStart(2)+(i!=0&&i%5==4?'\n':',')).join('')
);
the swap function in the second while loop does not affect my return array for the generateArray method, even tho when printing to the console before and after the swap, the values have been perfectly swapped? see console.log 'before swap' and 'after swap'. Am I missing something?
console.log(generateArray1(4, 5))
expected result
[1, 8, 9, 16, 17
2, 7, 10, 15, 18,
3, 6, 11, 14, 19,
4, 5, 12, 13, 20]
actual result
[1, 5, 9, 13, 17,
2, 6, 10, 14, 18,
3, 7, 11, 15, 19,
4, 8, 12, 16, 20]
console.log
before swap 16 13,
after swap 13 16,
before swap 8 5,
after swap 5 8,
before swap 15 14,
after swap 14 15,
before swap 7 6,
after swap 6 7,
before swap 15 14
after swap 14 15,
before swap 7 6,
after swap 6 7,
before swap 16 13,
after swap 13 16,
before swap 8 5,
after swap 5 8