ปัญหา
เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ 2 มิติฐานสอง arr (อาร์เรย์ที่ประกอบด้วยแค่ 0 หรือ 1) เป็นอาร์กิวเมนต์เดียว
ฟังก์ชันควรพลิกเมทริกซ์แนวนอนก่อน แล้วค่อยกลับค่า (invert) และคืนค่าเมทริกซ์ที่ได้
การพลิกเมทริกซ์แนวนอนหมายถึงแต่ละแถวของเมทริกซ์ถูกกลับลำดับ เช่น การพลิก [1, 1, 0] แนวนอนจะได้ [0, 1, 1]
การกลับค่าเมทริกซ์หมายถึงแทนที่ 0 ด้วย 1 และ 1 ด้วย 0 เช่น การกลับค่า [0, 1, 1] จะได้ [1, 0, 0]
ตัวอย่างเช่น หากอินพุตคือ
อินพุต
const arr = [
[1, 1, 0],
[1, 0, 1],
[0, 0, 0]
];
เอาต์พุต
const output = [
[1,0,0],
[0,1,0],
[1,1,1]
];
คำอธิบายเอาต์พุต
ก่อนอื่นเรากลับลำดับแต่ละแถว
[[0,1,1],[1,0,1],[0,0,0]]
จากนั้นเรากลับค่าเมทริกซ์
[[1,0,0],[0,1,0],[1,1,1]]
ตัวอย่างโค้ด
const arr = [
[1, 1, 0],
[1, 0, 1],
[0, 0, 0]
];
const flipAndInvert = (arr = []) => {
const invert = n => (n === 1 ? 0 : 1);
for (let i = 0; i < arr.length; i++) {
for (let j = 0; j < arr[i].length / 2; j++) {
const index2 = arr[i].length - 1 - j;
if (j === index2) {
arr[i][j] = invert(arr[i][j]);
} else {
const temp = arr[i][j];
arr[i][j] = arr[i][index2];
arr[i][index2] = temp;
arr[i][j] = invert(arr[i][j]);
arr[i][index2] = invert(arr[i][index2]);
}
}
}
};
flipAndInvert(arr);
console.log(arr);
ผลลัพธ์
[ [ 1, 0, 0 ], [ 0, 1, 0 ], [ 1, 1, 1 ] ]