模拟一维生活游戏模型


12

这个问题只是在代码审查中引起的,我认为您可能希望将其改编为代码高尔夫挑战:

系统会为您提供x个以布尔值表示的房屋的非空列表。每天,房屋与相邻房屋竞争。1代表“活动”房屋,0代表“无效”房屋。如果给定房屋两侧的邻居都处于活动状态或都处于非活动状态,则该房屋在第二天变为非活动状态。否则它将变为活动状态。

def get_state_as_pos(thelist, pos):
    if thelist[pos-1] == thelist[pos+1]:
        return 0
    else:
        return 1

例如,如果我们有一组邻居[0,1,0],则[1]处的房屋将变为0,因为左侧和右侧的房屋均处于非活动状态。两端的单元格也检查相对侧,因此索引0的邻居位于索引length-1和索引n1,反之亦然。即使更新了单元之后,在更新其他单元时也必须考虑其先前状态,以便每个单元的状态信息同时更新。

该函数采用状态数组和多个步骤,并应在给定数量的步骤之后输出房屋的状态。

    input: states = [1, 0, 0, 0, 0, 1, 0, 0], steps = 1
   output should be [0, 1, 0, 0, 1, 0, 1, 1]

    input: states = [1, 1, 1, 0, 1, 1, 1, 1], steps = 2
intermediate state= [0, 0, 1, 0, 1, 0, 0, 0]
   output should be [0, 1, 0, 0, 0, 1, 0, 0]


    input: states = [1], steps=1
    output: states= [0]

采取所需的列表和步骤,并通过默认I / O输出结果列表。禁止出现标准漏洞。这是codegolf,最短答案以字节为单位!


8
+1为元胞自动机。但是,这不是90条规则吗?
高度放射性

2
第一个测试用例不应该导致[0, 1, 0, 0, 1, 0, 1, 1]吗?
TFeld,

4
@jaaq我指的是基本元胞自动机规则(每个步骤或世代之间的转换)#90。在Wolfram | Alpha中输入“ Rule 90”。
高度放射性

12
通过STDOUT输出结果列表:强烈建议仅使用我们默认的I / O方法
Arnauld

5
@jaaq并不是巧合,因为每个标准1D Cellular Automata都有一个Rule#。这是因为3位具有8种可能的状态(左邻居,自身,右邻居),并且如果您为每种状态说给定的房子将打开或关闭,则这8个真/假值恰好完美地映射到一个字节。因此,规则#0-255可以用作简写形式来描述任何这些规则集,方法是根据字节中的位置将二进制表达式作为8种情况中每一种的结果房屋开/关状态。一些规则被认为是值得注意的,例如90,因此得到认可:)
Lunin 19'Sep

Answers:


8

05AB1E14 13 10 9 6个字节

基于Shaggy的Japt解决方案

F©Á®À^

在线尝试!

F                  # repeat n times:
 ©Á                #  the list, rotated right
   ®À              #  the list, rotated left
     ^             #  xor (vectorizes)

不必要的9字节解决方案:

F¥DO.øü+É

在线尝试!

F                  # repeat n times:
                   #  (examples given for the initial state [0, 1, 1, 0, 1])
 ¥                 #  deltas of the list ([1, 0, -1, 1])
  D                #  duplicate
   O               #  sum (1)
    .ø             #  surround ([1, 1, 0, -1, 1, 1])
      ü+           #  pairwise addition ([2, 1, -1, 0, 2])
        É          #  modulo 2 ([0, 1, 1, 0, 0])



2

JavaScript(ES6),57个字节

将输入作为(steps)(array)

s=>g=a=>s--?g(a.map(_=>a[~-i++%l]^a[i%l],i=l=a.length)):a

在线尝试!


2

Japt -mh11 10 9 字节

I / O状态为单例2D阵列。

VÇí^Zé2)é

尝试一下

VÇí^Zé2)é     :Implicit input of integer U=steps & array V=[states]
VÇ            :Modify the last element Z in V
  í           :Interleave with
    Zé2       :  Z rotated right twice and
   ^          :  Reduce each pair by XOR
       )      :End interleave
        é     :Rotate right once
              :Repeat U times and implicitly output V

2

视网膜,51字节

1A`
"$+"{`(.).*(.)
$2$&$1
(.)(?=.(\1|(.)))?
$#2*$#3

在线尝试!第一行采用步数,第二行采用0s和1s 字符串。说明:

1A`

从输入中删除步骤数。

"$+"{

重复该次数。

`(.).*(.)
$2$&$1

将末尾数字复制到另一端以模拟环绕。

(.)(?=.(\1|(.)))?
$#2*$#3

执行XOR操作。


2

APL(Dyalog扩展),12 字节SBCS

完整程序。提示stdin输入状态数组,然后输入步骤数。打印到标准输出。

1(⌽≠⌽⍢⌽)⍣⎕⊢⎕

在线尝试!

从控制台获取评估输入(状态数组)

 就此,申请…

1()⍣⎕ 以下默认函数,输入次数,每次以1左引数为单位:

⌽⍢⌽ 向右旋转自变量向右旋转1步(即向右旋转一步)

⌽≠ 将参数与XOR左移1步




1

Pyth,24个字节

AQVH=Gmxhded.:+eG+GhG3;G

在线尝试!

AQ                        # G, H = Q[0], Q[1] # Q = input in the form [[states],steps]
  VH                      # for i in range(H):
    =G                    # G = 
      m                   #     map(lambda d:                              )
       xhded              #                   d[0] ^ d[-1],
            .:       3    #         substrings(                 , length=3)
              +eG+GhG     #                     G[-1] + G + G[0]
                      ;   # (end for loop)
                       G  # print G

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.