好久没上CSDN了噢,今天觉得无论如何得学一下python了,捣鼓了一晚,好弱啊~~ 在这贴个代码,以备忘。
----------------------------------
题外话:这学期要设计基于FPGA的CPU,我组设计很大程度参考MIPS架构,发现UCB 61C的CPU设计部分的课件(注:itunes U是有视频的,不过看视频比较耗时。。)还是很给力的哈哈。进一步发掘资料,发现还有很多好资源哈哈。其中SelfPace Course就是非常好的资源,建议CSDN的朋友们多看看。这学期还有在做编译器实现(系里采用的是stanford 的cool 语言方案 CS143)和B/S的数据库应用系统的专题实验,有在做相关东西的同学大家多交流。
---------------------------------
UCB 课程目录 http://www-inst.eecs.berkeley.edu/classes-eecs.html
UCB SelfPace课程 http://www-inst.eecs.berkeley.edu/~selfpace/cs9honline/P1/
UCB Selfpace course: python for
Project 1: Cellular Automaton
author: JRH @XJTU
2012-3-25
s=
''
times=
50
ruleNumber=
30
def
D2Binary8bit(i):
def
Denary2Binary(n):
bStr=
''
if n==
0:
return
'0'
while n>
0:
bStr=
str(n%
2)+bStr
n=n>>
1
return bStr
def
plusZero(s):
while
8-
len(s)>
0:
s=
'0'+s
return s
s=Denary2Binary(i)
strTemp=plusZero(s)
#print i
return strTemp
ruleBinary=D2Binary8bit(ruleNumber)
#print "ruleBinary is"
#print ruleBinary
def
rule(bit1,bit2,bit3):
if bit1==
1
and bit2==
1
and bit3==
1:
return ruleBinary[
0]
if bit1==
1
and bit2==
1
and bit3==
0:
return ruleBinary[
1]
if bit1==
1
and bit2==
0
and bit3==
1:
return ruleBinary[
2]
if bit1==
1
and bit2==
0
and bit3==
0:
return ruleBinary[
3]
if bit1==
0
and bit2==
1
and bit3==
1:
return ruleBinary[
4]
if bit1==
0
and bit2==
1
and bit3==
0:
return ruleBinary[
5]
if bit1==
0
and bit2==
0
and bit3==
1:
return ruleBinary[
6]
if bit1==
0
and bit2==
0
and bit3==
0:
return ruleBinary[
7]
def
update():
temp=
''
temp=temp+
'1'
global times
global s
each=
2
while each<times*
2+
1:
temp = temp+
str(rule(
int(s[each-
2]),
int(s[each-
1]),
int(s[each])))
each+=
1
temp=temp+
'1'
s=temp
return temp
def
ini() :
t=
0
global s
while t< times*
2+
1:
if t==times:
s+=
'1'
t+=
1
else:
s+=
'0'
t+=
1
print s
def
main():
print
"P1", times*
2 +
1,times+
1
ini()
index=
0
while index < times:
print update()
index+=
1
if __name__==
'__main__':main()
-----------------------------------
对times和ruleNumber变量进行修改,可以得到不同规则(ruleNumber)下不同迭代次数(times)的结果:
如将times=3 , ruleNumber=30,本程序输出为:
P1 7 4
0001000
1011101
1010001
1011011
程序输出为这样的格式,只要利用linux 的 > 到bpm文件(Portable Bitmap),即可制作一副由该Cellular Automaton 产生的图像了。下面简要介绍一下bpm:
Portable Bitmap Format 例如,一个7*3 的bpm图像
第一行内容: P1 宽 长
P1 7 3
0001000
0011100
0110010
---
下面将程序的输出重定向到 rule30.bpm文件中:
$ python project1.py > rule30.pbm
成功后即可用一般的图像查看软件查看该图像了。 还可有修改times和ruleNumber,产生更多图案。更多Cellular Automaton 内容,请参考http://atlas.wolfram.com/TOC/