cau/automat.py
author Eugen Sawin <sawine@me73.com>
Sun, 09 Jan 2011 16:23:29 +0100
changeset 10 808a8eb53a60
parent 7 95ea605276a3
child 11 a131769728f1
permissions -rw-r--r--
Everything ok again.
     1 import sys
     2 import math
     3 import rules
     4 import gridmarshal as marshal
     5 from grid import Grid
     6 import argparse
     7 
     8 configs = {rules.Rule1: (((0, 0), 1), ((-1, 0), 1), ((1, 0), 1), ((0, 1), 1), 
     9 ((0, -1), 1)), 
    10 rules.Rule2: (((0, 0), 1), ((-1, 0), 1), ((1, 0), 1), ((0, 1), 1), ((0, -1), 1)),
    11 rules.PotentialGrowth: (((0, 0), 4),)}
    12 
    13 rulemap = {"1": rules.Rule1, "2": rules.Rule2, "3": rules.PotentialGrowth}
    14 
    15 def main(rule, iterations, dumpfile):
    16 	grid = Grid()
    17 	for pos, value in configs[type(rule)]:
    18 		grid.set(pos, value)
    19 
    20 	
    21 	last_pi = 3.0
    22 	for i in range(iterations):
    23 		A = len(grid)
    24 		r = grid.width() / 4.0 + grid.height() / 4.0
    25 		r_ideal = math.sqrt(A / math.pi)
    26 		A_ideal = r**2 * math.pi
    27 		pi = A / r**2
    28 		pi = (pi + last_pi) / 2.0
    29 		last_pi = pi
    30 		print "%i %f(%f) %i(%i) %f" % (i, r, r - r_ideal, 
    31 										A, A - A_ideal, pi)
    32 		grid = rule.iterate(grid)
    33 		if dumpfile:
    34 			marshal.dumpGrid(grid, dumpfile)
    35 
    36 if __name__ == "__main__":
    37 	parser = argparse.ArgumentParser(description="cellular automaton.")
    38 	parser.add_argument("iterations", type=int, help="number of iterations")
    39 	parser.add_argument("--rule", "-r", default="3")
    40 	parser.add_argument("--persistent", "-p")
    41 	args = parser.parse_args()
    42 	main(rulemap[args.rule](), args.iterations, args.persistent)