首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >污染的最后阶段

污染的最后阶段
EN

Code Golf用户
提问于 2016-03-20 01:25:10
回答 4查看 772关注 0票数 10

在5x5的接受者体内有一种病毒。因为我们知道它如何传播它的污染,你的任务是输出污染的最后阶段。

收件人

它将表示为一个由5x5组成的二维数组:

代码语言:javascript
复制
0 0 0 0 1
0 0 0 0 1
0 0 0 1 1
0 0 1 1 1
0 1 1 1 1

1是指病毒已经被污染的位置,而0是指未受污染的位置。

病毒如何传播

  1. 被污染的地方不能干净。
  2. 只有在至少两个相邻的位置(北、东、南和西单元)受到污染时,清洁的位置才会在下一阶段受到污染。
  3. 污染的最后阶段发生在没有更干净的细胞被污染的时候。

样本

作为上述污染的第一阶段,第二阶段将是:

代码语言:javascript
复制
0 0 0 0 1
0 0 0 1 1
0 0 1 1 1
0 1 1 1 1
0 1 1 1 1

污染的第三阶段将是:

代码语言:javascript
复制
0 0 0 1 1
0 0 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1

污染的第四阶段将是:

代码语言:javascript
复制
0 0 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1

第五阶段(在本例中,最后一个阶段)是:

代码语言:javascript
复制
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1
0 1 1 1 1

挑战

给定污染的一个阶段作为输入,您应该输出污染的最后一个阶段。

您可以编写完整的程序或函数。您可以将输入作为数组/列表、分隔的数字,甚至是字符串。选择最适合你的语言的方式。

最短的答案(以字节为单位)获胜!

另一个测试用例

代码语言:javascript
复制
Input:
1 1 0 0 1
0 0 0 0 0
0 1 0 0 1
0 0 0 0 0
1 0 0 0 1

Output:
1 1 0 0 1
1 1 0 0 1
1 1 0 0 1
1 1 0 0 1
1 1 0 0 1
代码语言:javascript
复制
Input:
1 0 0 0 0
0 1 0 0 0
0 0 1 0 0
0 0 0 1 0
0 0 0 0 1

Output:
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
代码语言:javascript
复制
Input:
1 0 0 1 0
0 0 1 0 1
0 0 0 0 0
1 0 0 0 0
0 0 1 0 0

Output:
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
1 1 1 1 1
代码语言:javascript
复制
Input:
0 1 0 0 0
0 0 0 0 1
0 0 1 0 0
1 0 0 0 0
0 0 0 1 0

Output:
0 1 0 0 0
0 0 0 0 1
0 0 1 0 0
1 0 0 0 0
0 0 0 1 0
EN

回答 4

Code Golf用户

回答已采纳

发布于 2016-03-20 02:45:00

因为这基本上是指我给你的细胞自动机。

老天爷快速生活规则,10字节

代码语言:javascript
复制
01234/234V

输入规则,将网格粘贴到Golly中,运行模式。结果模式是输出。

解释:

代码语言:javascript
复制
01234 Survive on any number of neighbors
     /234 Born on >2 neighbors
         V Only directly adjacent neighbors count

或者,如果您坚持完整的RuleLoader规则,89个字节:

代码语言:javascript
复制
@RULE X
@TABLE
n_states:2
neighborhood:vonNeumann
symmetries:permute
011001
011101
011111

Rulename是X,与前面的步骤相同。

票数 13
EN

Code Golf用户

发布于 2016-03-20 03:01:49

Python2,97字节

代码语言:javascript
复制
s=' '*6+input()
exec"s=s[1:]+('1'+s)[sum(s[i]<'1'for i in[-6,-1,1,6])>2or'/'>s];"*980
print s[6:]

在网上试试。输入作为带引号的字符串,每一行由换行符分隔。980不是最优的,可以用35的较低倍数替换。由于它对这个程序的长度没有任何影响,所以我把最低安全上限的确定留给了读者。

票数 5
EN

Code Golf用户

发布于 2016-03-20 04:14:00

TI-BASIC,151个字节

代码语言:javascript
复制
Prompt [A]
[A]→[B]
Lbl 0
[B]→[A]
For(Y,1,5
For(X,1,5
DelVar ADelVar BDelVar CDelVar D
If Y>1:[A](Y-1,X→A
If Y<5:[A](Y+1,X→B
If X>1:[A](Y,X-1→C
If X<5:[A](Y,X+1→D
max(A+B+C+D≥2,[A](Y,X→[B](Y,X
End
End
If [A]≠[B]:Goto 0
[B]

输入为[[1,0,0,1,1][1,0,0,0,0]...]

票数 1
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/75840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档