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