by Hakosuuji » Mon Sep 12, 2005 3:33 am
I have developed a technique that I call "Bars and Stacks". It saves a lot of time used for scanning and hatching.
This is how it works:
Draw 2 grids, one with the intersections of the rows and boxes (the bars), the other with the intersections of columns and boxes (the stacks).
For each value, you must determine the status it has in each bar and stack. You can use colors for these statuses, and write them in the grid. The statuses are:
1. Filled
2. Blocked
3. Required
4. Undetermined
Place the givens into these grids, with status "filled"
These givens cannot appear in the remaining bars and stacks, which belong to the same group. Each bar and stack has 4 peers that can be blocked for the givens. Write the numbers down with status "blocked"
Each time you write a block, check the remaining 2 peers. e.g. if you block a value because it is given in another bar in the same row, you must check the 2 bars of the same box. All "follow-up" logic goes round the corner like this.
If one of the 2 remaining peers is also blocked for that value, the last unblocked bar or stack MUST contain that value. Write it down with the status "required"
Once you have determined that a certain bar or stack requires a certain value, that value can then be blocked from it's remaining peers. You only need to check 2 of them because the other 2 were already blocked.
When filling the grid, keep an eye on fully loaded bars and stacks. Only 3 values fit into it, so when the sum of both "filled" and "required" values is 3, the thing is fully loaded, and all remaining values can be blocked. This will allow you to possibly detect more requirements in its peers.
Each cell belongs to one bar and one stack. When a bar with a required value intersects with a stack that requires the same value, the cell at the intersection MUST contain that value.
More deductions can be made: when 2 cells in a bar or stack are filled, and a 3rd value is required, you know the location for that 3rd value.
Use the "Bars & Stacks" technique together with other solving techniques. I originally used it as a secondary method, but since it can eliminate a lot of possibilities in a relatively short time, I now use it as the primary method. It is also very useful in revealing those important subsets at the intersection of row/column and box.
Maybe I have developed something that is already known by a different name. Please tell me where to find more documentation on the subject when that is the case.