Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Module SudokuGen
- Private Rnd As New Random
- Private Board(8, 8) As Cell
- Private V As New Queue(Of Byte)
- Private Blks(,,) As Byte = {{{0, 0}, {0, 1}, {0, 2}, {1, 0}, {1, 1}, {1, 2}, {2, 0}, {2, 1}, {2, 2}}, _
- {{0, 3}, {0, 4}, {0, 5}, {1, 3}, {1, 4}, {1, 5}, {2, 3}, {2, 4}, {2, 5}}, _
- {{0, 6}, {0, 7}, {0, 8}, {1, 6}, {1, 7}, {1, 8}, {2, 6}, {2, 7}, {2, 8}}, _
- {{3, 0}, {3, 1}, {3, 2}, {4, 0}, {4, 1}, {4, 2}, {5, 0}, {5, 1}, {5, 2}}, _
- {{3, 3}, {3, 4}, {3, 5}, {4, 3}, {4, 4}, {4, 5}, {5, 3}, {5, 4}, {5, 5}}, _
- {{3, 6}, {3, 7}, {3, 8}, {4, 6}, {4, 7}, {4, 8}, {5, 6}, {5, 7}, {5, 8}}, _
- {{6, 0}, {6, 1}, {6, 2}, {7, 0}, {7, 1}, {7, 2}, {8, 0}, {8, 1}, {8, 2}}, _
- {{6, 3}, {6, 4}, {6, 5}, {7, 3}, {7, 4}, {7, 5}, {8, 3}, {8, 4}, {8, 5}}, _
- {{6, 6}, {6, 7}, {6, 8}, {7, 6}, {7, 7}, {7, 8}, {8, 6}, {8, 7}, {8, 8}}}
- Public Sub Main()
- For Retry = 0 To 0
- For x = 0 To 8 : For y = 0 To 8 : Board(x, y) = New Cell : Next : Next
- Dim VB As List(Of Byte) = New Byte() {0, 1, 2, 3, 4, 5, 6, 7, 8}.ToList
- Do Until VB.Count = 0 OrElse Retry
- Dim VC As List(Of Byte) = New Byte() {0, 1, 2, 3, 4, 5, 6, 7, 8}.ToList
- Dim B As Byte = VB(Rnd.Next(VB.Count)) : VB.Remove(B)
- Do Until VC.Count = 0
- Dim C As Byte = VC(Rnd.Next(VC.Count))
- Dim X = Blks(B, C, 0), Y = Blks(B, C, 1), N As Byte = 0
- Retry = Board(X, Y).Process(N)
- If Retry Then Exit Do Else VC.Remove(C)
- For i = 0 To 8
- Board(X, i).VN.Remove(N) : Board(i, Y).VN.Remove(N)
- Board(Blks(B, i, 0), Blks(B, i, 1)).VN.Remove(N)
- Next : Loop : Loop
- Next
- For x = 0 To 8 : For y = 0 To 8 : V.Enqueue(Board(x, y).Val) : Next : Next
- For y = 0 To 2 : For x = 0 To 2 : Console.WriteLine("{0} {1} {2} {3} {4} {5} {6} {7} {8}", _
- V.Dequeue, V.Dequeue, V.Dequeue, V.Dequeue, V.Dequeue, V.Dequeue, _
- V.Dequeue, V.Dequeue, V.Dequeue) : Next : Console.WriteLine()
- Next
- End Sub
- Private Class Cell
- Public Val As Byte = 0
- Public VN As List(Of Byte) = New Byte() {1, 2, 3, 4, 5, 6, 7, 8, 9}.ToList
- Public Function Process(ByRef SN As Byte) As Boolean
- If VN.Count = 0 Then Return True Else Process = False
- Val = VN(Rnd.Next(VN.Count)) : SN = Val
- End Function
- End Class
- End Module
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement