点灯解密,Python 解法
修改于03/17218 浏览攻略
研究了一下点灯解密,发现严谨解法需要使用高斯消元等数学知识,过于麻烦。
退而求其次,找 AI 要了个 Python 代码。
def solve_lights(g):
if not g:return []
r,c=len(g),len(g[0])or 0
ps=[(i,j)for i in range(r)for j in range(c)if g[i][j]]
m=len(ps)
if not m:return []
a=[[int(x==i or y==j)for x,y in ps]+[1]for i,j in ps]
k=0
for d in range(m):
p=next((z for z in range(k,m)if a[z][d]),None)
if p==None:continue
a[k],a[p]=a[p],a[k]
for i in range(m):
if i!=k and a[i][d]:a[i]=[x^y if j>=d else x for j,(x,y)in enumerate(zip(a[i],a[k]))]
k+=1
if any(l[-1]for l in a[k:]):return None
s=[0]*m
for i in range(k-1,-1,-1):
c=next((j for j in range(m)if a[i][j]),-1)
if c<0:continue
s[c]^=a[i][-1]^sum(s[j]*a[i][j]for j in range(c,m))
return[(x+1,y+1)for i in range(m)if s[i]for x,y in [ps[i]]]
# 示例用法
if __name__ == "__main__":
# 测试案例
grid = [
[1, 1, 0, 1, 0],
[0, 1, 0, 1, 0],
[0, 0, 0, 0, 1],
[1, 0, 0, 1, 0],
[0, 1, 1, 0, 0]
]
result = solve_lights(grid)
print(f"需要操作的灯位坐标(1-based):{result}") if result else print("无解")