Guest User

Untitled

a guest
Feb 8th, 2014
171
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 1.80 KB | None | 0 0
  1. #################################
  2. ###      Sudoku Generator     ###  
  3. #################################
  4. #                               #
  5. # Generates a 9x9 Sudoku puzzle.#
  6. #                               #
  7. #################################
  8.  
  9. class Board
  10.     def initialize()
  11.         @grid = Array.new(81) { 0 }
  12.     end
  13.  
  14.     # coordinates is a list [x,y]
  15.     def toBoard(value,coordinates)
  16.         index = (coordinates[0]*9)+(coordinates[1])
  17.         @grid[index] = value
  18.     end
  19.  
  20.     # get value at [x,y] coordinates
  21.     def getVal(coordinates)
  22.         index = (coordinates[0]*9)+(coordinates[1])
  23.         return @grid[index]
  24.     end
  25.  
  26.     # print full board
  27.     def show
  28.         (0..80).step(9) do |i|
  29.             print @grid[i..i+8].to_s+"\n"
  30.         end
  31.     end
  32.  
  33.     # check for conflicts in grid
  34.     def check
  35.     end
  36. end
  37.  
  38. # test if number at coordinate valid
  39. def validNumber(sudoku, num, coordinates)
  40.     # create list of numbers in same column
  41.     colNums = []
  42.     (0..8).each do |i|
  43.         colNums[i] = sudoku.getVal([i,coordinates[1]])
  44.     end
  45.  
  46.     # create list of numbers in same row
  47.     rowNums = []
  48.     (0..8).each do |i|
  49.         rowNums[i] = sudoku.getVal([coordinates[0],i])
  50.     end
  51.  
  52.     if ! colNums.include?(num) and ! rowNums.include?(num)
  53.         return true
  54.     else
  55.         return false
  56.     end
  57. end
  58.  
  59. # get random valid number
  60. def getNumber(sudoku, coordinates)
  61.     numPool = [1,2,3,4,5,6,7,8,9]
  62.     num = numPool.sample
  63.  
  64.     while true do
  65.         if validNumber(sudoku, num, coordinates) == true
  66.             return num
  67.         else
  68.             numPool.delete!(num)
  69.             num = numPool.sample
  70.         end
  71.     end
  72. end
  73.  
  74. def indexToCoord(index)
  75.     y = index % 9
  76.     x = (index - y)/9
  77.    
  78.     coordinates = [x,y]
  79.     return coordinates
  80. end
  81.    
  82.  
  83. sudoku = Board.new()
  84.  
  85. @grid.each_with_index do |cell, index|
  86.     sudoku.toBoard(getNumber(sudoku,indexToCoord(index)))
  87. end
  88.  
  89. print sudoku
Advertisement
Add Comment
Please, Sign In to add comment