为什么在此代码挑战中预期输出以 0 开头而不是 1?

问题描述 投票:0回答:1

生命弦乐游戏

生命游戏的宇宙是一个由方格组成的无限二维正交网格,每个方格 它处于两种可能的状态之一:活着或死亡。每个细胞 与它的八个邻居相互作用,这些邻居是 水平、垂直或对角相邻。在每一步中 时间,会发生以下转变:

  • 任何少于两个活邻居的活细胞都会死亡,就像是由于人口不足造成的。
  • 任何有两个或三个邻居的活细胞都会延续到下一代。
  • 任何有超过三个邻居的活细胞都会死亡,就像过度拥挤一样。
  • 任何恰好有三个活邻居的死细胞都会变成活细胞,就像通过繁殖一样。

实现计算新一代生命游戏的方法。 该方法接收格式为“000_000_000”的字符串, 表示由 0(死细胞)和 1(活细胞)组成的矩阵 NxM。

并返回一个格式相同的字符串“000_000_000”,代表 代表下一代的同等大小的数组。细胞外 该阵列必须被视为已死亡。诞生的细胞 数组边界应该被忽略(宇宙永远不会超出数组边界) 初始 NxM 网格)。

示例

  • 输入:
    "000_111_000"
  • 输出:
    "010_010_010"

PS。我并不是要求任何实施,只是帮助理解这一点。一旦我明白实施只是一个细节。

javascript conways-game-of-life
1个回答
0
投票

只要遵守规则即可。

该字符串代表一个 2D 网格

"000_111_000"

A B C
1 0 / 死了 0 / 死了 0 / 死了
2 1 / 直播 1 / 直播 1 / 直播
3 0 / 死了 0 / 死了 0 / 死了

(为了清晰起见,添加了坐标:A1 位于左上角,值为

0
/dead,B2 位于中间,值为
1

查看规则列表和每个单元格:

  • A1(死)三个邻居:B1(死)、B2(活)、A2(活)
    • 不适用任何规则,值
      0
      保持不变
  • A2(活)五个邻居:A1(死)、B1(死)、B2(活)、B3(死)、A3(死)
    • 适用第一条规则:少于两个活着的邻居,因此值更改为
      0
  • A3(死)三个邻居:A2(活)、B2(活)、B3(死)
    • 不适用任何规则,值
      0
      保持不变
  • B1(死)五个邻居:C1(死)、C2(活)、B2(活)、A2(活)、A1(死)
    • 第四条规则适用:正好三个活着的邻居,因此值更改为
      1
  • B2(活)八个邻居:B1(死)、C1(死)、C2(活)、C3(死)、B3(死)、A3(死)、A2(活)、A1(死的)
    • 第二条规则适用:两个活着的邻居,因此值变化保持不变
      1
  • B3(已死)五个邻居:B2(活)、C2(活)、C3(死)、A3(死)、A2(活)
    • 第四条规则适用:正好三个活着的邻居,因此值更改为
      1
  • C1(死)三个邻居:C2(活)、B2(活)、B1(死)
    • 不适用任何规则,值
      0
      保持不变
  • C2(活)五个邻居:C1(死)、C3(死)、B3(死)、B2(活)、B1(死)
    • 适用第一条规则:少于两个活着的邻居,因此值更改为
      0
  • C3(死)三个邻居:C2(活)、B3(死)、B2(活)
    • 不适用任何规则,值
      0
      保持不变

这会导致

A B C
1 0 / 死了 1 / 直播 0 / 死了
2 0 / 死了 1 / 直播 0 / 死了
3 0 / 死了 1 / 直播 0 / 死了

反过来,当编码回字符串时,与输入相匹配

"010_010_010"
© www.soinside.com 2019 - 2024. All rights reserved.