生命游戏和随机数之间某种不可言说的秘密

为什么我感觉随便写一个一维生命游戏规则就可以做出一个看起来很随机实际上也蛮随机的随机数生成器....

这是代码:

 1 #include <cstdio>
 2 #include <fstream>
 3 #include <iostream>
 4
 5 #include <cstdlib>
 6 #include <cstring>
 7 #include <algorithm>
 8 #include <cmath>
 9
10 #include <queue>
11 #include <vector>
12 #include <map>
13 #include <set>
14 #include <stack>
15 #include <list>
16
17 typedef unsigned int uint;
18 typedef long long int ll;
19 typedef unsigned long long int ull;
20 typedef double db;
21
22 using namespace std;
23
24 inline int getint()
25 {
26     int res=0;
27     char c=getchar();
28     bool mi=false;
29     while(c<‘0‘ || c>‘9‘) mi=(c==‘-‘),c=getchar();
30     while(‘0‘<=c && c<=‘9‘) res=res*10+c-‘0‘,c=getchar();
31     return mi ? -res : res;
32 }
33 inline ll getll()
34 {
35     ll res=0;
36     char c=getchar();
37     bool mi=false;
38     while(c<‘0‘ || c>‘9‘) mi=(c==‘-‘),c=getchar();
39     while(‘0‘<=c && c<=‘9‘) res=res*10+c-‘0‘,c=getchar();
40     return mi ? -res : res;
41 }
42
43 db eps=1e-80;
44 inline bool feq(db a,db b)
45 { return fabs(a-b)<eps; }
46
47 template<typename Type>
48 inline Type avg(const Type a,const Type b)
49 { return a+((b-a)/2); }
50
51 //==============================================================================
52 //==============================================================================
53 //==============================================================================
54 //==============================================================================
55
56 int n,m;
57
58 int a[2][1005000];
59
60 bool rd[1005000];
61 int rt=0;
62 int lastrand=7;
63 int getrand()
64 {
65     int res=0;
66     for(int i=0;i<10;i++) res+=(rd[lastrand+(i<<1)]<<i);
67     lastrand++;
68     return res;
69 }
70
71
72
73 int main()
74 {
75     freopen("in.txt","r",stdin);
76     freopen("out.txt","w",stdout);
77
78     n=getint();
79
80     int mid=n*2,s=0;
81     a[0][mid]=1;
82     for(int i=1;i<n;i++)
83     {
84         for(int j=mid-i;j<=mid+i;j++)
85         a[!s][j]=a[s][j]+a[s][j-2]^a[s][j+1]-a[s][j]^a[s][j+1]+a[s][j+1];
86         s^=1;
87
88         for(int j=mid-i;j<=mid+i;j++) rd[rt++]=(a[s][j]<0);
89     }
90
91     for(int i=0;i<12500;i++) cout<<getrand()<<‘,‘;
92
93
94     return 0;
95 }

种子可以设lastrand,也可以设lastrand的增量,甚至是要取哪些数据计算随机数...

下面是按照以上代码生成0到1023的随机数12500个.

看起来左边有点多?....不过应该也足够....随机了.....

接下来的任务是给它写一个能用的class.....

allocate之类的最讨厌了囧...

然后下边是有趣的东西.....

这是在cout<<getrand()后加了%611的结果.这告诉我们千万不要对原生随机数乱取模!......

但是我就想要0到611之间的随机数呢?

呃....把原区间用double对应到[0,1]范围内再乘回去似乎是个可行的办法....

看起来常数有点大,我做梦的时候想想有没有更好的......

时间: 2024-10-14 10:56:12

生命游戏和随机数之间某种不可言说的秘密的相关文章

生命游戏&amp;一维细胞自动机 笔记

