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

    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
    */

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

    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
    Ответ написан
    Комментировать