1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/anks.py Thu Dec 30 02:16:10 2010 +0100
1.3 @@ -0,0 +1,72 @@
1.4 +class Cell(object):
1.5 + def __init__(self, value):
1.6 + self.value = value
1.7 + def __str__(self):
1.8 + if self.value:
1.9 + return chr(176)
1.10 + else:
1.11 + return chr(177)
1.12 +
1.13 +def iterate(grid, rule):
1.14 + expanded = [Cell(False), Cell(False)]
1.15 + expanded.extend(grid)
1.16 + expanded.extend([Cell(False), Cell(False)])
1.17 + new_grid = []
1.18 + for i in xrange(len(expanded)-2):
1.19 + triple = expanded[i:i+3]
1.20 + #print [t.value for t in triple]
1.21 +
1.22 + if triple[0].value and triple[1].value and triple[2].value:
1.23 + new_grid.append(Cell(rule[7]))
1.24 + elif triple[0].value and triple[1].value:
1.25 + new_grid.append(Cell(rule[6]))
1.26 + elif triple[0].value and triple[2].value:
1.27 + new_grid.append(Cell(rule[5]))
1.28 + elif triple[0].value:
1.29 + new_grid.append(Cell(rule[4]))
1.30 + elif triple[1].value and triple[2].value:
1.31 + new_grid.append(Cell(rule[3]))
1.32 + elif triple[1].value:
1.33 + new_grid.append(Cell(rule[2]))
1.34 + elif triple[2].value:
1.35 + new_grid.append(Cell(rule[1]))
1.36 + else:
1.37 + new_grid.append(Cell(rule[0]))
1.38 + return new_grid
1.39 +
1.40 +def show(grid, max_cells):
1.41 + import sys
1.42 + padding_left = int(0.5 + max_cells - len(grid)) / 2
1.43 + padding_right = (max_cells - len(grid)) / 2
1.44 + for i in xrange(padding_left):
1.45 + sys.stdout.write(chr(178))
1.46 + for cell in grid:
1.47 + sys.stdout.write(str(cell))
1.48 + for i in xrange(padding_right):
1.49 + sys.stdout.write(chr(178))
1.50 + print
1.51 +
1.52 +def gen_rule(i):
1.53 + rule = []
1.54 + v = i
1.55 + for x in range(8):
1.56 + rule.append(v - v/2*2)
1.57 + v = v/2
1.58 + return rule
1.59 +
1.60 +def main():
1.61 + import time
1.62 +
1.63 + max_iter = 150
1.64 + max_cells = max_iter * 2 + 1
1.65 + for i in xrange(255):
1.66 + rule = gen_rule(i)
1.67 + print "rule %i" % i
1.68 + grid = [Cell(True)]
1.69 + for i in range(max_iter):
1.70 + show(grid, max_cells)
1.71 + grid = iterate(grid, rule)
1.72 + #time.sleep(2)
1.73 +
1.74 +if __name__ == "__main__":
1.75 + main()