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)
|