Advertisement
guitarplayer616

Sudoku Solver 4x4

Jun 8th, 2016
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lua 2.73 KB | None | 0 0
  1. board = {}
  2. shell.run("delete console")
  3. local h = fs.open("console","a")
  4.  
  5. function createEmptyBoard()
  6.     for i = 1,4 do
  7.         board[i] = {}
  8.         for j = 1,4 do
  9.             board[i][j] = {}
  10.             board[i][j].num = 0
  11.             board[i][j].exceptions = {}
  12.             board[i][j].options = {}
  13.         end
  14.     end
  15. end
  16.  
  17. function printBoard()
  18.     for i=1,4 do
  19.         for j=1,4 do
  20.             term.setCursorPos(i,j)
  21.             term.write(board[i][j].num)
  22.         end
  23.     end
  24. end
  25.  
  26. --==Sudoku Functions==--
  27. function findEmpty()
  28.     for y = 1,4 do
  29.         for x = 1,4 do
  30.             if board[x][y].num == 0 then
  31.                 return true,x,y
  32.             end
  33.         end
  34.     end
  35. end
  36.  
  37. local function findQuadrant(x,y)
  38.     quadrant = {}
  39.     quadrant.num = 0
  40.     quadrant.x = 0
  41.     quadrant.y = 0
  42.     if x <= 2 then
  43.         if y<=2 then
  44.             quadrant.num = 1
  45.             quadrant.x = 1
  46.             quadrant.y = 1
  47.         elseif y<=4 then
  48.             quadrant.num = 3
  49.             quadrant.x = 1
  50.             quadrant.y = 3
  51.         end
  52.     elseif x<=4 then
  53.         if y<=2 then
  54.             quadrant.num = 2
  55.             quadrant.x = 3
  56.             quadrant.y = 1 
  57.         elseif y<=4 then
  58.             quadrant.num = 4
  59.             quadrant.x = 3
  60.             quadrant.y = 3
  61.         end
  62.     end
  63.     return quadrant
  64. end
  65.  
  66.  
  67. local function organizeOptions(x,y)
  68.     for i=1,9 do
  69.         board[x][y].options[i] = i
  70.     end
  71.     for i = 1,9 do
  72.         for _,k in pairs(board[x][y].exceptions) do
  73.             if i == k then
  74.                 board[x][y].options[i] = 0
  75.             end
  76.         end
  77.     end
  78. end
  79.  
  80. function findOptions(x,y)
  81.     for i = 1,4 do
  82.         if board[i][y].num ~= 0 then
  83.             table.insert(board[x][y].exceptions,board[i][y].num)
  84.         end
  85.         if board[x][i].num ~= 0 then
  86.             table.insert(board[x][y].exceptions,board[x][i].num)
  87.         end
  88.     end
  89.     quadrant = findQuadrant(x,y)
  90.     for i = quadrant.x,quadrant.x+1 do
  91.         for j = quadrant.y,quadrant.y+1 do
  92.             if board[i][j].num ~= 0 then
  93.                 table.insert(board[x][y].exceptions,board[i][j].num)
  94.             end
  95.         end
  96.     end
  97.     organizeOptions(x,y)
  98. end
  99.  
  100.  
  101. function recursive()
  102.     unsolved,x,y = findEmpty()
  103.     if unsolved then
  104.         findOptions(x,y)
  105.         for _,v in pairs(board[x][y].options) do
  106.             if v~= 0 then
  107.                 board[x][y].num = v
  108.                 recursive()
  109.             end
  110.         end
  111.         board[x][y].num = 0
  112.     else
  113.         printBoard()
  114.         print("FINISHED :D")
  115.         error()
  116.     end
  117. end
  118.  
  119. --==Debug Functions==--
  120.  
  121. function fillRand()
  122.     for i=1,4 do
  123.         for j=1,4 do
  124.             board[i][j].num = math.random(1,9)
  125.         end
  126.     end
  127. end
  128.  
  129. function tab(t)
  130.     for i,v in pairs(t) do
  131.         if type(v) == "table" then
  132.             tab(v)
  133.         else
  134.             print("i: ",i," v: ",v)
  135.         end
  136.     end
  137. end
  138.  
  139. function log(s)
  140.     if type(s) == "string" then
  141.         h.writeLine(s)
  142.     else
  143.         for i,v in pairs(s) do
  144.             h.write("i: ")
  145.             h.write(i)
  146.             h.write(" v: ")
  147.             h.writeLine(v)
  148.         end
  149.     end
  150.     h.flush()  
  151. end
  152.  
  153.  
  154. createEmptyBoard()
  155. term.clear()
  156. board[1][1].num = 8
  157. board[2][1].num = 3
  158. board[3][2].num = 6
  159. board[4][2].num = 2
  160. board[2][3].num = 1
  161. board[4][3].num = 5
  162. board[4][4].num = 4
  163.  
  164. --fillRand()
  165. recursive()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement