sawine@2: class Cell(object): sawine@2: def __init__(self, value): sawine@2: self.value = value sawine@2: def __str__(self): sawine@2: if self.value: sawine@2: return chr(176) sawine@2: else: sawine@2: return chr(177) sawine@2: sawine@2: def iterate(grid, rule): sawine@2: expanded = [Cell(False), Cell(False)] sawine@2: expanded.extend(grid) sawine@2: expanded.extend([Cell(False), Cell(False)]) sawine@2: new_grid = [] sawine@2: for i in xrange(len(expanded)-2): sawine@2: triple = expanded[i:i+3] sawine@2: #print [t.value for t in triple] sawine@2: sawine@2: if triple[0].value and triple[1].value and triple[2].value: sawine@2: new_grid.append(Cell(rule[7])) sawine@2: elif triple[0].value and triple[1].value: sawine@2: new_grid.append(Cell(rule[6])) sawine@2: elif triple[0].value and triple[2].value: sawine@2: new_grid.append(Cell(rule[5])) sawine@2: elif triple[0].value: sawine@2: new_grid.append(Cell(rule[4])) sawine@2: elif triple[1].value and triple[2].value: sawine@2: new_grid.append(Cell(rule[3])) sawine@2: elif triple[1].value: sawine@2: new_grid.append(Cell(rule[2])) sawine@2: elif triple[2].value: sawine@2: new_grid.append(Cell(rule[1])) sawine@2: else: sawine@2: new_grid.append(Cell(rule[0])) sawine@2: return new_grid sawine@2: sawine@2: def show(grid, max_cells): sawine@2: import sys sawine@2: padding_left = int(0.5 + max_cells - len(grid)) / 2 sawine@2: padding_right = (max_cells - len(grid)) / 2 sawine@2: for i in xrange(padding_left): sawine@2: sys.stdout.write(chr(178)) sawine@2: for cell in grid: sawine@2: sys.stdout.write(str(cell)) sawine@2: for i in xrange(padding_right): sawine@2: sys.stdout.write(chr(178)) sawine@2: print sawine@2: sawine@2: def gen_rule(i): sawine@2: rule = [] sawine@2: v = i sawine@2: for x in range(8): sawine@2: rule.append(v - v/2*2) sawine@2: v = v/2 sawine@2: return rule sawine@2: sawine@2: def main(): sawine@2: import time sawine@2: sawine@2: max_iter = 150 sawine@2: max_cells = max_iter * 2 + 1 sawine@2: for i in xrange(255): sawine@2: rule = gen_rule(i) sawine@2: print "rule %i" % i sawine@2: grid = [Cell(True)] sawine@2: for i in range(max_iter): sawine@2: show(grid, max_cells) sawine@2: grid = iterate(grid, rule) sawine@2: #time.sleep(2) sawine@2: sawine@2: if __name__ == "__main__": sawine@2: main()