快来快来学一学
--点灯游戏 2-15求解
--N*N,解法遍历,储存
local A={}
local B={}
local C={}
local N=0
local t=""
local s=0
local function addt()
local t=N.."*"..N.."灯变化记录面板\n"
for k,v in ipairs(A)
if k%N==0 then t=t..v.." \n"
else
t=t..v.." "
end
end
t=t..N.."*"..N.."点击记录面板\n"
for k,v in ipairs(B)
if k%N==0 then t=t..v.." \n"
else
t=t..v.." "
end
end
t=t.."----------------------------------\n"
print(t)
end
function add(n)
local c = {}
for ii=N,0,-1 do
c[#c+1] = math.floor(n / 2^ii)
n = n % 2^ii
end
-- print(unpack(c))
return c
end
local function add3(i)
A[i]=-A[i]
if i%N==0 then A[i-1]=-A[i-1]
elseif i%N==1 then A[i+1]=-A[i+1]
else A[i-1]=-A[i-1] A[i+1]=-A[i+1]
end
if math.ceil(i/N)==N then A[i-N]=-A[i-N]
elseif math.ceil(i/N)==1 then A[i+N]=-A[i+N]
else A[i-N]=-A[i-N] A[i+N]=-A[i+N]
end
end
local function add1()
for i=1,N*N do
A[i]=-1
B[i]=0
end
end
local function add2(v)
add1()
for i=1,N do
if v[i+1]==0 then
else B[i]=1 add3(i)
end
end
for j=N+1,N*N do
if A[j-N]==-1 then B[j]=1 add3(j)
end
end
for k,v in ipairs(A)
if v==-1 then return
end
end
print(table.concat(v))
addt()
end
local function add0()
if N>15 then return end
for i=1,2^N do
C[i]=add(i)
--print(table.concat(C[i]))
end
for k,v in ipairs(C) do
--print(table.concat(v))
add2(v)
end
end
--add1()
--addt()
for s0=2,15 do
N=s0
add1()
addt()
add0()
end