de 生命游戏是一种简单的聚合模型,展示了事物是如何聚合的,是自动机(CA)模型的一种.由剑桥大学约翰康威发明,其规则为: 1. 每个细胞拥有八个邻居,细胞状态只有存活(黑)和死亡(白)两种: 2.处于死亡状态的细胞可以在有三个存活邻居的情况下复活: 3.存活状态的细胞在相邻有2个一下或三个以上存活细胞的情况下会死去,2-3个相邻细胞存活时会继续存活: 从而产生了信号灯.闪光灯.滑翔机.警示灯等经典的变换. 遵循简单规则的简单图像聚合一起可以形成复杂图像,甚至如活物一般能进行空间平移(自组织模型

关于康威生命游戏的学习

 康威生命游戏,又称康威生命棋,是英国数学家约翰·何顿·康威在1970年发明的细胞自动机.它最初于1970年10月在<科学美国人>杂志上马丁·葛登能的"数学游戏"专栏出现. 一个偶然机会发现了这个美妙的生命游戏.于是开始写程序来实现它,其实实现是很简单的,我现在还只能做到这个而已,不过还会继续深究下去的.先用Random来生成随机数,这样就可以在初始的时候在随机位置设定生死细胞了.输出的时候用2个for循环就是了.昨天做的时候遇到的问题是不知道最后该怎么判断了,因为判断

生命游戏和细胞自动机的学习笔记

Last updated: 23rd. July, 2012 野比 2012 版权所有 (本文为学习笔记,知识浅薄.我会将学习中的实验记录和心得记录在此.) 欢迎对这方面感兴趣的爱好者一起研究. 寻求技术指导. 联系QQ:1429013154 我一直对人工智能很感兴趣,苦于数学基础太差,很多理论方面的东西理解起来十分吃力.最近又翻出以前的学习目标:人工生命.名字挺悬乎,其实很多人都曾和它有过交集,就算没有用到它进化出的好物种--智能机器人,至少也应该听过甚至中过它进化的恶劣物种--蠕虫病毒. 说

生命游戏的三种玩法

生命游戏 每个细胞有两种状态--存活或者死亡,每个细胞只与以其自身为中心的细胞产生互动. 当细胞为死亡状态,若周围有3个存活细胞,则该细胞变成存活状态(模拟繁殖) 当细胞为存活状态,若周围有2个或3个存活细胞,保持原样 若周围有3个以上存活细胞,该细胞变成死亡(模拟极度拥挤) 若周围有低于2个一下存活细胞,该细胞死亡(模拟人口稀疏) 这个游戏也叫康威生命游戏.细胞自动机.元胞自动机等. 图案介绍 "脉冲星":它周期为3,看起来像一颗爆发的星星 "滑翔者":每4个回合

【转载】【元胞自动机】生命游戏(时间简史)

原帖:http://www.cnblogs.com/lvpengms/archive/2010/02/08/1666095.html 晚上闲着没事干,鉴于前一段时间数学建模中看到了生命游戏 Game of Life,所以用C++实现一下,效果还不错. 本程序是用vs2005 C++编写,有意想要程序和源码的朋友可以给我发邮件. 更新:程序源码可以从这个地址下载:下载元胞自动机源码及程序 =======================================================

元胞自动机+生命游戏

元胞自动机 元胞自动机(Cellular Automaton,复数为Cellular Automata,简称CA,也有人译为细胞自动机.点格自动机.分子自动机或单元自动机).是一时间和空间都离散的动力系统.散布在规则格网 (Lattice Grid)中的每一元胞(Cell)取有限的离散状态,遵循同样的作用规则,依据确定的局部规则作同步更新.大量元胞通过简单的相互作用而构成动态系统的演化. 不同于一般的动力学模型,元胞自动机不是由严格定义的物理方程或函数确定,而是用一系列模型构造的规则构成.凡是满

生命游戏/Game of Life的Java实现(转)

首先简单介绍一下<生命游戏> 生命游戏其实是一个零玩家游戏.它包括一个二维矩形世界,这个世界中的每个方格居住着一个活着的或死了的细胞.一个细胞在下一个时刻生死取决于相邻八个方格中活着的或死了的细胞的数量.如果相邻方格活着的细胞数量过多,这个细胞会因为资源匮乏而在下一个时刻死去:相反,如果周围活细胞过少,这个细胞会因太孤单而死去.具体如下图: 每个格子的生死遵循下面的原则: 1. 如果一个细胞周围有3个细胞为生(一个细胞周围共有8个细胞),则该细胞为生(即该细胞若原先为死,则转为生,若原先为生,

LeetCode:Game of Life - 康威生命游戏

1.题目名称 Game of Life(康威生命游戏) 2.题目地址 https://leetcode.com/problems/game-of-life 3.题目内容 英文: According to the Wikipedia's article: "The Game of Life, also known simply as Life, is a cellular automaton devised by the British mathematician John Horton Conw

【生命游戏】

/* 生命游戏 说明: 生命游戏(game of life)为1970年由英国数学家J.H.Conway所提出来,某一细胞的邻居包括上,下,左,右,左上,左下, 右上,右下相邻之细胞.游戏规则如下: 孤单死亡:如果细胞的邻居小于一个,则该细胞在下一次状态将死亡. 拥挤死亡:如果细胞的邻居在四个以上,则该细胞在再一次状态将死亡. 稳定:如果细胞的邻居为二个或三个,则下一次状态为稳定存活. 复活:如果某位置原无细胞存活,而该位置的邻居为三个,则该位置将复活一细胞. 解法: 生命游戏的规则可简化为以下