問題:有一個5X6的燈矩陣,燈按一下就亮,再按一下就熄滅?,F在有這樣一種情況,在這個矩陣中任意按下一盞燈它本身以及它的上、下、左、右四個位置的燈的狀態也會隨之改變。
例如:紅色表示燈亮,白色表示燈熄滅。假設在開始時,所有的燈都是亮的,當我們按下(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]]