author | Eugen Sawin <sawine@me73.com> |
Thu, 30 Dec 2010 14:22:05 +0100 | |
changeset 3 | 89d76549ba6e |
permissions | -rw-r--r-- |
sawine@2 | 1 |
class Cell(object): |
sawine@2 | 2 |
def __init__(self, value): |
sawine@2 | 3 |
self.value = value |
sawine@2 | 4 |
def __str__(self): |
sawine@2 | 5 |
if self.value: |
sawine@2 | 6 |
return chr(176) |
sawine@2 | 7 |
else: |
sawine@2 | 8 |
return chr(177) |
sawine@2 | 9 |
|
sawine@2 | 10 |
def iterate(grid, rule): |
sawine@2 | 11 |
expanded = [Cell(False), Cell(False)] |
sawine@2 | 12 |
expanded.extend(grid) |
sawine@2 | 13 |
expanded.extend([Cell(False), Cell(False)]) |
sawine@2 | 14 |
new_grid = [] |
sawine@2 | 15 |
for i in xrange(len(expanded)-2): |
sawine@2 | 16 |
triple = expanded[i:i+3] |
sawine@2 | 17 |
#print [t.value for t in triple] |
sawine@2 | 18 |
|
sawine@2 | 19 |
if triple[0].value and triple[1].value and triple[2].value: |
sawine@2 | 20 |
new_grid.append(Cell(rule[7])) |
sawine@2 | 21 |
elif triple[0].value and triple[1].value: |
sawine@2 | 22 |
new_grid.append(Cell(rule[6])) |
sawine@2 | 23 |
elif triple[0].value and triple[2].value: |
sawine@2 | 24 |
new_grid.append(Cell(rule[5])) |
sawine@2 | 25 |
elif triple[0].value: |
sawine@2 | 26 |
new_grid.append(Cell(rule[4])) |
sawine@2 | 27 |
elif triple[1].value and triple[2].value: |
sawine@2 | 28 |
new_grid.append(Cell(rule[3])) |
sawine@2 | 29 |
elif triple[1].value: |
sawine@2 | 30 |
new_grid.append(Cell(rule[2])) |
sawine@2 | 31 |
elif triple[2].value: |
sawine@2 | 32 |
new_grid.append(Cell(rule[1])) |
sawine@2 | 33 |
else: |
sawine@2 | 34 |
new_grid.append(Cell(rule[0])) |
sawine@2 | 35 |
return new_grid |
sawine@2 | 36 |
|
sawine@2 | 37 |
def show(grid, max_cells): |
sawine@2 | 38 |
import sys |
sawine@2 | 39 |
padding_left = int(0.5 + max_cells - len(grid)) / 2 |
sawine@2 | 40 |
padding_right = (max_cells - len(grid)) / 2 |
sawine@2 | 41 |
for i in xrange(padding_left): |
sawine@2 | 42 |
sys.stdout.write(chr(178)) |
sawine@2 | 43 |
for cell in grid: |
sawine@2 | 44 |
sys.stdout.write(str(cell)) |
sawine@2 | 45 |
for i in xrange(padding_right): |
sawine@2 | 46 |
sys.stdout.write(chr(178)) |
sawine@2 | 47 |
|
sawine@2 | 48 |
|
sawine@2 | 49 |
def gen_rule(i): |
sawine@2 | 50 |
rule = [] |
sawine@2 | 51 |
v = i |
sawine@2 | 52 |
for x in range(8): |
sawine@2 | 53 |
rule.append(v - v/2*2) |
sawine@2 | 54 |
v = v/2 |
sawine@2 | 55 |
return rule |
sawine@2 | 56 |
|
sawine@2 | 57 |
def main(): |
sawine@2 | 58 |
import time |
sawine@2 | 59 |
|
sawine@2 | 60 |
max_iter = 150 |
sawine@2 | 61 |
max_cells = max_iter * 2 + 1 |
sawine@2 | 62 |
for i in xrange(255): |
sawine@2 | 63 |
rule = gen_rule(i) |
sawine@2 | 64 |
print "rule %i" % i |
sawine@2 | 65 |
grid = [Cell(True)] |
sawine@2 | 66 |
for i in range(max_iter): |
sawine@2 | 67 |
show(grid, max_cells) |
sawine@2 | 68 |
grid = iterate(grid, rule) |
sawine@2 | 69 |
#time.sleep(2) |
sawine@2 | 70 |
|
sawine@2 | 71 |
if __name__ == "__main__": |
sawine@2 | 72 |
main() |