Computer >> Máy Tính >  >> Lập trình >> Javascript

Tạo một mảng xoắn ốc nhị phân có kích thước cụ thể trong JavaScript

Vấn đề

Chúng tôi được yêu cầu viết một hàm JavaScript nhận một số n. Hàm của chúng ta sẽ tạo và trả về một mảng có thứ tự N * N (mảng 2-D), trong đó các số 1 có tất cả các vị trí xoắn ốc bắt đầu từ [0, 0] và tất cả các số 0 có các vị trí không xoắn ốc.

Do đó, với n =5, đầu ra sẽ có dạng -

[
   [ 1, 1, 1, 1, 1 ],
   [ 0, 0, 0, 0, 1 ],
   [ 1, 1, 1, 0, 1 ],
   [ 1, 0, 0, 0, 1 ],
   [ 1, 1, 1, 1, 1 ]
]

Ví dụ

Sau đây là mã -

const num = 5;
const spiralize = (num = 1) => {
   const arr = [];
   let x, y;
   for (x = 0; x < num; x++) {
      arr[x] = Array.from({
         length: num,
      }).fill(0);
   }
   let left = 0;
   let right = num;
   let top = 0;
   let bottom = num;
   x = left;
   y = top;
   let h = Math.floor(num / 2);
   while (left < right && top < bottom) {
      while (y < right) {
         arr[x][y] = 1;
         y++;
      }
      y--;
      x++;
      top += 2;
      if (top >= bottom) break;
      while (x < bottom) {
         arr[x][y] = 1;
         x++;
      }
      x--;
      y--;
      right -= 2;
      if (left >= right) break;
      while (y >= left) {
         arr[x][y] = 1;
         y--;
      }
      y++;
      x--;
      bottom -= 2;
      if (top >= bottom) break;
      while (x >= top) {
         arr[x][y] = 1;
         x--;
      }
      x++;
      y++;
      left += 2;
   }
   if (num % 2 == 0) arr[h][h] = 1;
   return arr;
};
console.log(spiralize(num));

Đầu ra

Sau đây là đầu ra của bảng điều khiển -

[
   [ 1, 1, 1, 1, 1 ],
   [ 0, 0, 0, 0, 1 ],
   [ 1, 1, 1, 0, 1 ],
   [ 1, 0, 0, 0, 1 ],
   [ 1, 1, 1, 1, 1 ]
]