David P Bird wrote:No solving passes are needed. Instead a static logic table is composed for all the 2-digit UAs as previously described.
The previously described 2-digits UA are formed after N-1 and N-2 solving passes, aren't they?
Actually I have no idea how exactly you will obtain them.
David P Bird wrote:When these are sorted in order of the number of potential clues they contain, the first ones in the list will be those that only contain one clue which will identify the essential clues.
These will automatically be covered first by the generating algorithm so require no special treatment*.
----
As and when essential clues are located it's possible to prune the table so that any UAs containing them are removed. This would also eliminate any clues that only existed together with one of these essential clues (and hence would be always be redundant). Although this wouldn't effect the results, it would reduce the loop count in the generating code and make it run faster.
You might want to remove the forbidden clues (those not in the initial puzzle) from all UA. This results in less branches later. This also results that "the number of the potential clues they contain" is the UA size.
David P Bird wrote:If a unique solution is found, a redundancy check is made for any redundant clues.
There is no way to achieve redundant clue if each of the added clues hits a UA not previously hit by other clue. [Edit: this is wrong]
David P Bird wrote:If multiple solutions are found the current clue set is too small because one or more UAs with more than 2 digits have been left uncovered. In this case a virtual UA consisting of all the unused clues is inserted into the static logic table.
Such virtual UA are nothing more than non-minimal UA not previously found (such as 4-digits ones). I am not sure they would help. Moreover, why you want to add them to the static table being sure you are hitting them immediately so they must disappear from the same table(or somehow marked as already hit)? Maybe an effort to achieve more minimal UA at the start will be effective.
David P Bird wrote:I believe this system should handle clue sets that are a long way from being minimal but the number of alternative clue sets it will produce will be enormous. These could be limited by using a version of your clue masking system.
The masking system does exactly the same - never remove forced givens (essential clues) and never add forced non-givens (the non-givens in the initial non-minimal puzzle).
Now some theorems from me
1) Starting from a fixed solution grid and set of forced non-givens, every essential clue will hit a UA of size 1 if the forced non-givens are removed from the UA too.
2) The rules for MCN (maximal clique number, the number of mutually disjoint UA) are applicable to the reduced-size UA too.
Essentially you approach is a puzzle generator with fixed solution grid.
You might want to read carefully McGuire's article about "no 16-s exist". All these problems are discussed and somehow solved in his work.
The concept of "dead clues" is very powerful too. It avoids adding clues AB twice but in different order. It avoids any duplicates up to this part of the logic where known UA have to be hit.
For large search space (less "essential" clues, less forced non-givens, and more "floating" clues), all short UA for the grid could be found in the milliseconds by using McGuire's method, and later pruned and truncated.
For efficient algorithm of hitting the UA you may see Oracle's concept of bitmap indexes, used by McGuire (and gridchecker).