Advertisement
informaticage

Cyber Challenge Infection

Feb 3rd, 2021
1,566
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.15 KB | None | 0 0
  1. import sys
  2.  
  3. def is_valid(i, j, N, M):
  4.     return i >= 0 and i < N and j >= 0 and j < M
  5.  
  6. def get_neighbors(i, j, N, M):
  7.     neighbors = [
  8.         (i - 1, j),
  9.         (i + 1, j),
  10.         (i, j + 1),
  11.         (i, j - 1),
  12.         (i + 1, j + 1),
  13.         (i - 1, j - 1),
  14.         (i + 1, j - 1),
  15.         (i - 1, j + 1),
  16.     ]
  17.  
  18.     return [x if is_valid(x[0], x[1], N, M) else None for x in neighbors]
  19.  
  20. def get_categories_amount(neighbors, field):
  21.     malware = 0 # *
  22.     data = 0 # +
  23.  
  24.     for neighbour in neighbors:
  25.         if(neighbour is not None):
  26.             if(field[neighbour[0]][neighbour[1]] == '*'):
  27.                 malware += 1
  28.  
  29.             if(field[neighbour[0]][neighbour[1]] == '+'):
  30.                 data += 1
  31.  
  32.     return [malware, data]
  33.  
  34. def make_choice(neighbors_categories, my_self):
  35.     [malwares, data] = neighbors_categories
  36.    
  37.     if(my_self == '.'):
  38.         if((data + malwares) > 4):
  39.             return '+'
  40.  
  41.     if(my_self == '+'):
  42.         if((data + malwares) > 4):
  43.             return '*'
  44.         if((data + malwares) < 4):
  45.             return '.'
  46.    
  47.     if(my_self == '*'):
  48.         if((data + malwares) > 4):
  49.             return '+'
  50.         if((data + malwares) < 4):
  51.             return '.'
  52.  
  53.     return my_self
  54.  
  55. def print_field(field):
  56.     for r in field:
  57.         print("".join(r))
  58.  
  59. def clone_field(field, N, M):
  60.     next_field = [(['#'] * M) for _ in range(N)]
  61.     for i in range(N):
  62.         for j in range(M):
  63.             next_field[i][j] = field[i][j]
  64.    
  65.     return next_field
  66.  
  67. def solve(fin):
  68.     (N, M, K) = map(int, fin.readline().strip().split())
  69.     g = []
  70.     for _ in range(N):
  71.         g.append(list(fin.readline().strip()))
  72.  
  73.     next_field = [(['#'] * M) for _ in range(N)]
  74.     for _ in range(K):
  75.         for i in range(N):
  76.             for j in range(M):
  77.                 neighbors = get_neighbors(i, j, N, M)
  78.                 neighbors_categories = get_categories_amount(neighbors, g)
  79.                 next_field[i][j] = make_choice(neighbors_categories, g[i][j])
  80.         g = clone_field(next_field, N, M)
  81.  
  82.     print_field(next_field)
  83.  
  84. if __name__ == "__main__":
  85.     solve(sys.stdin)
  86.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement