Home |
Search |
Today's Posts |
#1
Posted to microsoft.public.excel.misc
|
|||
|
|||
Solving Sudoku using Excel
Sudoku equations are quite linear and I believe that Excel can definitely be
used to solve a game that has at least 25-30 numbers to begin with. Does anyone have any suggestion on how to solve it? |
#2
Posted to microsoft.public.excel.misc
|
|||
|
|||
Solving Sudoku using Excel
While it is possible, it's not quite as simple as you may think. However,
here's an example of a Sudoku solver that uses just logic (the same way XL would) http://www.sudokusolver.co.uk/ There's also a link to show it solved step-by-step. Hopefully this gives you some ideas. -- Best Regards, Luke M *Remember to click "yes" if this post helped you!* "azmanblues" wrote: Sudoku equations are quite linear and I believe that Excel can definitely be used to solve a game that has at least 25-30 numbers to begin with. Does anyone have any suggestion on how to solve it? |
#3
Posted to microsoft.public.excel.misc
|
|||
|
|||
Solving Sudoku using Excel
A Google search with "Excel Sudoku" yields about 3 million hits
best wishes -- Bernard V Liengme Microsoft Excel MVP http://people.stfx.ca/bliengme remove caps from email "azmanblues" wrote in message ... Sudoku equations are quite linear and I believe that Excel can definitely be used to solve a game that has at least 25-30 numbers to begin with. Does anyone have any suggestion on how to solve it? |
#4
Posted to microsoft.public.excel.misc
|
|||
|
|||
Solving Sudoku using Excel
Here is my code for solving SDOKU. It uses a recursive algorithm to get the
solution by trying every combination. You could speed up the code by adding inteligence. the code works within a couple of minutes for a standard 9 x 9 puzzle. Dim Completed As Boolean Dim RecursiveCount As Integer Sub Sudoku() Const SudukoSheet As String = "Sudoku" Dim Board(9, 9) As Integer Dim BoxColumn As Integer Dim BoxRow As Integer Dim CheckColumn As Integer Dim CheckRow As Integer Dim Column As Integer Dim ErrorColumn As Integer Dim ErrorRow As Integer Dim ErrorString As String Dim FirstColumn As Integer Dim FirstRow As Integer Dim Number As Integer Dim NumerFound As Boolean Dim Row As Integer Completed = False RecursiveCount = 1 'check for errors For Row = 1 To 9 For Column = 1 To 9 If (Worksheets(SudukoSheet).Cells(Row, Column).Value < "") Then If (Worksheets(SudukoSheet).Cells(Row, Column).Value < "1") Or _ (Worksheets(SudukoSheet).Cells(Row, Column).Value "9") Or _ (Len(Worksheets(SudukoSheet).Cells(Row, Column).Value) < 1) Then ErrorString = "Incorrect Value in cell " + Chr(Asc("A") + Column - 1) + CStr(Row) MsgBox (ErrorString) Exit Sub End If End If Next Column Next Row For Row = 1 To 9 For Column = 1 To 9 If Worksheets(SudukoSheet).Cells(Row, Column).Value = "" Then Board(Row, Column) = 0 Else Board(Row, Column) = Worksheets(SudukoSheet).Cells(Row, Column).Value Worksheets(SudukoSheet).Cells(Row, Column).Font.Bold = True Worksheets(SudukoSheet).Cells(Row, Column).Font.ColorIndex = 1 End If Next Column Next Row 'check for errors NumberFound = False For Row = 1 To 9 For Column = 1 To 9 If Board(Row, Column) < 0 Then Number = Board(Row, Column) 'check column For CheckRow = 1 To 9 If (CheckRow < Row) And (Board(CheckRow, Column) = Number) Then NumberFound = True ErrorColumn = Column ErrorRow = CheckRow Exit For End If Next CheckRow 'check row If NumberFound = False Then For CheckColumn = 1 To 9 If (CheckColumn < Column) And (Board(Row, CheckColumn) = Number) Then NumberFound = True ErrorColumn = CheckColumn ErrorRow = Row Exit For End If Next CheckColumn End If 'check box If NumberFound = False Then BoxColumn = (3 * ((Column - 1) \ 3)) + 1 BoxRow = (3 * ((Row - 1) \ 3)) + 1 For CheckRow = BoxRow To (BoxRow + 2) For CheckColumn = BoxColumn To (BoxColumn + 2) If (CheckRow < Row) And (CheckColumn < Column) And _ (Board(CheckRow, CheckColumn) = Number) Then NumberFound = True ErrorColumn = CheckColumn ErrorRow = CheckRow Exit For End If Next CheckColumn If NumberFound = True Then Exit For End If Next CheckRow End If End If If NumberFound = True Then Exit For End If Next Column If NumberFound = True Then Exit For End If Next Row If NumberFound = False Then FirstColumn = 0 FirstRow = 1 Call SolveSudoku(Board, FirstRow, FirstColumn) Else 'error ErrorString = "Duplicate Value in cell " + Chr(Asc("A") + Column - 1) + CStr(Row) ErrorString = ErrorString + " and cell " + Chr(Asc("A") + ErrorColumn - 1) + CStr(ErrorRow) MsgBox (ErrorString) End If If Completed = False Then Response = MsgBox("There is no solution to this puzzle. Press OK to Continue:") End If End Sub Sub SolveSudoku(Board, OldRow As Integer, OldColumn As Integer) Const SudukoSheet As String = "Sudoku" Dim NewBoard(9, 9) As Integer Dim BoxColumn As Integer Dim BoxRow As Integer Dim CheckColumn As Integer Dim CheckRow As Integer Dim Column As Integer Dim FirstColumn As Integer Dim FirstLoop As Boolean Dim Found As Boolean Dim Number As Integer Dim NumerFound As Boolean Dim Row As Integer For Row = 1 To 9 For Column = 1 To 9 NewBoard(Row, Column) = Board(Row, Column) Next Column Next Row 'increment row and column to next box If OldColumn = 9 Then CheckRow = OldRow + 1 CheckColumn = 1 Else CheckColumn = OldColumn + 1 CheckRow = OldRow End If 'find empty cell Found = False FirstLoop = True For Row = CheckRow To 9 If FirstLoop = True Then FirstLoop = False FirstColumn = CheckColumn Else FirstColumn = 1 End If For Column = FirstColumn To 9 If NewBoard(Row, Column) = 0 Then Found = True Exit For End If Next Column If Found = True Then Exit For End If Next Row If Found = False Then Completed = True For Row = 1 To 9 For Column = 1 To 9 Worksheets(SudukoSheet).Cells(Row, Column).Select If Selection.Value = "" Then Selection.Value = NewBoard(Row, Column) Selection.Font.ColorIndex = 3 End If With Selection.Font .Name = "Arial" .Size = 24 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone End With With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlBottom .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False .ColumnWidth = 8.3 End With Next Column Next Row Else For Number = 1 To 9 NumberFound = False 'check column For CheckRow = 1 To 9 If NewBoard(CheckRow, Column) = Number Then NumberFound = True Exit For End If Next CheckRow 'check row If NumberFound = False Then For CheckColumn = 1 To 9 If NewBoard(Row, CheckColumn) = Number Then NumberFound = True Exit For End If Next CheckColumn End If 'check box If NumberFound = False Then BoxColumn = (3 * ((Column - 1) \ 3)) + 1 BoxRow = (3 * ((Row - 1) \ 3)) + 1 For CheckRow = BoxRow To (BoxRow + 2) For CheckColumn = BoxColumn To (BoxColumn + 2) If NewBoard(CheckRow, CheckColumn) = Number Then NumberFound = True Exit For End If Next CheckColumn If NumberFound = True Then Exit For End If Next CheckRow End If If NumberFound = False Then NewBoard(Row, Column) = Number Call SolveSudoku(NewBoard, Row, Column) End If If Completed = True Then Exit For End If Next Number End If End Sub Sub Clear() Const SudukoSheet As String = "Sudoku" Dim Column As Integer Dim Row As Integer For Row = 1 To 9 For Column = 1 To 9 Worksheets(SudukoSheet).Cells(Row, Column).Value = "" Worksheets(SudukoSheet).Cells(Row, Column).Font.ColorIndex = 1 Next Column Next Row End Sub "azmanblues" wrote: Sudoku equations are quite linear and I believe that Excel can definitely be used to solve a game that has at least 25-30 numbers to begin with. Does anyone have any suggestion on how to solve it? |
#5
Posted to microsoft.public.excel.misc
|
|||
|
|||
Solving Sudoku using Excel
Maybe of interest.
http://blogs.msdn.com/excel/archive/...-part-1-2.aspx Cheers Andy -- Andy Pope, Microsoft MVP - Excel http://www.andypope.info "azmanblues" wrote in message ... Sudoku equations are quite linear and I believe that Excel can definitely be used to solve a game that has at least 25-30 numbers to begin with. Does anyone have any suggestion on how to solve it? |
#6
Posted to microsoft.public.excel.misc
|
|||
|
|||
Solving Sudoku using Excel
Hi,
And another, this time by Mike Oldroyd and I've not found a puzzle it can't solve http://www.mrexcel.com/tip109.shtml Mike "azmanblues" wrote: Sudoku equations are quite linear and I believe that Excel can definitely be used to solve a game that has at least 25-30 numbers to begin with. Does anyone have any suggestion on how to solve it? |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
Similar Threads | ||||
Thread | Forum | |||
Kakuro Killer Sudoku solving formula | Excel Worksheet Functions | |||
Solving Sudoku with EXCEL | Excel Worksheet Functions | |||
Sudoku hints | Excel Worksheet Functions | |||
Sudoku | Excel Discussion (Misc queries) | |||
Sudoku | Excel Discussion (Misc queries) |