Perhaps now that we have gotten used to avoiding deadly patterns using URs, we will be a little more comfortable avoiding the deadly pattern represented by the broken wing.
- Code: Select all
NoFish7
.------------------.------------------.------------------.
| 123 8 57 | 6 4 125 | 9 12 237 |
| 6 12 57 | 358 9 1258 | 157 4 2378 |
| 123 9 4 | 1358 12358 7 | 15 6 238 |
:------------------+------------------+------------------:
| 7 15 9 | 158 158 6 | 2 3 4 |
| 8 25 3 | 9 25 4 | 6 7 1 |
| 4 6 12 | 12 7 3 | 8 9 5 |
:------------------+------------------+------------------:
| 12 7 8 | 4 6 125 | 3 125 9 |
| 5 4 12 | 1237 13 9 | 17 8 6 |
| 9 3 6 | 1578 1258 1258 | 4 125 27 |
'------------------'------------------'------------------'
a1 . . | . . a1 | . a1 .
. b1 . | . . A1 | 1 . .
A1 . . | 1 1 . | 1 . .
---------+---------+---------
. B1 . | 1 1 . | . . .
. . . | . . . | . . .
. . b1 |B1 . . | . . .
---------+---------+---------
a1 . . | . . a1 | . a1 .
. . 1 | 1 1 . | 1 . .
a. . . |-1 1 a1 | . a1 .
This is a simple kracken type of chain...
(1)r179/c168 = (1)r2c6|r3c1 - (1)r2c2 = (1)r4c2 - (1)r6c3 = (1)r6c4
- Code: Select all
a2 . . | . . 2 | . -2 2
. X2 . | . . 2 | . . 2
X2 . . | . X2 . | . . a2
---------+---------+---------
. . . | . . . | . . .
. X2 . | . X2 . | . . .
. . 2 | 2 . . | . . .
---------+---------+---------
2 . . | . . 2 | . B2 .
. . 2 | 2 . . | . . .
. . . | . A2 2 | . b2b-2
I have noticed that these broken wings are examples of impossible swordfish groups. When this is true, you have a few options. You can assume one of the cells outside the group sharing a row with the group is true; you can do the same for columns; or you can assume one of the candidates outside the fish group breaking the odd loop of conjugates is true. The last seems to be the most efficient way for these (often the only way). Of course if we know one of a set of candidates must be true, we can group them and form a strong link. Thus we have...
(2)r235/c125 is FALSE => (2)r1c1|r3c9 = (2)r9c5 - (2)r9c89 = (2)r7c8 => r1c8 <> 2.
- Code: Select all
NoFish8
.------------------.------------------.------------------.
| 14 9 8 | 247 247 5 | 3 12 6 |
| 15 7 6 | 289 3 289 | 4 59 12 |
| 345 345 2 | 1 46 69 | 7 59 8 |
:------------------+------------------+------------------:
| 8 234 1 | 5 24 7 | 9 6 23 |
| 2349 6 5 | 2349 1 239 | 28 238 7 |
| 239 23 7 | 23689 268 23689| 1 4 5 |
:------------------+------------------+------------------:
| 7 1 4 | 2368 5 2368 | 268 238 9 |
| 25 258 9 | 23678 2678 4 | 268 1238 13 |
| 6 28 3 | 28 9 1 | 5 7 4 |
'------------------'------------------'------------------'
. . . |A2 X2 . | . X2 .
. . . | 2 . 2 | . . X2
. . . | . . . | . . .
---------+---------+---------
. a2 . | . X2 . | . . X2
2 . . | 2 . 2 | 2 2 .
2 -2 . | 2 a2 2 | . . .
---------+---------+---------
. . . | 2 . 2 | 2 2 .
2 2 . | 2 A2 . | 2 2 .
. B2 . |b2 . . | . . .
(2)r124/c589 is FALSE => (2)r4c2|r6c5 = (2)r1c4|r8c5 - (2)r9c4 = (2)r9c2
- Code: Select all
NoFish9
.------------------.------------------.------------------.
| 6789 16789 679 | 5 4 78 | 178 3 2 |
| 34 178 34 | 178 6 2 | 9 178 5 |
| 78 2 5 | 178 9 3 | 4 6 178 |
:------------------+------------------+------------------:
| 5 67 1 | 3 8 9 | 2 4 67 |
| 389 4 39 | 2 7 6 | 18 5 138 |
| 2 678 367 | 4 1 5 | 678 9 3678 |
:------------------+------------------+------------------:
| 1467 3 467 | 9 2 478 | 5 178 1678 |
| 679 79 2 | 678 5 1 | 3 78 4 |
| 1467 5 8 | 67 3 47 | 167 2 9 |
'------------------'------------------'------------------'
C7 c7 C7B'| . .da7 |a7 . .
. c7 . |D7 . . | . 7 .
c7 . .B'|D7 . . | . . 7B'
----------+---------+---------
. B7 . | . . . | . . b7b'
. . . | . . . | . . .
. 7 7b'| . . . |A7 . 7b'
----------+---------+---------
7 . 7B'| . . a7 | . 7 7B'
7 7 . | 7 . . | . 7 .
7 . . |-7 . a7 |a7 . .
This one is ugly. Perhaps someone else can find something better. It does highlight a neat little trick though. Note that when you have multiple elements strongly linked, it doesn't matter if you move one of them from one side of the strong link to the other. Thus in my opening link I have one of the candidates that escape an X-wing on the same side as the X-wing. I repeat this trick in the latter branch as well.
- Code: Select all
------ r4c9 = r4c2 ------
/ \
r19/c67|r7c6 = r6c7 r12c2|r3c1 = r1c13 - r1c6 = r23c4
\ /
r4c9|r6c29 = r1c3|r37/c39
One of the endpoints must be true, so r9c4 <> 7
- Code: Select all
NoFish10
.------------------.------------------.------------------.
| 678 2 78 | 468 1 9 | 3 47 5 |
| 5678 578 9 | 2 3 468 | 68 47 1 |
| 1 3 4 | 7 568 568 | 689 2 69 |
:------------------+------------------+------------------:
| 2789 789 278 | 5 4 78 | 1 6 3 |
| 3 4 6 | 9 2 1 | 7 5 8 |
| 78 1 5 | 68 678 3 | 2 9 4 |
:------------------+------------------+------------------:
| 24 579 3 | 1 567 24 | 569 8 679 |
| 25789 6 278 | 3 578 2578 | 4 1 79 |
| 4578 578 1 | 468 9 45678| 56 3 2 |
'------------------'------------------'------------------'
a8 . X8 |X8 . . | . . .
8 8 . | . . A8 | 8 . .
. . . | . X8 A8 | 8 . .
---------+---------+---------
B8 B8 B8a| . . -8b| . . .
. . . | . . . | . . .
-8 . . | 8 a8 . | . . .
---------+---------+---------
. . . | . . . | . . .
a8 . X8 | . X8 A8 | . . .
8 8 . | 8 . 8 | . . .
(8)r138/c345 is FALSE => (8)r18c1|r4c3|r6c5 = (8)r238c6 - (8)r4c6 = (8)r4c123 => r6c1 <> 8
- Code: Select all
NoFish11
.------------------.------------------.------------------.
| 248 3 25 | 48 9 458 | 1 6 7 |
| 578 578 9 | 6 578 1 | 3 4 2 |
| 467 467 1 | 2 47 3 | 9 8 5 |
:------------------+------------------+------------------:
| 24678 4678 3 | 478 248 9 | 5 1 68 |
| 2678 5678 25 | 3 1 27 | 46 9 468 |
| 1 9 48 | 5 6 48 | 7 2 3 |
:------------------+------------------+------------------:
| 3 458 6 | 19 458 458 | 2 7 19 |
| 459 1 7 | 49 245 26 | 8 3 469 |
| 489 2 48 | 14789 3 67 | 46 5 1469 |
'------------------'------------------'------------------'
-4 . . |B4 .aB4 | . . .
. . . | . . . | . . .
4 a4 . | .b-4 . | . . .
---------+---------+---------
a4 X4 . |X4 A4 . | . . .
. . . | . . . | 4 . 4
. . 4 | . . X4 | . . .
---------+---------+---------
. X4 . | . A4 X4 | . . .
4 . . | 4 4 . | . . 4
4 . 4 | 4 . . | 4 . 4
(4)r467/c246 is FALSE => (4)r1c6|r3c2|r4c1 = (4)r47c5 - (4)r3c5 = (4)r1c46 => r1c1 <> 4
- Code: Select all
b-8 . . | 8 . a8 | . . .
b8 B8 . | . -8 . | . . .
. . . | . . . | . . .
---------+---------+---------
8 8 . | 8 8 . | . . 8
8 8 . | . . . | . . 8
. . X8 | . . X8 | . . .
---------+---------+---------
. 8 . | . a8 X8 | . . .
. . . | . . . | . . .
A8 . X8 |X8 . . | . . .
(8)r679/c346 is FALSE => (8)r1c6|r7c5 = (8)r9c1 - (8)r12c1 = (8)r2c2 => r2c5 <> 8
Some notes: The broken wing cases here reduced to a broken swordfish with only 2 candidates in the box where 4 are possible. You could also have a broken swordfish with 3 candidates in that box, and perhaps similar reductions. Also this could possibly be expanded to a broken jellyfish or other constraint group.
[edit - fixed a missing candidate in NoFish 10]