TizzyT

SudokuGen lngr -TizzyT

Jan 9th, 2015
303
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
VB.NET 3.88 KB | None | 0 0
  1. Module SudokuGen
  2.     Private Rnd As New Random
  3.     Private Board(8, 8) As Cell
  4.     Private Blks(,,) As Byte = _
  5.     {{{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.         While True
  16.             For x = 0 To 8
  17.                 For y = 0 To 8
  18.                     Board(x, y) = New Cell
  19.                 Next
  20.             Next
  21.             Dim ValidBlks As List(Of Byte) = New Byte() {0, 1, 2, 3, 4, 5, 6, 7, 8}.ToList
  22.             Dim Retry As Boolean = False
  23.             Do Until ValidBlks.Count = 0
  24.                 Dim ValidCells As List(Of Byte) = New Byte() {0, 1, 2, 3, 4, 5, 6, 7, 8}.ToList
  25.                 Dim B As Byte = ValidBlks(Rnd.Next(ValidBlks.Count))
  26.                 ValidBlks.Remove(B)
  27.                 Do Until ValidCells.Count = 0
  28.                     Dim C As Byte = ValidCells(Rnd.Next(ValidCells.Count))
  29.                     Dim X As Byte = Blks(B, C, 0), Y As Byte = Blks(B, C, 1), N As Byte = 0
  30.                     If Board(X, Y).Process(N) Then
  31.                         Retry = True
  32.                         Exit Do
  33.                     Else
  34.                         ValidCells.Remove(C)
  35.                         For i = 0 To 8
  36.                             Board(X, i).ValidNbrs.Remove(N) : Board(i, Y).ValidNbrs.Remove(N)
  37.                             Board(Blks(B, i, 0), Blks(B, i, 1)).ValidNbrs.Remove(N)
  38.                         Next
  39.                     End If
  40.                 Loop
  41.                 If Retry Then Exit Do
  42.             Loop
  43.             If Not Retry Then Exit While
  44.         End While
  45.         Console.Write(vbCrLf)
  46.         For X = 0 To 2
  47.             Console.Write(" ")
  48.             For Y = 0 To 2 : Console.Write(Board(X, Y).Value & " ") : Next
  49.             Console.Write(" ")
  50.             For Y = 3 To 5 : Console.Write(Board(X, Y).Value & " ") : Next
  51.             Console.Write(" ")
  52.             For Y = 6 To 8 : Console.Write(Board(X, Y).Value & " ") : Next
  53.             Console.Write(vbCrLf)
  54.         Next
  55.         Console.Write(vbCrLf)
  56.         For X = 3 To 5
  57.             Console.Write(" ")
  58.             For Y = 0 To 2 : Console.Write(Board(X, Y).Value & " ") : Next
  59.             Console.Write(" ")
  60.             For Y = 3 To 5 : Console.Write(Board(X, Y).Value & " ") : Next
  61.             Console.Write(" ")
  62.             For Y = 6 To 8 : Console.Write(Board(X, Y).Value & " ") : Next
  63.             Console.Write(vbCrLf)
  64.         Next
  65.         Console.Write(vbCrLf)
  66.         For X = 6 To 8
  67.             Console.Write(" ")
  68.             For Y = 0 To 2 : Console.Write(Board(X, Y).Value & " ") : Next
  69.             Console.Write(" ")
  70.             For Y = 3 To 5 : Console.Write(Board(X, Y).Value & " ") : Next
  71.             Console.Write(" ")
  72.             For Y = 6 To 8 : Console.Write(Board(X, Y).Value & " ") : Next
  73.             Console.Write(vbCrLf)
  74.         Next
  75.     End Sub
  76.     Public Class Cell
  77.         Public Value As Byte = 0
  78.         Public ValidNbrs As List(Of Byte) = New Byte() {1, 2, 3, 4, 5, 6, 7, 8, 9}.ToList
  79.         Public Function Process(ByRef SelectedNbr As Byte) As Boolean
  80.             If ValidNbrs.Count = 0 Then Return True
  81.             Value = ValidNbrs(Rnd.Next(ValidNbrs.Count))
  82.             SelectedNbr = Value
  83.             Return False
  84.         End Function
  85.     End Class
  86. End Module
Advertisement
Add Comment
Please, Sign In to add comment