anks.py
author Eugen Sawin <sawine@me73.com>
Thu, 30 Dec 2010 15:19:36 +0100
changeset 5 dd036093fc09
permissions -rw-r--r--
More efficient grid iteration.
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
	print
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()