僵尸启示录案例研究-JavaScript

令人讨厌的僵尸病毒正在数字城市中传播。我们在数字CDC上工作,我们的工作是查看城市映射,并判断哪些区域受到了僵尸病毒的污染,以便数字军队知道将炸弹放在哪里。

它们是新型的数字僵尸,只能在垂直和水平方向移动,并且只能感染与其相同的数字。

我们将得到一个带有数字的二维数组。

由于某种神秘的原因,总是在城市的西北地区(矩阵的元素[0] [0])找到零患者,并且鼠疫通过向左,向右,向上或向下移动而从那里扩散到其他单元格。

我们必须创建一个函数,该函数返回一个映射(二维数组),其中所有受污染区域都标记为1,而无病毒区域标记为0。

换句话说,我们必须找到与[0] [0]具有相同值的所有矩阵元素,方法是仅从[0] [0]向下,向上,向右或向左移动-无需进入存储任何其他值的字段。

示例

以下是代码-

const arr = [

   [9, 1, 2, 3, 4, 1, 2, 9],

   [9, 9, 9, 2, 1, 5, 9, 9],

   [9, 2, 9, 3, 7, 9, 1, 9],

   [6, 9, 9, 9, 0, 9, 2, 9],

   [5, 4, 3, 9, 9, 9, 4, 9],

   [9, 3, 9, 5, 8, 9, 9, 9],

   [9, 9, 9, 9, 9, 9, 7, 9],

   [9, 9, 1, 2, 3, 9, 8, 9]

];

const findZombies = arr => {

   let i, j, result = [],

   zombie = arr[0][0],

   tree = {};

   const chance = ([i, j]) => {

      if (!tree[i] || !tree[i][j]) return;

      result[i][j] = 1;

      var temp = tree[i][j];

      tree[i][j] = undefined;

      temp.forEach(chance);

   }

   for (i = 0; i < arr.length; i++) {

      result.push([]);

      for (j = 0; j < arr[i].length; j++) {

         result[i].push(0);

         if (arr[i][j] !== zombie) continue;

         if (!tree[i]) tree[i] = {};

         tree[i][j] = [[i, j - 1], [i, j + 1], [i - 1, j], [i + 1, j]].filter(([x, y]) => arr[x] && arr[x][y] === zombie);

      };

   };

   chance([0, 0]);

   return result;

};

console.log(findZombies(arr));

这将在控制台上产生以下输出-

[

 [

   1, 0, 0, 0,

   0, 0, 0, 1

 ],

 [

   1, 1, 1, 0,

   0, 0, 1, 1

 ],

 [

   1, 0, 1, 0,

   0, 1, 0, 1

 ],

 [

   0, 1, 1, 1,

   0, 1, 0, 1

 ],

 [

   0, 0, 0, 1,

   1, 1, 0, 1

 ],

 [

   1, 0, 1, 0,

   0, 1, 1, 1

 ],

 [

   1, 1, 1, 1,

   1, 1, 0, 1

 ],

 [

   1, 1, 0, 0,

   0, 1, 0, 1

 ]

]

以上是 僵尸启示录案例研究-JavaScript 的全部内容, 来源链接: utcz.com/z/341198.html

回到顶部