I thougth I better try and explain my "fishing technique"...
I don't know if it's worth a separate post, since a lot of the pricipals involved are probably already known, but I have not read enough to know if this is the case. Maybe you fishermen can help decide that...
First of all, this is more of an algorithm than an actual "technique", and is probably of not much use for "human" solver, but someone might find it useful...
The main principle is this: Find a numbers of rows or columns and try and "cover" them with other sectors...
First some terminology to ease the explanation... There are three types of "sectors": rows, columns and boxes. So when I talk of the "other two sectors" while talking about rows, this means columns and boxes...
The collection of candidates made up by the intial rows or columns is called "the fish"!
So the idea is that if you have three rows of candidates, you have to try and "cover" these three rows with "the other two sectors", hence boxes and columns.
Now there are a set of rules that my "fishing-kit" uses: These are:
Covering rules:
1. always try to apply the "other sector" that will cover the most canidates.
2. if two sectors compete for the same amount of candidates to cover, uses boxes last!
Elimination rules:
1. If the amount of sectors used to cover "the fish" is equal to the amount of sectors gone into making it, you can eliminate any other candidates in the sectors used to cover it!
2. If, when having used the same amount of covering sectors as there are lines in the fish, there is one candidate left, you can eliminate any candidates common to that candidate and any of the covering sectors.
3. If, in the same scenario as 2, instead are several candidates "left", you can eliminate any candidates common to these candidates and the covering sectors!
And that's it! Some examples might be handy now...
let's start with a simple swordfish, and see how things can progress:
- Code: Select all
. . . | . . . | . . .
. X . | . X . | . X .
. | . | . | . | . | .
--|---+---|---+---|--
. | . | . | . | . | .
. X . | . X . | . X .
. | . | . | . | . | .
--|---+---|---+---|--
. | . | . | . | . | .
. X . | . X . | . X .
. . . | . . . | . . .
so this one can be covered completely by three rows like this:
- Code: Select all
. . . | . . . | . . .
. 1 . | . 1 . | . 1 .
. | . | . | . | . | .
--|---+---|---+---|--
. | . | . | . | . | .
. 2 . | . 2 . | . 2 .
. | . | . | . | . | .
--|---+---|---+---|--
. | . | . | . | . | .
. 3 . | . 3 . | . 3 .
. . . | . . . | . . .
(the numbers shows what sectors get overlayed in what order)
and hence you can eliminate any other candidates in those three rows...
now with an extra candidate:
- Code: Select all
. . . | . . . | . . .
. X . | . X . | . X .
. | . | . | . | . X .
--|---+---|---+---|--
. | . | . | . | . | .
. X . | . X . | . X .
. | . | . | . | . | .
--|---+---|---+---|--
. | . | . | . | . | .
. X . | . X . | . X .
. . . | . . . | . . .
you get:
- Code: Select all
. . . | . . . | . . .
. 1 . | . 1 . | . 1 .
. | . | . | . | . 4 .
--|---+---|---+---|--
. | . | . | . | . | .
. 2 . | . 2 . | . 2 .
. | . | . | . | . | .
--|---+---|---+---|--
. | . | . | . | . | .
. 3 . | . 3 . | . 3 .
. . . | . . . | . . .
1=row 2
2=row 5
3=row 7
4= single
where 4 now is our "leftover", which we then can eliminate any cells common to both one of our sectors, and itself, in other words:
- Code: Select all
. . . | . . . | . . .
. 1 . | . 1 . | * 1 *
. | . | . | . | . 4 .
--|---+---|---+---|--
. | . | . | . | . | .
. 2 . | . 2 . | . 2 .
. | . | . | . | . | .
--|---+---|---+---|--
. | . | . | . | . | .
. 3 . | . 3 . | . 3 .
. . . | . | . | . . .
Now slightly more interesting:
- Code: Select all
. . . | . . . | X X .
. . . | . X . | X X .
. . . | . | . | X X .
------+---|---+-|-|--
. . . | . | . | | | .
. . . | . X . | X X .
. . . | . | . | | | .
------+---|---+-|-|-
. . . | . | . | | | .
. . . | . X . | X X .
. . . | . . . | . . .
following the overlay-rules you get:
- Code: Select all
. . . | . . . | 1 1 .
. . . | . 4 . | 1 1 *
. . . | . | . | 1 1 .
------+---|---+-|-|--
. . . | . | . | | | .
. . . | . 2 . | 2 2 .
. . . | . | . | | | .
------+---|---+-|-|-
. . . | . | . | | | .
. . . | . 3 . | 3 3 .
. . . | . . . | . . .
1=box 3
2=row 5
3=row 7
4=single
notice that Box 3 contains 6 candidates, so it get picked first! Now eliminations are what our single 4 can see in any of our sectors, which in this case is in the 1'st sector. (box 3)
a Frankenfish would look like this:
- Code: Select all
. . . | . . . | X X .
. . . | . X . | X X .
. . . | . | . | X X .
------+---|---+-|-|--
. . . | . | . | | | .
. . . | . X . | X X .
. . . | . . . | | | .
------+-------+-|-|--
. . . | . . . | X X .
. . . | . . . | X X .
. . . | . . . | X X .
- Code: Select all
. . . | . . . | 1 1 .
. . . | . 4 . | 1 1 *
. . . | . | . | 1 1 .
------+---|---+-|-|--
. . . | . | . | | | .
. . . | . 3 . | 3 3 .
. . . | . . . | | | .
------+-------+-|-|--
. . . | . . . | 2 2 .
. . . | . . . | 2 2 .
. . . | . . . | 2 2 .
1=box 3
2=box 9
3=row 6
4=single
Now let's look at how this has applied to some of the "fish" I have posted:
- Code: Select all
1 . . | 1X . . | . . .
. 1X 1 | . 1- . | . . 1X
1 1X . | 1X . . | . 1X .
---------+----------+---------
. 1X . | 1X 1 . | . . .
. . . | . . . | 1 . .
. . 1 | . 1 . | . . .
---------+----------+---------
. . . | . . 1 | . 1X .
1 . 1 | . . . | . 1X 1X
1 . 1 | . . 1 | . . 1X
- Code: Select all
1 . . | 15 . . | . . .
. 13 1 | . 1- . | . . 13
1 12 . | 12 . . | . 12 .
---------+----------+---------
. 14 . | 14 1 . | . . .
. . . | . . . | 1 . .
. . 1 | . 1 . | . . .
---------+----------+---------
. . . | . . 1 | . 11 .
1 . 1 | . . . | . 11 11
1 . 1 | . . 1 | . . 11
1=box 9 (4 candidates)
2=row 3 (3 candidates)
3=row 2 (2 candidates)
4=row 4 (2 candidates)
5=single
and we see that the candidate in r2c5 is part of our 3rd overlay sector, and is also seen by our single!
and this one:
- Code: Select all
Cannibalistic Franken-Whale in columns: 3 4 5 6 7 9
19 159 37 | 1368X 1578X 4 | 2 356789 1358X
8 125 37 | 1236X 1257X 9 | 1346X 3567 1345X
129 6 4 | 1238X 1578X 178X | 1389X 35789 1358X
---------------------+----------------------+---------------------
3 4 128X | 7 1268X 5 | 168X 268 9
5 7 128X | 9 4 16X- | 1368X 2368 138X
129 289 6 | 128X 128X 3 | 5 4 7
---------------------+----------------------+---------------------
4 18 9 | 5 368 168X | 7 38 2
6 3 128X | 18X 1789X 278 | 489 589 458
7 28 5 | 4 39 28 | 39 1 6
1 1 . | 1X 1X . | . . 1X
. 1 . | 1X 1X . | 1X . 1X
1 . . | 1X 1X 1X | 1X . 1X
------------+-------------+------------
. . 1X | . 1X . | 1X . .
. . 1X | . . 1X- | 1X . 1X
1 . . | 1X 1X . | . . .
------------+-------------+------------
. 1 . | . . 1X | . . .
. . 1X | 1X 1X . | . . .
. . . | . . . | . 1 .
would look like this:
- Code: Select all
1 1 . | 11 11 . | . . 12
. 1 . | 11 11 . | 12 . 12
1 . . | 11 11 11 | 12 . 12
------------+-------------+------------
. . 14 | . 14 . | 14 . .
. . 13 | . . 13- | 13 . 13
1 . . | 16 16 . | . . .
------------+-------------+------------
. 1 . | . . 17 | . . .
. . 15 | 15 15 . | . . .
. . . | . . . | . 1 .
1=box 2 (7 candidates)
2=box 3 (5 candidates)
3=row 5 (4 candidates)
4=row 4 (3 candidates)
5=row 8 (3 candidates)
6=box 5/row 6 (2 candidates)
7=single
Now why suddenly allow cannibalistic behavior? If the argument was that our single (7) sees our overlay-sector 3, this is not valid, because that candiate is part of the "fish" here. (row 5) However, since we can make the argument hold with sector 6 (box 5) and our single, the elimination is valid after all! So even if the elimination (r5c6) is part of the "fish", it is not part of the fish in our sector 6, and then we can do the elimination anyway!
finally this one:
- Code: Select all
Franken-Squirmbag in columns: 1 2 4 5 7
258X 28X 3 | 6 1458X 14 | 48X 9 7
1 78X 4578 | 58X 9 45 | 6 2 3
6 9 48 | 2 7 3 | 1 48 5
------------------+-------------------+------------------
3 128X 6 | 1458X 2458X 245 | 7 145 9
28X 5 278- | 147 3 9 | 248X 6 1248
4 1278X 9 | 1578X 258X 6 | 3 15 128
------------------+-------------------+------------------
9 3 1 | 45 245 8 | 245 7 6
7 4 258 | 3 6 125 | 9 18 128
258X 6 258 | 9 1245 7 | 2458X 3 1248
8X 8X . | . 8X . | 8X . .
. 8X 8 | 8X . . | . . .
. . 8 | . . . | . 8 .
---------+----------+---------
. 8X . | 8X 8X . | . . .
8X . 8- | . . . | 8X . 8
. 8X . | 8X 8X . | . . 8
---------+----------+---------
. . . | . . 8 | . . .
. . 8 | . . . | . 8 8
8X . 8 | . . . | 8X . 8
- Code: Select all
81 81 . | . 81 . | 81 . .
. 84 8 | 84 . . | . . .
. . 8 | . . . | . 8 .
---------+----------+---------
. 83 . | 82 82 . | . . .
83 . 8- | . . . | 86 . 8
. 83 . | 82 82 . | . . 8
---------+----------+---------
. . . | . . 8 | . . .
. . 8 | . . . | . 8 8
85 . 8 | . . . | 85 . 8
1=row 1 (4 candiates)
2=box 5 (4 candidates)
3=box 4 (3 candidates)
4=row 2 (2 candidates)
5=row 9 (2 candidates)
6=single
Here our single interacts with our sector 3 (box 4), and we can do the elimination!
So that's it! The principle picks up on a lot of stuff, and could easily be extended to fish of size 8... I have only ever searched for size 6, but they do seem to pop up...
The rules about choosing rows and columns before boxes, and by picking them after their size is something that I have found generally gives better results. While you could number your sectors any way you like, "wrong" numbering would very often give no eliminations. However, I would not be surprised to find that in some special cases, a better procedure might be chosen!
Have fun with it!
Havard