元胞自动机不工作
Cellular Automaton not working
我正在尝试创建一个基于 this 的元胞自动机。我设法以一种仅遵循规则 90 的简单方式做到了,但是当我将其更改为接受任何规则时,我做错了。
结果应该是这样的。
http://natureofcode.com/book/imgs/chapter07/ch07_12.png
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *myFile = fopen ( "input.txt" , "r" );
int i, j, cell, iterations=100, current[80], previous[80], ruleCase, rule=90;
for(i=0;i<80;i++){
fscanf(myFile, "%1d", &previous[i]);
if(previous[i]==0)printf("%c",176);
else printf("%c",178);
}
for(i=0;i<=iterations;i++){
for(cell=0;cell<80;cell++)
{
if((cell>0) && (cell<79))
{
ruleCase=1*previous[cell-1]+2*previous[cell]+3*previous[cell+1];
}
else if(cell==0)
{
ruleCase=1*previous[79]+2*previous[cell]+3*previous[cell+1];
}
else if(cell==79)
{
ruleCase=1*previous[cell-1]+2*previous[cell]+3*previous[0];
}
if(rule & (128 >> ruleCase))
{
current[cell]=1;
printf("%c",178);
}
else
{
current[cell]=0;
printf("%c",176);
}
}
for(j=0;j<80;j++){
previous[j]=current[j];
}
}
return 0;
}
与以下 input.txt
00000000000000000000000000000000000000100000000000000000000000000000000000000000
谢谢!
错误出在这一行:
ruleCase=1*previous[cell-1]+2*previous[cell]+3*previous[cell+1];
当我将 3
更改为 4
时,程序会生成 Sierpinski 三角形。
ruleCase=1*previous[cell-1]+2*previous[cell]+4*previous[cell+1];
和其他两行相似的行。
您的计算 ruleCase
似乎有误。例如,在一般情况下,您会...
ruleCase=1*previous[cell-1]+2*previous[cell]+3*previous[cell+1]
...但是您试图将单元格值解释为 binary 数字。因此,系数应该是 2 的幂:
ruleCase=1*previous[cell-1]+2*previous[cell]+4*previous[cell+1]
特殊情况也一样。
我正在尝试创建一个基于 this 的元胞自动机。我设法以一种仅遵循规则 90 的简单方式做到了,但是当我将其更改为接受任何规则时,我做错了。
结果应该是这样的。 http://natureofcode.com/book/imgs/chapter07/ch07_12.png
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
int main()
{
FILE *myFile = fopen ( "input.txt" , "r" );
int i, j, cell, iterations=100, current[80], previous[80], ruleCase, rule=90;
for(i=0;i<80;i++){
fscanf(myFile, "%1d", &previous[i]);
if(previous[i]==0)printf("%c",176);
else printf("%c",178);
}
for(i=0;i<=iterations;i++){
for(cell=0;cell<80;cell++)
{
if((cell>0) && (cell<79))
{
ruleCase=1*previous[cell-1]+2*previous[cell]+3*previous[cell+1];
}
else if(cell==0)
{
ruleCase=1*previous[79]+2*previous[cell]+3*previous[cell+1];
}
else if(cell==79)
{
ruleCase=1*previous[cell-1]+2*previous[cell]+3*previous[0];
}
if(rule & (128 >> ruleCase))
{
current[cell]=1;
printf("%c",178);
}
else
{
current[cell]=0;
printf("%c",176);
}
}
for(j=0;j<80;j++){
previous[j]=current[j];
}
}
return 0;
}
与以下 input.txt
00000000000000000000000000000000000000100000000000000000000000000000000000000000
谢谢!
错误出在这一行:
ruleCase=1*previous[cell-1]+2*previous[cell]+3*previous[cell+1];
当我将 3
更改为 4
时,程序会生成 Sierpinski 三角形。
ruleCase=1*previous[cell-1]+2*previous[cell]+4*previous[cell+1];
和其他两行相似的行。
您的计算 ruleCase
似乎有误。例如,在一般情况下,您会...
ruleCase=1*previous[cell-1]+2*previous[cell]+3*previous[cell+1]
...但是您试图将单元格值解释为 binary 数字。因此,系数应该是 2 的幂:
ruleCase=1*previous[cell-1]+2*previous[cell]+4*previous[cell+1]
特殊情况也一样。