## Sudoku Generation

Over two years ago, I wrote a basic 3×3-sudoku solver which uses both fundamental rule-based elimination and guessing to arrive at the solution. Revisiting the topic of computer-aided sudoku manipulation, I wrote a generalized sudoku generator (sudoku.hs).

```    | 4
3 |
---------
2 | 1
4 |

./sudoku 5 2```

## Web Sudoku Solver

In my last post I used Web Sudoku to get a Sudoku as an example for my solver.

After that I wanted to automate the process of looking up a Sudoku, solving it and typing it in. But while trying to get the Sudoku’s numbers, I noticed that the whole, solved Sudoku was stored in plaintext! (Look at this page‘s source code)
So I just needed to get that information, open the Web Sudoku page in a browser and type in the already solved Sudoku.

To accomplish said goal I used the python module urllib to get the Web Sudoku page’s source code and the module webbrowser to open the page in a browser. To type in the Sudoku I used AutoHotkey.

The finished program takes a level (easy, medium, hard or evil) and an id (the Sudoku’s identification number) to get a Sudoku, create an AHK file, execute it and open a web browser.
All you have to do is to click into the first box, press a key (F1 in this case) and the Sudoku gets solved! You then just need to wait a minute, which is the minimum time Web Sudoku wants you to take to solve a Sudoku, and the AHK script hits enter.
You can get really good times with this.

``````# Python 2.7.7 Code
# Jonathan Frech  9th of August, 2016
#         edited 10th of August, 2016
#         edited 11th of August, 2016``````

## Sudoku Solver

This program solves a given Sudoku.
It uses a simple strategy, looking at each box and determining those numbers that are not in its row, column and square. If that list has length 1, the box’s number is determined.
After going through each box, the program generates child Sudokus in which the first empty box get filled with one of the possible numbers for that box. Sudokus with an error get eliminated.
Using this simple but effective strategy this program can solve hard Sudokus in under a second.
As an example, I used Evil Puzzle 666 from Web Sudoku.
For more information on Sudokus, visit this Wikipedia entry.

``````# Python 2.7.7 Code
# Jonathan Frech 3rd of August  , 2016
#         edited 5th of August  , 2016
#         edited 2nd of December, 2017
#          * Fixed a bug where the solved
#            sudoku would be printed twice
#            on easy sudokus.``````