cau/automat.py
changeset 8 0db344245ac2
parent 7 95ea605276a3
child 11 a131769728f1
     1.1 --- a/cau/automat.py	Thu Dec 30 18:31:19 2010 +0100
     1.2 +++ b/cau/automat.py	Fri Dec 31 02:56:40 2010 +0100
     1.3 @@ -3,53 +3,21 @@
     1.4  import rules
     1.5  import gridmarshal as marshal
     1.6  from grid import Grid
     1.7 +import argparse
     1.8  
     1.9 -def ruleTest():
    1.10 -	rule = rules.Rule()
    1.11 +configs = {rules.Rule1: (((0, 0), 1), ((-1, 0), 1), ((1, 0), 1), ((0, 1), 1), 
    1.12 +((0, -1), 1)), 
    1.13 +rules.Rule2: (((0, 0), 1), ((-1, 0), 1), ((1, 0), 1), ((0, 1), 1), ((0, -1), 1)),
    1.14 +rules.PotentialGrowth: (((0, 0), 4),)}
    1.15 +
    1.16 +rulemap = {"1": rules.Rule1, "2": rules.Rule2, "3": rules.PotentialGrowth}
    1.17 +
    1.18 +def main(rule, iterations, dumpfile):
    1.19  	grid = Grid()
    1.20 -	grid.set((0, 0))
    1.21 -	grid.set((0, 1)).set((1, 0)).set((0, -1)).set((-1, 0))
    1.22 +	for pos, value in configs[type(rule)]:
    1.23 +		grid.set(pos, value)
    1.24 +
    1.25  	
    1.26 -	
    1.27 -	print "iteration radius(diff) area(diff) pi"
    1.28 -
    1.29 -	iterations = int(sys.argv[1])
    1.30 -
    1.31 -	for i in range(iterations):
    1.32 -		A = len(grid)
    1.33 -		r = grid.width() / 2.0
    1.34 -		r_ideal = math.sqrt(A / math.pi)
    1.35 -		A_ideal = r**2 * math.pi
    1.36 -		pi = A / r**2
    1.37 -		print "%i %f(%f) %i(%i) %f" % (i, r, r - r_ideal, 
    1.38 -										A, A - A_ideal, pi)
    1.39 -
    1.40 -		grid = rule.iterate(grid)
    1.41 -		marshal.dumpGrid(grid, "grid.cfg")
    1.42 -		#print
    1.43 -
    1.44 -def rule2Test():
    1.45 -	rule = rules.Rule2()
    1.46 -	grid = Grid()
    1.47 -	grid.set((0, 0)).set((-1, 0)).set((0, 1))
    1.48 -	olda = 1
    1.49 -
    1.50 -	iterations = int(sys.argv[1])
    1.51 -
    1.52 -	for i in range(iterations):
    1.53 -		a =  (float(len(grid)) - grid.width()) * 4.0
    1.54 -		pi = 1.0 / ((grid.width()-1)**2 / ((a + olda) / 2.0))
    1.55 -		print i, grid.width(), len(grid), pi
    1.56 -		grid = rule.iterate(grid)
    1.57 -		olda = a
    1.58 -		marshal.dumpGrid(grid, "grid.cfg")
    1.59 -
    1.60 -def potentialTest():
    1.61 -	rule = rules.PotentialGrowth()
    1.62 -	grid = Grid()
    1.63 -	grid.set((0, 0), 4)
    1.64 -
    1.65 -	iterations = int(sys.argv[1])
    1.66  	last_pi = 3.0
    1.67  	for i in range(iterations):
    1.68  		A = len(grid)
    1.69 @@ -61,14 +29,14 @@
    1.70  		last_pi = pi
    1.71  		print "%i %f(%f) %i(%i) %f" % (i, r, r - r_ideal, 
    1.72  										A, A - A_ideal, pi)
    1.73 -
    1.74  		grid = rule.iterate(grid)
    1.75 -		marshal.dumpGrid(grid, "grid.cfg")
    1.76 -
    1.77 -def main():
    1.78 -	#ruleTest()
    1.79 -	#rule2Test()
    1.80 -	potentialTest()
    1.81 +		if dumpfile:
    1.82 +			marshal.dumpGrid(grid, dumpfile)
    1.83  
    1.84  if __name__ == "__main__":
    1.85 -	main()
    1.86 +	parser = argparse.ArgumentParser(description="cellular automaton.")
    1.87 +	parser.add_argument("iterations", type=int, help="number of iterations")
    1.88 +	parser.add_argument("--rule", "-r", default="3")
    1.89 +	parser.add_argument("--persistent", "-p")
    1.90 +	args = parser.parse_args()
    1.91 +	main(rulemap[args.rule](), args.iterations, args.persistent)