Спиральная матрица на NodeJS

197
31 июля 2018, 16:10

Таск на NodeJS:

Кажется я нашел решение, но на C++. Оно выглядит следующим образом

int main()
{
int const n=5;
 int A[n][n];
 int i=1,j,k,p=n/2;
 for(k=1;k<=p;k++)
 {
 for (j=k-1;j<n-k+1;j++) A[k-1][j]=i++;
 for (j=k;j<n-k+1;j++) A[j][n-k]=i++;
 for (j=n-k-1;j>=k-1;--j) A[n-k][j]=i++;
 for (j=n-k-1;j>=k;j--) A[j][k-1]=i++;
 }
 if (n%2==1) A[p][p]=n*n;
 for(i=0;i<n;i++)
  for(j=0;j<n;j++)
  {
   printf(" %4d ",A[i][j]);
   if(j==n-1) printf("\n");
  }   
}

Также мне предоставили шаблон для решения этой задачи.

function fillSpiralMatrix(n) { 
  const result = [[]]; 
 
  // Ваш код 
 
  return result; 
} 
 
export default fillSpiralMatrix;

Вопрос заключается в том что я не до конца понимаю зачем в начале функции объявлять константу, которая по сути должна принимать в себя спиральную матрицу и в конечном итоге должна возвращять .

Или эту константу стоит вовсе удалить и создать новый массив?

Answer 1

Видимо, предполагается, что result должен постепенно заполняться в ходе работы функции. Хотя лично мне кажется, что проще сразу создать массив нужного размера.

В порядке извращения/развлечения родился следующий код:

function fillSpiralMatrix(n) { 
  let result = Array.from({length : n}, () => Array.from({length : n}, () => 0)); 
 
  const dir = (function * () { 
    let dx = -1; 
    let dy = 1; 
    let dir = {x : 1, y : 0}; 
    while (true) { 
      yield dir; 
      dir.x += dx; 
      dir.y += dy; 
      dx = dir.x ? -dx : dx; 
      dy = dir.y ? -dy : dy; 
    } 
  })(); 
 
  let num = 1; 
  let i = 0, j = 0; 
  let delta = dir.next().value; 
  while (num <= n*n) { 
    result[i][j] = num++; 
    let newI = (n + i + delta.y) % n; 
    let newJ = (n + j + delta.x) % n; 
    if (result[newI][newJ] > 0) delta = dir.next().value; 
    i += delta.y; 
    j += delta.x; 
  } 
  return result; 
} 
 
console.log(JSON.stringify(fillSpiralMatrix(5)).replace(/\],\[/g, ']\n[')); 
//export default fillSpiralMatrix;

READ ALSO
JSP данные после валидации с submit не уходят на сервлет

JSP данные после валидации с submit не уходят на сервлет

Проверяю на валидность страничку регистрацииВот JSP:

171
MITM возможно ли через SSL/TLS [закрыт]

MITM возможно ли через SSL/TLS [закрыт]

Интересует такой вопрос, возможно ли реализовать mitm (man in the middle) через ssl/tls? Какая разница или что именно нужно учитывать реализовывая подобное?...

188
Почему не работает звук в Safari?

Почему не работает звук в Safari?

Идет такой код, для вывода сообщения включить звук или выключить:

576
Как сохранить полученные данные из JSON

Как сохранить полученные данные из JSON

Имеется код, который получает json при помощи XMLHttpRequestПолученные данные сохраняются в переменную loadedData при вызове соответствующего слушателя

158