# 模拟任何一维元胞自动机

14

## 挑战

``````0000110000
0001111000
0011001100
0111111110
1100000011
0110000110
``````

``````184,1100,01,2,01,1,4
``````

``````0101110001
1011101000
0111010100
0110101010
0101010101
``````

``````0,1011,1,0,0,1,2
``````

``````10110
00000
00000
``````

JoeFish 2012年

@JoeFish是您的图像使我尝试了这一操作。我想给出8086的答案-杀死2只鸟-但它可能需要进行字符串操作，因此我的模拟器无法运行它（至今）。
luser droog 2012年

5

## Golfscript，77 73 70个字符

``````','/)~\(~:?;~~*@@~*@+\+{1&}/]({[.,{.[3<?256+]{2base}/\~=\(+}*])n@)\+}*
``````

@霍华德，谢谢。最后的那些流行音乐在较早的迭代中很有用，但您是对的，现在消除它们是正确的。

5

## APL（153个字符）

``````∇ cellularautomaton
i               ← ⍞
s               ← (i=',') / ⍳ ⍴i
(b a x c)       ← {i[s[⍵]↓⍳s[⍵+1]-1]} ¨ ⍳4
(z x x l x r n) ← ⍎i
y               ← ⍎ ¨ ⊃ ,/ (l / ⊂a) , b , r / ⊂c
(n+1) (⊃⍴,y) ⍴ '01'[1+⊃ ,/ y,{({(z ⊤⍨ 8/2)[8 - 2⊥¨ 3 ,/ (⊃⌽⍵),⍵,⊃⍵]}⍣⍵)y} ¨ ⍳n]
∇
``````

``````i←⍞⋄s←(i=',')/⍳⍴i⋄b a x c←{i[s[⍵]↓⍳s[⍵+1]-1]}¨⍳4⋄z x x l x r n←⍎i⋄y←⍎¨⊃,/(l/⊂a),b,r/⊂c⋄'01'[1+⊃,/y,{({(z⊤⍨8/2)[8-2⊥¨3,/(⊃⌽⍵),⍵,⊃⍵]}⍣⍵)y}¨⍳n]⍴⍨(1+n),⊃⍴,y
``````

``````      cellularautomaton
26,00110,01,4,10,6,7
0101010100110101010101010
1000000011100000000000001
0100000110010000000000011
0010001101101000000000110
0101011001000100000001101
0000010110101010000011000
0000100100000001000110100
0001011010000010101100010
``````

4

## Ruby，165159个字符

``````a=gets.split ?,
b=a.map &:to_i
c=(x=a[2]*b[3]+a[1]+a[4]*b[5]).chars.map &:hex
(0..b[6]).map{puts c*''
c=(1..w=x.size).map{|i|b[0]>>c[i-1]*2+c[i%w]+c[i-2]*4&1}}
``````

``````> 30,1,0,20,0,20,20
00000000000000000000100000000000000000000
00000000000000000001110000000000000000000
00000000000000000011001000000000000000000
00000000000000000110111100000000000000000
00000000000000001100100010000000000000000
00000000000000011011110111000000000000000
00000000000000110010000100100000000000000
00000000000001101111001111110000000000000
00000000000011001000111000001000000000000
00000000000110111101100100011100000000000
00000000001100100001011110110010000000000
00000000011011110011010000101111000000000
00000000110010001110011001101000100000000
00000001101111011001110111001101110000000
00000011001000010111000100111001001000000
00000110111100110100101111100111111100000
00001100100011100111101000011100000010000
00011011110110011100001100110010000111000
00110010000101110010011011101111001100100
01101111001101001111110010001000111011110
11001000111001111000001111011101100010001
``````

3

## C，303 305 301 294 292

305编辑：哎呀。忘了带`calloc()`两个参数。随着更大的投入，它开始爆炸。

301编辑：啊哈！我的`calloc()`boo-boo通过增加请求的内存的块大小来节省2个字节。

294编辑：打破了300！消除了之一，`strcat()`并调整了一些循环。获得了最大的嚼食，这和使用一样有趣。

292编辑：不需要`+2`内存分配。

``````r,A,C,n,j;main(){char*s,*p,*t,a[9],b[9],c[9];scanf("%d,%[01],%[01],%d,%[01],%d,%d",&r,b,a,&A,c,&C,&n);for(s=calloc(A+++C,9);A--;)strcat(s,A?a:b);for(;C--;)strcat(s,c);p=strdup(s);for(C=strlen(s);A++<n;puts(s),t=p,p=s,s=t)for(j=C;j--;)p[j]=(1<<(s[j?j-1:C-1]*4+s[j]*2+s[(j+1)%C])-336)&r?49:48;}

r,A,C,n,j;
main(){
char*s,*p,*t,a[9],b[9],c[9];
scanf("%d,%[01],%[01],%d,%[01],%d,%d",&r,b,a,&A,c,&C,&n);
for(s=calloc(A+++C,9);A--;)
strcat(s,A?a:b);
for(;C--;)
strcat(s,c);
p=strdup(s);
for(C=strlen(s);A++<n;puts(s),t=p,p=s,s=t)
for(j=C;j--;)
p[j]=(1<<(s[j?j-1:C-1]*4+s[j]*2+s[(j+1)%C])-336)&r?49:48;
}
``````

1

luser droog 2012年

luser droog 2013年

1

luser droog

luser droog '17年

1
@luserdroog这是行不通的，因为％s贪婪，并且也吃逗号和其他数字。
JoeFish

2

# C （487484 418（删除空格）

* 在JoeFish的帮助下下降了66个 *

``````C,A,r,n,j;main(){char*s,*p,*t,a[9],b[9],c[9];
scanf("%d,%[01],%[01],%d,%[01],%d,%d",&r,b,a,&A,c,&C,&n);
s=malloc(strlen(a)*A+strlen(b)+strlen(c)*C+3);*s=0;
strcat(s,"0");
for(;A--;)strcat(s,a);
strcat(s,b);
for(;C--;)strcat(s,c);
strcat(s,"0");
p=malloc((C=strlen(s)-1)+2);
for(;n--;){
*s=s[C-1];
s[C]=0;
puts(s+1);
s[C]=s[1];
for(j=1;s[j+1];j++)
p[j]=(1<<(s[j-1]-48)*4+(s[j]-48)*2+s[j+1]-48)&r?49:48;
t=p;p=s;s=t;
}
s[C]=0;
puts(s+1);
}
``````

```josh @ Z1〜
\$！m

cc ca.c -o ca
ca.c：1：1：警告：数据定义没有类型或存储类
ca.c：在“ main”函数中：
ca.c：2：5：警告：内置函数'scanf'的隐式声明不兼容
ca.c：3：7：警告：内置函数'malloc'的隐式声明不兼容
ca.c：3：14：警告：内置函数“ strlen”的隐式声明不兼容
ca.c：4：5：警告：内置函数'strcat'的隐式声明不兼容

josh @ Z1〜
\$ echo 90,11,0,4,0,4,5 | 钙
-bash：ca：找不到命令

josh @ Z1〜
\$ echo 90,11,0,4,0,4,5 | ./ca
0000110000
0001111000
0011001100
0111111110
1100000011
0110000110

```

JoeFish 2012年

`for`循环中保存一堆：`for(;A--;)strcat(s,a);`
JoeFish 2012年

JoeFish 2012年

JoeFish 2012年

luser droog