1.1 --- a/cau/automat.py Thu Dec 30 18:31:19 2010 +0100
1.2 +++ b/cau/automat.py Fri Dec 31 02:56:40 2010 +0100
1.3 @@ -3,53 +3,21 @@
1.4 import rules
1.5 import gridmarshal as marshal
1.6 from grid import Grid
1.7 +import argparse
1.8
1.9 -def ruleTest():
1.10 - rule = rules.Rule()
1.11 +configs = {rules.Rule1: (((0, 0), 1), ((-1, 0), 1), ((1, 0), 1), ((0, 1), 1),
1.12 +((0, -1), 1)),
1.13 +rules.Rule2: (((0, 0), 1), ((-1, 0), 1), ((1, 0), 1), ((0, 1), 1), ((0, -1), 1)),
1.14 +rules.PotentialGrowth: (((0, 0), 4),)}
1.15 +
1.16 +rulemap = {"1": rules.Rule1, "2": rules.Rule2, "3": rules.PotentialGrowth}
1.17 +
1.18 +def main(rule, iterations, dumpfile):
1.19 grid = Grid()
1.20 - grid.set((0, 0))
1.21 - grid.set((0, 1)).set((1, 0)).set((0, -1)).set((-1, 0))
1.22 + for pos, value in configs[type(rule)]:
1.23 + grid.set(pos, value)
1.24 +
1.25
1.26 -
1.27 - print "iteration radius(diff) area(diff) pi"
1.28 -
1.29 - iterations = int(sys.argv[1])
1.30 -
1.31 - for i in range(iterations):
1.32 - A = len(grid)
1.33 - r = grid.width() / 2.0
1.34 - r_ideal = math.sqrt(A / math.pi)
1.35 - A_ideal = r**2 * math.pi
1.36 - pi = A / r**2
1.37 - print "%i %f(%f) %i(%i) %f" % (i, r, r - r_ideal,
1.38 - A, A - A_ideal, pi)
1.39 -
1.40 - grid = rule.iterate(grid)
1.41 - marshal.dumpGrid(grid, "grid.cfg")
1.42 - #print
1.43 -
1.44 -def rule2Test():
1.45 - rule = rules.Rule2()
1.46 - grid = Grid()
1.47 - grid.set((0, 0)).set((-1, 0)).set((0, 1))
1.48 - olda = 1
1.49 -
1.50 - iterations = int(sys.argv[1])
1.51 -
1.52 - for i in range(iterations):
1.53 - a = (float(len(grid)) - grid.width()) * 4.0
1.54 - pi = 1.0 / ((grid.width()-1)**2 / ((a + olda) / 2.0))
1.55 - print i, grid.width(), len(grid), pi
1.56 - grid = rule.iterate(grid)
1.57 - olda = a
1.58 - marshal.dumpGrid(grid, "grid.cfg")
1.59 -
1.60 -def potentialTest():
1.61 - rule = rules.PotentialGrowth()
1.62 - grid = Grid()
1.63 - grid.set((0, 0), 4)
1.64 -
1.65 - iterations = int(sys.argv[1])
1.66 last_pi = 3.0
1.67 for i in range(iterations):
1.68 A = len(grid)
1.69 @@ -61,14 +29,14 @@
1.70 last_pi = pi
1.71 print "%i %f(%f) %i(%i) %f" % (i, r, r - r_ideal,
1.72 A, A - A_ideal, pi)
1.73 -
1.74 grid = rule.iterate(grid)
1.75 - marshal.dumpGrid(grid, "grid.cfg")
1.76 -
1.77 -def main():
1.78 - #ruleTest()
1.79 - #rule2Test()
1.80 - potentialTest()
1.81 + if dumpfile:
1.82 + marshal.dumpGrid(grid, dumpfile)
1.83
1.84 if __name__ == "__main__":
1.85 - main()
1.86 + parser = argparse.ArgumentParser(description="cellular automaton.")
1.87 + parser.add_argument("iterations", type=int, help="number of iterations")
1.88 + parser.add_argument("--rule", "-r", default="3")
1.89 + parser.add_argument("--persistent", "-p")
1.90 + args = parser.parse_args()
1.91 + main(rulemap[args.rule](), args.iterations, args.persistent)