@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;
		}
	}
}
  • Вопрос задан
  • 4006 просмотров
Решения вопроса 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
*/

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

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

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 03:52
1000 руб./за проект
19 апр. 2024, в 03:01
1000 руб./за проект
18 апр. 2024, в 21:56
2000 руб./за проект