document.write('
Data hosted with ♥ by Pastebin.com - Download Raw - See Original
  1. Module SudokuGen
  2.     Private Rnd As New Random
  3.     Private Board(8, 8) As Cell
  4.     Private V As New Queue(Of Byte)
  5.     Private Blks(,,) As Byte = {{{0, 0}, {0, 1}, {0, 2}, {1, 0}, {1, 1}, {1, 2}, {2, 0}, {2, 1}, {2, 2}}, _
  6.                                 {{0, 3}, {0, 4}, {0, 5}, {1, 3}, {1, 4}, {1, 5}, {2, 3}, {2, 4}, {2, 5}}, _
  7.                                 {{0, 6}, {0, 7}, {0, 8}, {1, 6}, {1, 7}, {1, 8}, {2, 6}, {2, 7}, {2, 8}}, _
  8.                                 {{3, 0}, {3, 1}, {3, 2}, {4, 0}, {4, 1}, {4, 2}, {5, 0}, {5, 1}, {5, 2}}, _
  9.                                 {{3, 3}, {3, 4}, {3, 5}, {4, 3}, {4, 4}, {4, 5}, {5, 3}, {5, 4}, {5, 5}}, _
  10.                                 {{3, 6}, {3, 7}, {3, 8}, {4, 6}, {4, 7}, {4, 8}, {5, 6}, {5, 7}, {5, 8}}, _
  11.                                 {{6, 0}, {6, 1}, {6, 2}, {7, 0}, {7, 1}, {7, 2}, {8, 0}, {8, 1}, {8, 2}}, _
  12.                                 {{6, 3}, {6, 4}, {6, 5}, {7, 3}, {7, 4}, {7, 5}, {8, 3}, {8, 4}, {8, 5}}, _
  13.                                 {{6, 6}, {6, 7}, {6, 8}, {7, 6}, {7, 7}, {7, 8}, {8, 6}, {8, 7}, {8, 8}}}
  14.     Public Sub Main()
  15.         For Retry = 0 To 0
  16.             For x = 0 To 8 : For y = 0 To 8 : Board(x, y) = New Cell : Next : Next
  17.             Dim VB As List(Of Byte) = New Byte() {0, 1, 2, 3, 4, 5, 6, 7, 8}.ToList
  18.             Do Until VB.Count = 0 OrElse Retry
  19.                 Dim VC As List(Of Byte) = New Byte() {0, 1, 2, 3, 4, 5, 6, 7, 8}.ToList
  20.                 Dim B As Byte = VB(Rnd.Next(VB.Count)) : VB.Remove(B)
  21.                 Do Until VC.Count = 0
  22.                     Dim C As Byte = VC(Rnd.Next(VC.Count))
  23.                     Dim X = Blks(B, C, 0), Y = Blks(B, C, 1), N As Byte = 0
  24.                     Retry = Board(X, Y).Process(N)
  25.                     If Retry Then Exit Do Else VC.Remove(C)
  26.                     For i = 0 To 8
  27.                         Board(X, i).VN.Remove(N) : Board(i, Y).VN.Remove(N)
  28.                         Board(Blks(B, i, 0), Blks(B, i, 1)).VN.Remove(N)
  29.                     Next : Loop : Loop
  30.         Next
  31.         For x = 0 To 8 : For y = 0 To 8 : V.Enqueue(Board(x, y).Val) : Next : Next
  32.         For y = 0 To 2 : For x = 0 To 2 : Console.WriteLine("{0} {1} {2}  {3} {4} {5}  {6} {7} {8}", _
  33.             V.Dequeue, V.Dequeue, V.Dequeue, V.Dequeue, V.Dequeue, V.Dequeue, _
  34.             V.Dequeue, V.Dequeue, V.Dequeue) : Next : Console.WriteLine()
  35.         Next
  36.     End Sub
  37.     Private Class Cell
  38.         Public Val As Byte = 0
  39.         Public VN As List(Of Byte) = New Byte() {1, 2, 3, 4, 5, 6, 7, 8, 9}.ToList
  40.         Public Function Process(ByRef SN As Byte) As Boolean
  41.             If VN.Count = 0 Then Return True Else Process = False
  42.             Val = VN(Rnd.Next(VN.Count)) : SN = Val
  43.         End Function
  44.     End Class
  45. End Module
');