Документ взят из кэша поисковой машины. Адрес оригинального документа : http://kodomo.fbb.msu.ru/hg/cca/annotate/38f357feb56e/Automata.py
Дата изменения: Unknown
Дата индексирования: Fri Feb 28 22:52:04 2014
Кодировка:
cca: Automata.py annotate

cca

annotate Automata.py @ 17:38f357feb56e

Corrections in Automata and change_size: up and down
author darkhan
date Sat, 04 Dec 2010 22:38:04 +0300
parents a40cbd127d39
children eef739e055f4
rev   line source
Ilia@1 1 class Automata(object):
darkhan@11 2 #field[][] - ?????? ?????? ?????????
Ilia@1 3 #states[]
darkhan@11 4 #symbols = {} - ??????: ?????_?_states
darkhan@11 5
darkhan@11 6 def __init__(self, width, height, states):
darkhan@11 7 self.width = width
darkhan@11 8 self.height = height
darkhan@11 9 self.states = states
darkhan@11 10 self.symbols = {}
darkhan@11 11 for num, st in enumerate(self.states):
darkhan@11 12 self.symbols[st.symbol] = num
darkhan@11 13 self.field = []
darkhan@11 14 for row in range(height):
darkhan@11 15 self.field.append([])
darkhan@11 16 for col in range(width):
darkhan@11 17 self.field[row].append(states[0].symbol)
darkhan@11 18
darkhan@17 19 def next_step(self):
darkhan@11 20 new_state = []
darkhan@11 21 for row in range(self.height):
darkhan@11 22 new_state.append([])
darkhan@11 23 for col in range(self.width):
darkhan@11 24 symbol = field[row][col]
darkhan@11 25 num = 0
darkhan@11 26 for vert_long in range(row + self.height - 1,
darkhan@11 27 row + self.height + 2):
darkhan@11 28 for horiz_long in range(col + self.width - 1,
darkhan@11 29 col + self.width + 2):
darkhan@11 30 vert = vert_long % self.height
darkhan@11 31 horiz = horiz_long % self.width
darkhan@11 32 if (vert == row) & (horiz = col): continue
darkhan@11 33 if self.field[vert][horiz] == symbol:
darkhan@11 34 num += 1
darkhan@11 35 new_state[row].append(
darkhan@11 36 self.states[self.symbols[symbol]].next_state(num))
darkhan@11 37
darkhan@11 38 for row in range(self.height):
darkhan@11 39 for col in range(self.width):
darkhan@11 40 if new_state[row][col]:
darkhan@11 41 self.field[row][col] = self.states[(self.symbols[symbol]
darkhan@11 42 + 1) % len(states)].symbol
darkhan@11 43
darkhan@17 44 def change_size(self, value, side):
darkhan@17 45 "0-up, 1-right, 2-down, 3-left"
darkhan@17 46 new_field = []
darkhan@17 47 if side == 0:
darkhan@17 48 self.height += value
darkhan@17 49 for row in range(value):
darkhan@17 50 new_field.append([])
darkhan@17 51 for col in range(self.width):
darkhan@17 52 new_field[row].append(states[0].symbol)
darkhan@17 53 for row in range(value, self.height):
darkhan@17 54 if row < 0: continue
darkhan@17 55 new_field.append([])
darkhan@17 56 for col in range(self.width):
darkhan@17 57 new_field[row].append(self.field[row - value][col])
darkhan@17 58 if side == 2:
darkhan@17 59 self.height += value
darkhan@17 60 for row in range(0, self.height):
darkhan@17 61 if row > self.height + value - 1: continue
darkhan@17 62 new_field.append([])
darkhan@17 63 for col in range(self.width):
darkhan@17 64 new_field[row].append(self.field[row][col])
darkhan@17 65 for row in range(self.height, self.height + value):
darkhan@17 66 new_field.append([])
darkhan@17 67 for col in range(self.width):
darkhan@17 68 new_field[row].append(states[0].symbol)