エクストリーム問題

グループXサイクル
X-サイクルは1つの数字1つのセルでチェーンをつないで行くのですが、いくつかの数字をグループにして考えるバージョンです。

F
12 
   
   
F
12 
 5 
   
4938
E
12 
 5 
7  
6 2 
   
7  

上の場合はXサイクルだと弱リンクとなりますが
左の2つを1つの数字と考えるとグループXサイクルでは強リンクになります。

C
12 
45 
7 9
C
12 
 5 
7  
 2 
4  
7  
D
1  
4  
7 9
3 6
 2 
45 
7 9
 2 
 5 
7  
8

上の場合は上段2つと中段1つが強リンクとして考えます。
また左列2つと中央の列1つも強リンクです。

グループにする数字があると候補が増える分X-サイクルよりもたくさんの可能性が広がります。
具体的にはX-サイクル同様 強リンク->弱リンク->強リンク->弱リンクとつないでいき最初のセルに戻るチェーンを探します。
最後だけは弱リンクでも構いません。そうすることによって、
[]=強=>[1]=弱=>[,]=強=>[1]=弱=>[]=強=>[1,1]=弱=>[](OFFスタート)
[1]=強=>[]=弱=>[?,?]=強=>[?]=弱=>[?]=強=>[,]=弱=>[1](ONスタート)
の2パターンが考えられいずれの場合も[1]を削除できるセルを探します。
最後のセル=最初のセルなのでONスタートの場合逆回りも考えます。最後のセルのとなりはOFFとなります。

例:下図は[1]のグループXサイクルです。Xサイクル同様スタートに[1]が入らない場合チェーンがつながり1周します。
[R1C3]=強=>[R7C3]=弱=>[R7C7,R7C8]=強=>[R8C7]=弱=>[R3C7]=強=>[R3C1,R3C2]=弱=>[R1C3]で
スタートがOFFの時のONになるチェーン:[R7C3][R8C7][R3C1,R3C2]と
スタートONの時[R1C3]のどちらの場合も共通で削除できるセルが発生します。
問題を解くときはメモ機能を活用しましょう。

グループXサイクル

ABC...はチェーンの順番です。

いずれの場合も[R1C1][R1C2]には[1]は入れません

12 
   
 8 
123
  6
 8 
1  
  6
   
12 
   
7  
512 
   
7  
 23
   
 8 
49
7 23
 5 
 8 
912 
   
   
64123
 5 
 8 
12 
 5 
   
 23
   
   
12 
   
   
12 
 5 
   
493812 
 5 
7  
6 2 
   
7  
697  3
4  
   
25  3
4  
   
81
312 
4  
   
81  
4 6
7  
   
4  
7  
1  
   
7  
 2 
4 6
7  
95
12 
4  
   
12 
4  
   
51 3
4 6
78 
   
4  
789
1 3
   
7 9
 23
4 6
7  
 2 
   
7  
 23
4  
7  
1  
4  
 89
   
4 6
78 
1  
  6
   
 23
 5 
   
   
4  
789
 23
   
   
12 
45 
7 9
12 
 5 
7  
 2 
4  
7  
51  
4  
78 
2   
4  
78 
   
4  
789
   
   
7 9
1  
4  
7 9
36
   
4  
  9
   
4  
7  
3 2 
 5 
   
16 2 
45 
7 9
 2 
 5 
7  
8

ルール2
Xサイクル・グループXサイクルどちらも最後は弱リンクでいいのですがもし強リンクでしかもチェーンの数が奇数の場合ルール2が成立します。
[]=強=>[1]=弱=>[,]=強=>[1]=弱=>[]=強=>[1,1]=弱=>[]=強=>[1](OFFスタート)
最後のセル=最初のセルなので最初OFFでスタートしているにもかかわらず最後がONになってしまいます。
矛盾するので最初がOFFということにはならずに最初のセルは[ON]で確定します。

ルール3
Xサイクル・グループXサイクルどちらも最後は弱リンクでいいので、[弱]=>[弱]となる場合がでてきます。上と同様チェーンの数が奇数の場合で最後が[弱]=>[弱]の場合ルール3が成立します。
[]=強=>[1]=弱=>[,]=強=>[1]=弱=>[]=強=>[1,1]=弱=>[]=弱=>[?](OFFスタート)
[1]=強=>[]=弱=>[?,?]=強=>[?]=弱=>[?]=強=>[?,?]=弱=>[]=弱=>[1](ONスタート)
最後のセル=最初のセルなのでONスタートの場合逆回りも考えます。最後のセルのとなりはOFFとなります。
OFFスタートでもONスタートでも[弱]=>[弱]で挟まれた最後のセルの1つまえは必ず[OFF]になります。

成立条件
  • 強リンクを探し強リンクの多い数字をあたってみる
  • 強リンク・弱リンク・強リンク・弱リンクとなるよう順番にチェーンを繋いで行く
  • 1行・1列にならんでいる場合はその方向のグループとして考える
  • 2つのチェーンに共通して消せる候補を消す
  • チェーンの数が奇数なら最後が強リンクの場合最初のセルは[OFF]となる(ルール2)
  • チェーンの数が奇数なら最後が弱リンクの場合最最後のセルの1つ前は[OFF]となる(ルール3)

