The problem is that Im trying to prove my algorithm empirically even Im not sure it works.
What Im doing is:
1. Generate 16 hits (this is optimistic, especially I havent generated puzzle with less then 19 hints, it can be a little bit faster if I generate 20 or 24)
2. Check whether my solver can solve the puzzle, if not - add one more hint and try again there are 3 ways to stop
puzzle already has 0 decisions, then restart
puzzle has one decision, then continue
there are no more free cells in the used pattern, then restart
As this is not looking for minimal puzzle the used methods in the solver should be only fastest in fact I use the most of them as I have proved that removing one of them the generator is going slower.
3. Try to remove a hint (Im using random order, otherwise the first row is usually empty) and substitute it with all other possible candidates for the cell. If there is at least one of the new puzzles which can be solved, so the hint can not be removed.
The last step is doubtful I can not prove it is wrong, I just have bad feeling about it. It surely works (otherwise it sometimes would produce impossible puzzles), but Im not sure whether it can produce 10+ or even 9.2+.
p.s. is 120 miliseconds per puzzle fast enough? it is faster with diagonal pattern as the wrong puzzles are more, but in fact this makes it slower - 2 puzzles per second ... and SE analyse, which is a lot slower.