@hardWell

Заполнения массива на Javascript?

Здравствуйте ! подскажите как заполнить массив как показано на изображении вот мой код
cba62ce2aeaf492c8f543ed135ab5155.jpg
var arr = [];
var rows = 7;
var cols = 7;
for (var i = 0; i < rows; i++) {
		arr[i] = [];
	for (var j = 0; j < cols; j++) {
		arr[i][j] = i;
		if (i == j || i == cols-j-1) {
			arr[i][j] = 1;
		} else {
			arr[i][j] = 0;
		}
	}
}
  • Вопрос задан
  • 4014 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
function createArr(size) {
  const arr = [...Array(size)].map(() => Array(size).fill(0));

  const mid = (size / 2) | 0;
  arr.forEach((n, i) => {
    n[i] = n[size - i - 1] = 1;
    // если размер чётный, непонятно, где выставлять единицы, так что выставляем только для нечётных
    if (size & 1) {
      arr[mid][i] = n[mid] = 1;
    }
  });
  // хотя, конечно, есть вариант ставить по два вертикальных и горизонтальных ряда единиц
  /*
  const mid = (size - 1) / 2;
  arr.forEach((n, i) =>
    n[i] =
    arr[mid | 0][i] =
    arr[Math.ceil(mid)][i] =
    n[mid | 0] =
    n[Math.ceil(mid)] =
    n[size - i - 1] =
  1);
  */

  return arr;
}

Оценить результат работы можно так, например:

console.log(createArr(21).map(n => n.join('')).join('\n'));

Выведет такое вот чудище:

100000000010000000001
010000000010000000010
001000000010000000100
000100000010000001000
000010000010000010000
000001000010000100000
000000100010001000000
000000010010010000000
000000001010100000000
000000000111000000000
111111111111111111111
000000000111000000000
000000001010100000000
000000010010010000000
000000100010001000000
000001000010000100000
000010000010000010000
000100000010000001000
001000000010000000100
010000000010000000010
100000000010000000001
Ответ написан
Комментировать
sergiks
@sergiks Куратор тега JavaScript
♬♬
Можно просто перебирать по очереди все и проверять выполнение одного из условий:
принадлежность диагонали, положение точно по середине оси X или Y:
function makeStar(side) {
  var arr = new Array(side), x, y, mid = (side-1)/2;
  for( y = 0; y < side; y++) {
    row = arr[y] = new Array(side);
    for( x = 0; x < side; x++) {
      row[x] = (y===x || x===side-1-y || x===mid || y===mid) ? 1 : 0;
    }
  }
  return arr;
}

makeStar(4)
  .reduce((p,c)=>{ return p + c.join(',') + "\n"},'')

/*
1,0,0,1
0,1,1,0
0,1,1,0
1,0,0,1
*/

Наверняка, есть очень красивые решения этой же задачи (не искал). Можно использовать подобие – левая верхняя четверть равна нижней правой. Можно обыграть поворот вокруг центра.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы