Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Lật ngang ma trận và đảo bit trong JavaScript

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]]