You can extend the concept of bilocated candidates into two dimensions by considering an NxN fish group.
Definitions for an NxN Fish Group
An NxN fish group consists of any intersection of N column houses with N row houses. A fish group pertains to only one particular digit. The particular digit does not need to be present as a candidate in any of the cells that form the NxN fish group.
An NxN fish group is considered true for a particular digit only if it contains exactly N true candidates for that digit. A fish group being true doesn't necessarily tell you where in the fish group that digit's candidates are true, but it does tell you that any like candidates that are outside of the fish group that share a row or column with the fish group must be false. Likewise, if the fish group is false, then at least one of the outside candidates that shares a row, and at least one of the outside candidates that shares a column with the fish group must be true.
NxN Fish Group - Identifying Weak Links
Any group of like candidates, not part of the fish group, that all share either a row or a column with the fish group is weakly linked to the fish group. You cannot have both the fish group and a candidate from the outside group be true.
NxN Fish Group - Identifying & Using Strong Links
If a group of like candidates encompasses either all of the outside candidates sharing rows with the fish group, or all of the outside candidates sharing columns with the fish group; then that group is strongly linked to the fish group. Either the outside group or the fish group (or possibly both if they share candidates) must be true. If there is no intersection between the two groups, they are conjugate, and they can even be colored. If there are no candidates for the outside group in one dimension (rows or columns), then the fish group must be true and outside candidates sharing the other dimension may be removed.
Note that when a fish group is false, it may still contain a significant number of true candidates. Because of this, it is practically impossible to come up with cases where two large fish patterns are directly strongly linked.
AIC Notation for Fish Groups
To denote a fish group using AIC notation, use a slash in between the rows/columns in the location field. Changing the order of rows and columns so that the correct set of houses faces the candidates interacting with them is allowed. While this is not so important in the case of fish groups, it will help make things clearer in the case of the more generic Constraint Groups.
Examples of Fish Groups in AICs
Finned fish and finned sashimi fish are simple AICs of the form...
{Fish Group} = {Fin Group}
...which eliminates candidates weakly linked to both the fish and the fin. For example...
(1)c248/r159 = (1)r1c13 => is a finned swordfish with r23c2 <> 1
Kraken Fish are identical to longer AIC chains or nets with a fish group.
Here is the original finned fish example
- Code: Select all
+----------+-----------+-----------+
| . . . | . . . | . 1 . |
| . *1 . | *1 . . | . . . |
| . 1 1 | 1 1 1 | . . . |
+----------+-----------+-----------+
| . *1 . | *1 #1 #1 | . . . |
| . 1 1 | -1 1 1 | . . . |
| . . . | -. . . | . . 1 |
+----------+-----------+-----------+
| . . . | 1 1 1 | . . . |
| . . . | . . . | 1 . . |
| 1 . . | . . . | . . . |
+----------+-----------+-----------+
- Code: Select all
+-----------+-----------+-----------+
|*7 . . | . . . | . *7 *7 |
| . . . | . 7 . | . . . |
| 7 . 7 | . . . | 7 . . |
+-----------+-----------+-----------+
| . . . | . . A7 | 7 -7 . |
|*7 . . | . . . |#7 *. *7 |
| . . 7 |a7 . . | 7 7 . |
+-----------+-----------+-----------+
| . . . | 7 . a7 | 7 7 7 |
| . 7 . | . . . | . . . |
|*. . . |#7 . . | . *7 *7 |
+-----------+-----------+-----------+
= (7)r5c7
/
(7)c189/r159 =
\
= (7)r9c4 - (7)r6c4 = (7)r4c6
- Code: Select all
+-----------+-----------+------------+
| . . 1B| 1b . . | . . . |
| 1c . 1 | 1 . 1A| 1 1 1 |
| 1c . 1 | 1 . 1A| 1 1 1 |
+-----------+-----------+------------+
| . 1X . | . 1X . | 1x" 1x" 1x"|
| . . 1d| . . . | 1D 1D 1D |
| 1C . 1 | 1 . . | 1 1 1 |
+-----------+-----------+------------+
| . . 1 | 1 . . | 1 1 1 |
| . 1X . | . 1X . | . . . |
| . 1x' . | 1 1x' 1a| 1 1 1 |
+-----------+-----------+------------+
(1)r48/c25 = (1)r9c25 - (1)r9c6 = (1)r23c6 - (1)r1c4 = (1)r1c3 - (1)r23c1 = (1)r6c1 - (1)r5c3 = (1)r5c789 - (1)r4c789 = (1)r48/c25 => the X-Wing is true, therefore r9c25 & r4c789 <> 1
Here is a wild one...let '/' indicate cells containing neither candidates for 1 nor 2. Let X, Y, and Z be any number of non-12 digits. Dot cells here can contain any candidates.
- Code: Select all
+-----------+-----------+------------+
| 12X / / | 12Y / / | / 12Z / |
| . . . | . . . | . . . |
| . . . | . . . | . . . |
+-----------+-----------+------------+
| . . . | . . . | . . . |
| 12 / / | 12 / / | / / / |
| . . . | . . . | . . . |
+-----------+-----------+------------+
| 123 . . | 123 . . | . . . |
| . . . | . . . | . . . |
| . . . | . . . | . . . |
+-----------+-----------+------------+
(3&2=1)r7c14 - (1)c14/r15 = (1-2)r1c8 = (2)r15/c14 - (2=1&3)r7c14... AIC loop => r7c2356789 <> 3 and r1c8 <> Z
Expanding the Basic AIC Building Blocks - NxN Constraint Groups
Other NxN constraint groups are possible besides fish (N rows vs N columns). As long as the set of houses on either side do not have any internal intersections, the constraint group is just the cells forming the intersection of the two sets of houses, and all of the other rules apply just as they do for fish groups.
The particular problem of internal intersections
If a set of constraint houses has internal intersections, then you cannot form strong links against that set unless those internal intersections are removed from the constraint group (do this by removing them from the other set of houses!)
For example, consider r28c28/b1379
- Code: Select all
+-----------+-----------+------------+
| . X . | . . . | . X . |
| X (X) X | . . . | X (X) X |
| . X . | . . . | . X . |
+-----------+-----------+------------+
| . . . | . . . | . . . |
| . . . | . . . | . . . |
| . . . | . . . | . . . |
+-----------+-----------+------------+
| . X . | . . . | . X . |
| X (X) X | . . . | X (X) X |
| . X . | . . . | . X . |
+-----------+-----------+------------+
The X's denote the constraint group. Let / indicate cells which cannot contain the digit, and let '*' indicate cells where the digit could be removed. The (X)s indicate cells that are part of the internal intersection for r28 & c28. The cells should be removed from the b1379 set and thus removed from the constraint group. If we have...
- Code: Select all
+-----------+-----------+------------+
| / X / | . . . | / X / |
| X X X | * * * | X X X |
| / X / | . . . | / X / |
+-----------+-----------+------------+
| . * . | . . . | . * . |
| . * . | . . . | . * . |
| . * . | . . . | . * . |
+-----------+-----------+------------+
| / X / | . . . | / X / |
| X X X | * * * | X X X |
| / X / | . . . | / X / |
+-----------+-----------+------------+
...then we have our always false cells (/) strongly linked to the b1379 set of houses in our constraint group, and since that set has no internal intersections we can safely eliminate all the candidates that weakly link with the r28c28 part of the constraint group (marked with an *).
Our modified constraint group works even better though...
- Code: Select all
+-----------+-----------+------------+
| / X / | . . . | / X / |
| X * X | * * * | X * X |
| / X / | . . . | / X / |
+-----------+-----------+------------+
| . * . | . . . | . * . |
| . * . | . . . | . * . |
| . * . | . . . | . * . |
+-----------+-----------+------------+
| / X / | . . . | / X / |
| X * X | * * * | X * X |
| / X / | . . . | / X / |
+-----------+-----------+------------+
Here you see that r28c28 are no longer considered part of b1379/ or the constraint group, but they are still considered part of the r28 & c28 set, therefore they are automatically removed along with the rest of that set when the slash cells are empty.
The complementary situation does not work out at all without the internal intersection mod. Taking this example we would have...
- Code: Select all
+-----------+-----------+------------+
| * X * | . . . | * X * |
| X X X | / / / | X X X |
| * X * | . . . | * X * |
+-----------+-----------+------------+
| . / . | . . . | . / . |
| . / . | . . . | . / . |
| . / . | . . . | . / . |
+-----------+-----------+------------+
| * X * | . . . | * X * |
| X X X | / / / | X X X |
| * X * | . . . | * X * |
+-----------+-----------+------------+
The slash cells here do not form a strong link with the constraint group. You can see that if you put a true candidate in one of the internal intersection cells (r28c28) then you could not fill in the grid without placing a true candidate in one of the starred cells. That means that the Constraint Group will have less than 4 true candidate, thus both the group of slash cells and the constraint group will be false.
If you remove the internal intersection cells from the b1379 constraint set and the constraint group, then you have...
- Code: Select all
+-----------+-----------+------------+
| * X * | . . . | * X * |
| X / X | / / / | X / X |
| * X * | . . . | * X * |
+-----------+-----------+------------+
| . / . | . . . | . / . |
| . / . | . . . | . / . |
| . / . | . . . | . / . |
+-----------+-----------+------------+
| * X * | . . . | * X * |
| X / X | / / / | X / X |
| * X * | . . . | * X * |
+-----------+-----------+------------+
And now the strong link between the constraint group and the /-cells holds up and we can safely make all the deletions from the starred cells when the slash cells are empty.