diff -r 2e65c867022c -r ccbf96145796 anks.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/anks.py Thu Dec 30 02:16:10 2010 +0100 @@ -0,0 +1,72 @@ +class Cell(object): + def __init__(self, value): + self.value = value + def __str__(self): + if self.value: + return chr(176) + else: + return chr(177) + +def iterate(grid, rule): + expanded = [Cell(False), Cell(False)] + expanded.extend(grid) + expanded.extend([Cell(False), Cell(False)]) + new_grid = [] + for i in xrange(len(expanded)-2): + triple = expanded[i:i+3] + #print [t.value for t in triple] + + if triple[0].value and triple[1].value and triple[2].value: + new_grid.append(Cell(rule[7])) + elif triple[0].value and triple[1].value: + new_grid.append(Cell(rule[6])) + elif triple[0].value and triple[2].value: + new_grid.append(Cell(rule[5])) + elif triple[0].value: + new_grid.append(Cell(rule[4])) + elif triple[1].value and triple[2].value: + new_grid.append(Cell(rule[3])) + elif triple[1].value: + new_grid.append(Cell(rule[2])) + elif triple[2].value: + new_grid.append(Cell(rule[1])) + else: + new_grid.append(Cell(rule[0])) + return new_grid + +def show(grid, max_cells): + import sys + padding_left = int(0.5 + max_cells - len(grid)) / 2 + padding_right = (max_cells - len(grid)) / 2 + for i in xrange(padding_left): + sys.stdout.write(chr(178)) + for cell in grid: + sys.stdout.write(str(cell)) + for i in xrange(padding_right): + sys.stdout.write(chr(178)) + print + +def gen_rule(i): + rule = [] + v = i + for x in range(8): + rule.append(v - v/2*2) + v = v/2 + return rule + +def main(): + import time + + max_iter = 150 + max_cells = max_iter * 2 + 1 + for i in xrange(255): + rule = gen_rule(i) + print "rule %i" % i + grid = [Cell(True)] + for i in range(max_iter): + show(grid, max_cells) + grid = iterate(grid, rule) + #time.sleep(2) + +if __name__ == "__main__": + main()