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