TINY24さんからのアドバイスをいただきプログラムを作ったのですが、実装するのにとんでもなく時間がかかりました。チェーンは作れてもsudokuwikiの回答を再現しなかったり修正すると前に動いていたのが解けなくなったりです。
プログラム的に難しかったのですが、グループをある方向から見る場合1つのセルのように考えるというアドバイスで考えをまとめることができました。
ただX-サイクルのルール2・ルール3を見落としていてので結局X-サイクルに戻っての修正となりました。ついでにWXYZのバグも出てきて苦労しただけに思い入れも強くなりました。
まずは強リンク・弱リンクの数を数えて強リンク・弱リンクが多いものから当たっていきます。チェーンの長さは10未満にしました。
さらにチェーンの長さを考慮に入れつつ優先するチェーンを探しています。ルール3は後回しで検索するようになっています。
それでもsudokuwikiの最後の例題はほかのチェーンを先に見つけてしまい解けませんでした。このチェーンを見つけるよう調整するとこんどは他の例題がおかしくなりました。

グループXサイクルのルール2で[8]が:[R4C1]=強=>[R3C1]=弱=>[R1C2]=強=>[R1C8]=弱=>[R2C7]=強=>[R5C7]=強=>[R4C8]=強=>[R4C1]で成立
チェーンの数が奇数で最後が強リンクのためスタートがOFFの時一周するとスタートがONになり矛盾します
そのためスタートセルは[8]で確定します。

グループXサイクル

9
C
   
45 
 8 
C
   
 5 
 8 
3716
D
   
45 
 8 
2
12 
 5 
   
1  
45 
 8 
76 2 
45 
 8 
   
45 
 8 
E
1  
 5 
 8 
39
B
12 
 5 
 8 
63   
45 
   
 2 
 5 
 89
   
 5 
 89
71  
 5 
 8 
1  
45 
   
A
1  
 5 
 8 
3471  
 5 
  9
62
G
   
   
 89
1  
 5 
   
71  
 5 
 8 
21  
45 
   
3   
 5 
  9
F
   
   
 89
61  
45 
   
1  
 5 
   
9681  
4  
   
231  
45 
   
7
4   
 5 
 8 
1  
 5 
 8 
2671  
 5 
  9
1  
 5 
  9
3
6291  
 5 
   
1  
 5 
   
3478
371  
 5 
   
9   
4  
 8 
   
4  
 8 
1  
 5 
   
26

ABC...はチェーンの順番です。

9   
45 
 8 
   
 5 
 8 
3716   
45 
 8 
2
12 
 5 
   
1  
45 
 8 
76 2 
45 
 8 
   
45 
 8 
1  
 5 
 8 
39
12 
 5 
 8 
63   
45 
   
 2 
 5 
 89
   
 5 
 89
71  
 5 
 8 
1  
45 
   
83471  
 5 
  9
62   
   
 89
1  
 5 
   
71  
 5 
 8 
21  
45 
   
3   
 5 
  9
   
   
 89
61  
45 
   
1  
 5 
   
9681  
4  
   
231  
45 
   
7
4   
 5 
 8 
1  
 5 
 8 
2671  
 5 
  9
1  
 5 
  9
3
6291  
 5 
   
1  
 5 
   
3478
371  
 5 
   
9   
4  
 8 
   
4  
 8 
1  
 5 
   
26

グループXサイクルのルール3で[5]が:[R1C4,R1C5]=強=>[R1C2]=強=>[R7C2]=強=>[R7C6]=弱=>[R3C6]=弱=>[R1C4,R1C5]で成立 チェーンの数が奇数で最後と最後から2つめが弱リンクのためスタートがOFFでもONでも[R2C5]に[5]を入れることはできません。

グループXサイクル

1  
  6
  9
B
1  
45 
   
7
A
12 
 56
   
A
12 
 5 
   
812 
4  
  9
123
4  
  9
1 3
4 6
   
81  
4  
   
12 
  6
   
937512 
4  
   
1  
4 6
   
1  
 56
  9
312 
 56
  9
12 
 56
   
4
E
12 
 5 
   
12 
   
  9
87
491  
  6
   
712 
   
   
312 
  6
   
58
1  
 5 
7  
8312 
 5 
   
9612 
4  
7  
12 
4  
7  
1  
4  
   
   
 56
7  
21  
 56
   
81  
 5 
   
431  
  6
7  
9
3
C
1  
 5 
7  
84   
  6
7  
D
1  
 5 
   
1  
  6
  9
1  
  6
  9
2
1  
   
  9
61  
45 
  9
12 
 5 
   
812 
 5 
   
1  
4  
7  
1 3
4  
7  
1 3
4  
   
21  
   
7  
1  
4  
   
3   
  6
7  
981  
4 6
   
5

ABC...はチェーンの順番です。

1  
  6
  9
1  
45 
   
712 
 56
   
12 
 5 
   
812 
4  
  9
123
4  
  9
1 3
4 6
   
81  
4  
   
12 
  6
   
937512 
4  
   
1  
4 6
   
1  
 56
  9
312 
 56
  9
12 
 56
   
412 
 5 
   
12 
   
  9
87
491  
  6
   
712 
   
   
312 
  6
   
58
1  
 5 
7  
8312 
 5 
   
9612 
4  
7  
12 
4  
7  
1  
4  
   
   
 56
7  
21  
 56
   
81  
 5 
   
431  
  6
7  
9
31  
 5 
7  
84   
  6
7  
1  
 5 
   
1  
  6
  9
1  
  6
  9
2
1  
   
  9
61  
45 
  9
12 
 5 
   
812 
 5 
   
1  
4  
7  
1 3
4  
7  
1 3
4  
   
21  
   
7  
1  
4  
   
3   
  6
7  
981  
4 6
   
5