Напишите программу, вычисляющую следующее состояние поля для Game of life.
Поле представляет собой прямоугольник, причём для крайних клеток поля соседними являются клетки с противоположного конца (поле представляет собой тор).
Формат ввода:
На первой строке указаны два целых числа через пробел -- высота и ширина поля.
В следующих строках подаётся состояние поля. Точка "." обозначает мёртвую клетку, символ "X" − живую.
Формат вывода:
Следующее состояние поля, используя те же обозначения, что использовались на вводе.
Поле представляет собой прямоугольник, причём для крайних клеток поля соседними являются клетки с противоположного конца (поле представляет собой тор).
Формат ввода:
На первой строке указаны два целых числа через пробел -- высота и ширина поля.
В следующих строках подаётся состояние поля. Точка "." обозначает мёртвую клетку, символ "X" − живую.
Формат вывода:
Следующее состояние поля, используя те же обозначения, что использовались на вводе.
Sample Input 1:
5 5 ..... ..X.. ...X. .XXX. .....
Sample Output 1:
..... ..... .X.X. ..XX. ..X..
Sample Input 2:
5 5 ..... ..... .XXX. ..... .....
Sample Output 2:
..... ..X.. ..X.. ..X.. .....
Sample Input 3:
5 6 ...XX. .XX... ..X... XX.... X..XX.
Sample Output 3:
.X..XX .XX... X.X... XXXX.X XXXXX.
1
a = list(map(int,input().split()))
2
def is_life(x,y):
3
if b[x][y]=="X":
4
return True
5
else:
6
return False
7
def find_life(x,y):
8
sum=0
9
if is_life((x+1)%a[0],y):
10
sum+=1
11
if is_life(x-1,y):
12
sum+=1
13
if is_life(x,(y+1)%a[1]):
14
sum+=1
15
if is_life(x,y-1):
16
sum+=1
17
if is_life((x+1)%a[0],(y+1)%a[1]):
18
sum+=1
19
if is_life(x-1,y-1):
20
sum+=1
21
if is_life(x-1,(y+1)%a[1]):
22
sum+=1
23
if is_life((x+1)%a[0],y-1):
24
sum+=1
25
if sum==3 and b[x][y]==".":
26
return 'X'
27
elif (sum==2 or sum==3) and b[x][y]=="X":
28
return 'X'
29
else:
30
return '.'
31
b=[]
32
for i in range (a[0]):
33
b+=[list(input())]
34
for i in range(len(b)):
35
for j in range(len(b[i])):
36
print(find_life(i,j),end="")
37
print()
Немає коментарів:
Дописати коментар