cca
annotate Automata.py @ 11:a40cbd127d39
Deleted key from States. Automata: symbols{}, init, next_step. A little modifications for PEP-8
| author | darkhan<darkhan.rus@gmail.com> |
|---|---|
| date | Sat, 04 Dec 2010 21:22:08 +0300 |
| parents | c86adbd7d440 |
| children | 38f357feb56e |
| 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@11 | 19 def next_step(): |
| 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@11 | 44 def change_size(value, side): |
| Ilia@1 | 45 pass |
| darkhan@11 | 46 |
| darkhan@11 | 47 def contain_state(symbol): |
| is_rusinov@3 | 48 return False |
