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