Vấn đề
Chúng ta cần viết một hàm JavaScript nhận vào một mảng 2-D nhị phân arr (chỉ chứa 0 hoặc 1) làm đối số duy nhất. Hàm phải lật ma trận theo chiều ngang, sau đó đảo bit, và trả về ma trận kết quả.
Lật ngang nghĩa là đảo ngược từng hàng. Ví dụ: lật [1, 1, 0] cho [0, 1, 1].
Đảo bit nghĩa là 0 thành 1, 1 thành 0. Ví dụ: đảo [0, 1, 1] cho [1, 0, 0].
Ví dụ, nếu đầu vào là:
Đầu vào
const arr = [ [1, 1, 0], [1, 0, 1], [0, 0, 0] ];
Đầu ra
const output = [ [1, 0, 0], [0, 1, 0], [1, 1, 1] ];
Giải thích
Đảo từng hàng: [[0,1,1],[1,0,1],[0,0,0]]. Sau đó đảo bit: [[1,0,0],[0,1,0],[1,1,1]].
Ví dụ
Dưới đây là mã thực hiện:
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);
Kết quả
[[1, 0, 0], [0, 1, 0], [1, 1, 1]]