Sudoku game & solver
Created with C#, winforms
Development time: few hours
Development team: Me
Development time: few hours
Development team: Me
So... I did a project like this my junior year of undergrad (a sudoku solver) and I have always been under the impression that one can simply create a solvable sudoku board by randomly solving an empty board and removing certain elements (by "randomly solve" I mean instead of testing, 1-2-3-4... you randomize the order that you solve with. 5-8-1-9-...).
However, I found out that a randomly created board can be solved with a (different) random solver (recursive, single thread) insanely fast. It wasn't until a colleague of mine sent me a text file with pre-built (systematically engineered) sudoku boards of different difficulty levels that I realized there is a huge difference. Some of the boards he sent me took 20+ seconds to solve on my modern gaming machine.
I didn't dig too deep into it, but I think the reason is that the engineered boards have a much smaller set of possible solutions than the boards I randomly generated. My boards can be recursed down a few paths and find a solution, whereas the engineered boards form a very large recursive tree.
However, I found out that a randomly created board can be solved with a (different) random solver (recursive, single thread) insanely fast. It wasn't until a colleague of mine sent me a text file with pre-built (systematically engineered) sudoku boards of different difficulty levels that I realized there is a huge difference. Some of the boards he sent me took 20+ seconds to solve on my modern gaming machine.
I didn't dig too deep into it, but I think the reason is that the engineered boards have a much smaller set of possible solutions than the boards I randomly generated. My boards can be recursed down a few paths and find a solution, whereas the engineered boards form a very large recursive tree.