Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import sys
- def is_valid(i, j, N, M):
- return i >= 0 and i < N and j >= 0 and j < M
- def get_neighbors(i, j, N, M):
- neighbors = [
- (i - 1, j),
- (i + 1, j),
- (i, j + 1),
- (i, j - 1),
- (i + 1, j + 1),
- (i - 1, j - 1),
- (i + 1, j - 1),
- (i - 1, j + 1),
- ]
- return [x if is_valid(x[0], x[1], N, M) else None for x in neighbors]
- def get_categories_amount(neighbors, field):
- malware = 0 # *
- data = 0 # +
- for neighbour in neighbors:
- if(neighbour is not None):
- if(field[neighbour[0]][neighbour[1]] == '*'):
- malware += 1
- if(field[neighbour[0]][neighbour[1]] == '+'):
- data += 1
- return [malware, data]
- def make_choice(neighbors_categories, my_self):
- [malwares, data] = neighbors_categories
- if(my_self == '.'):
- if((data + malwares) > 4):
- return '+'
- if(my_self == '+'):
- if((data + malwares) > 4):
- return '*'
- if((data + malwares) < 4):
- return '.'
- if(my_self == '*'):
- if((data + malwares) > 4):
- return '+'
- if((data + malwares) < 4):
- return '.'
- return my_self
- def print_field(field):
- for r in field:
- print("".join(r))
- def clone_field(field, N, M):
- next_field = [(['#'] * M) for _ in range(N)]
- for i in range(N):
- for j in range(M):
- next_field[i][j] = field[i][j]
- return next_field
- def solve(fin):
- (N, M, K) = map(int, fin.readline().strip().split())
- g = []
- for _ in range(N):
- g.append(list(fin.readline().strip()))
- next_field = [(['#'] * M) for _ in range(N)]
- for _ in range(K):
- for i in range(N):
- for j in range(M):
- neighbors = get_neighbors(i, j, N, M)
- neighbors_categories = get_categories_amount(neighbors, g)
- next_field[i][j] = make_choice(neighbors_categories, g[i][j])
- g = clone_field(next_field, N, M)
- print_field(next_field)
- if __name__ == "__main__":
- solve(sys.stdin)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement