sawine@7: import sys sawine@7: import math sawine@7: import rules sawine@7: import gridmarshal as marshal sawine@7: from grid import Grid sawine@8: import argparse sawine@7: sawine@8: configs = {rules.Rule1: (((0, 0), 1), ((-1, 0), 1), ((1, 0), 1), ((0, 1), 1), sawine@8: ((0, -1), 1)), sawine@8: rules.Rule2: (((0, 0), 1), ((-1, 0), 1), ((1, 0), 1), ((0, 1), 1), ((0, -1), 1)), sawine@8: rules.PotentialGrowth: (((0, 0), 4),)} sawine@8: sawine@8: rulemap = {"1": rules.Rule1, "2": rules.Rule2, "3": rules.PotentialGrowth} sawine@8: sawine@8: def main(rule, iterations, dumpfile): sawine@7: grid = Grid() sawine@8: for pos, value in configs[type(rule)]: sawine@8: grid.set(pos, value) sawine@8: sawine@7: sawine@7: last_pi = 3.0 sawine@7: for i in range(iterations): sawine@7: A = len(grid) sawine@7: r = grid.width() / 4.0 + grid.height() / 4.0 sawine@7: r_ideal = math.sqrt(A / math.pi) sawine@7: A_ideal = r**2 * math.pi sawine@7: pi = A / r**2 sawine@7: pi = (pi + last_pi) / 2.0 sawine@7: last_pi = pi sawine@7: print "%i %f(%f) %i(%i) %f" % (i, r, r - r_ideal, sawine@7: A, A - A_ideal, pi) sawine@7: grid = rule.iterate(grid) sawine@8: if dumpfile: sawine@8: marshal.dumpGrid(grid, dumpfile) sawine@7: sawine@7: if __name__ == "__main__": sawine@8: parser = argparse.ArgumentParser(description="cellular automaton.") sawine@8: parser.add_argument("iterations", type=int, help="number of iterations") sawine@8: parser.add_argument("--rule", "-r", default="3") sawine@8: parser.add_argument("--persistent", "-p") sawine@8: args = parser.parse_args() sawine@8: main(rulemap[args.rule](), args.iterations, args.persistent)