问题:有一个5X6的灯矩阵,灯按一下就亮,再按一下就熄灭。现在有这样一种情况,在这个矩阵中任意按下一盏灯它本身以及它的上、下、左、右四个位置的灯的状态也会随之改变。
例如:红色表示灯亮,白色表示灯熄灭。假设在开始时,所有的灯都是亮的,当我们按下(1,1)位置的灯,灯的状态会发生如下图变化;当我们又按下(2,5)位置的灯后,它附近的会发生如下图的变化。
代码:
import numpy as np
line = [[0] * 6] * 5
for i in range(5):
line[i] = input('请输入第' + str(i) + '行:').split(',')
# 将line中的元素转为整型
line[i] = list(map(int, line[i]))
puzzle = np.array(line)
zero = np.zeros(6)
# 在puzzle的最上面加入一行0
puzzle = np.insert(puzzle, 0, values=zero, axis=0)
# 在puzzle的最后一列加入一列0
puzzle = np.insert(puzzle, 6, values=zero, axis=1)
# 在puzzle的第0列加入一行0
puzzle = np.insert(puzzle, 0, values=zero, axis=1)
b = [[0 for col in range(8)] for row in range(6)]
press = np.array(b)
def guess():
for r in range(1, 5):
for c in range(1, 7):
press[r + 1][c] = (puzzle[r][c] + press[r][c] + press[r - 1][c] +
press[r][c - 1] + press[r][c + 1]) % 2
for c in range(1, 7):
if (press[5][c - 1] + puzzle[5][c] + press[5][c + 1] + press[4][c]) % 2 != puzzle[5][c]:
return 0
return 1
def enumeration():
while guess() == 0:
press[1][1] += 1
c = 1
while (press[1][c] > 1):
press[1][c] = 0
c += 1
press[1][c] += 1
continue
enumeration()
print("灯的初始状态:n", puzzle[1:6, 1:7])
print("按下结果为:n", puzzle[1:6, 1:7])
运行结果:
请输入第0行:1,1,0,0,1,1
请输入第1行:0,1,0,0,1,0
请输入第2行:1,1,1,0,0,0
请输入第3行:1,0,1,1,0,1
请输入第4行:0,0,0,1,1,1
灯的初始状态:
[[1 1 0 0 1 1]
[0 1 0 0 1 0]
[1 1 1 0 0 0]
[1 0 1 1 0 1]
[0 0 0 1 1 1]]
按下结果为:
[[1 1 0 0 1 1]
[0 1 0 0 1 0]
[1 1 1 0 0 0]
[1 0 1 1 0 1]
[0 0 0 1 1 1]]