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

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

Vấn đề

Chúng ta cần viết một hàm JavaScript nhận vào một số n. Hàm sẽ xây dựng và trả về một mảng bậc N * N (mảng 2 chiều), trong đó các số 1 chiếm tất cả các vị trí xoắn ốc bắt đầu từ [0, 0] và các số 0 chiếm các vị trí không xoắn ốc.

Do đó, với n = 5, kết quả sẽ trông như:

[ 
  [ 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ụ

Dưới đây là mã nguồn:

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));

Kết quả

Kết quả đầu ra trong console:

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