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