点灯游戏2-15游戏解答

快来快来学一学

--点灯游戏 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


 

你可能感兴趣的:(lua,游戏)