DTP関連のIT技術者。システム開発など
運営:嵐山デザインガレージ合同会社たけうちとおるのスクリプトノート| ファイナンシャルプランナー| 著書(Amazon)
スポンサーリンク
グループXサイクル
X-サイクルは1つの数字1つのセルでチェーンをつないで行くのですが、いくつかの数字をグループにして考えるバージョンです。
F 12 | F 12 5 | 4 | 9 | 3 | 8 | 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]=強=>[1]=弱=>[1]=強=>[1,1]=弱=>[1](OFFスタート)
[1]=強=>[1]=弱=>[?,?]=強=>[?]=弱=>[?]=強=>[1,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 | 5 | 12 7 | 23 8 | 4 | 9 |
7 | 23 5 8 | 9 | 12 | 6 | 4 | 123 5 8 | 12 5 | 23 |
12 | 12 5 | 4 | 9 | 3 | 8 | 12 5 7 | 6 | 2 7 |
6 | 9 | 7 | 3 4 | 2 | 5 | 3 4 | 8 | 1 |
3 | 12 4 | 8 | 1 4 6 7 | 4 7 | 1 7 | 2 4 6 7 | 9 | 5 |
12 4 | 12 4 | 5 | 1 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 |
5 | 1 4 78 | 2 | 4 78 | 4 789 | 7 9 | 1 4 7 9 | 3 | 6 |
4 9 | 4 7 | 3 | 2 5 | 1 | 6 | 2 45 7 9 | 2 5 7 | 8 |
ルール2
Xサイクル・グループXサイクルどちらも最後は弱リンクでいいのですがもし強リンクでしかもチェーンの数が奇数の場合ルール2が成立します。
[1]=強=>[1]=弱=>[1,1]=強=>[1]=弱=>[1]=強=>[1,1]=弱=>[1]=強=>[1](OFFスタート)
最後のセル=最初のセルなので最初OFFでスタートしているにもかかわらず最後がONになってしまいます。
矛盾するので最初がOFFということにはならずに最初のセルは[ON]で確定します。
ルール3
Xサイクル・グループXサイクルどちらも最後は弱リンクでいいので、[弱]=>[弱]となる場合がでてきます。上と同様チェーンの数が奇数の場合で最後が[弱]=>[弱]の場合ルール3が成立します。
[1]=強=>[1]=弱=>[1,1]=強=>[1]=弱=>[1]=強=>[1,1]=弱=>[1]=弱=>[?](OFFスタート)
[1]=強=>[1]=弱=>[?,?]=強=>[?]=弱=>[?]=強=>[?,?]=弱=>[1]=弱=>[1](ONスタート)
最後のセル=最初のセルなのでONスタートの場合逆回りも考えます。最後のセルのとなりはOFFとなります。
OFFスタートでもONスタートでも[弱]=>[弱]で挟まれた最後のセルの1つまえは必ず[OFF]になります。
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 | 3 | 7 | 1 | 6 | D 45 8 | 2 |
12 5 | 1 45 8 | 7 | 6 | 2 45 8 | 45 8 | E 1 5 8 | 3 | 9 |
B 12 5 8 | 6 | 3 | 45 | 2 5 89 | 5 89 | 7 | 1 5 8 | 1 45 |
A 1 5 8 | 3 | 4 | 7 | 1 5 9 | 6 | 2 | G 89 | 1 5 |
7 | 1 5 8 | 2 | 1 45 | 3 | 5 9 | F 89 | 6 | 1 45 |
1 5 | 9 | 6 | 8 | 1 4 | 2 | 3 | 1 45 | 7 |
4 | 5 8 | 1 5 8 | 2 | 6 | 7 | 1 5 9 | 1 5 9 | 3 |
6 | 2 | 9 | 1 5 | 1 5 | 3 | 4 | 7 | 8 |
3 | 7 | 1 5 | 9 | 4 8 | 4 8 | 1 5 | 2 | 6 |
ABC...はチェーンの順番です。
9 | 45 8 | 5 8 | 3 | 7 | 1 | 6 | 45 8 | 2 |
12 5 | 1 45 8 | 7 | 6 | 2 45 8 | 45 8 | 1 5 8 | 3 | 9 |
12 5 8 | 6 | 3 | 45 | 2 5 89 | 5 89 | 7 | 1 5 8 | 1 45 |
8 | 3 | 4 | 7 | 1 5 9 | 6 | 2 | 89 | 1 5 |
7 | 1 5 8 | 2 | 1 45 | 3 | 5 9 | 89 | 6 | 1 45 |
1 5 | 9 | 6 | 8 | 1 4 | 2 | 3 | 1 45 | 7 |
4 | 5 8 | 1 5 8 | 2 | 6 | 7 | 1 5 9 | 1 5 9 | 3 |
6 | 2 | 9 | 1 5 | 1 5 | 3 | 4 | 7 | 8 |
3 | 7 | 1 5 | 9 | 4 8 | 4 8 | 1 5 | 2 | 6 |
グループ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 | 8 | 12 4 9 | 123 4 9 | 1 3 4 6 |
8 | 1 4 | 12 6 | 9 | 3 | 7 | 5 | 12 4 | 1 4 6 |
1 56 9 | 3 | 12 56 9 | 12 56 | 4 | E 12 5 | 12 9 | 8 | 7 |
4 | 9 | 1 6 | 7 | 12 | 3 | 12 6 | 5 | 8 |
1 5 7 | 8 | 3 | 12 5 | 9 | 6 | 12 4 7 | 12 4 7 | 1 4 |
56 7 | 2 | 1 56 | 8 | 1 5 | 4 | 3 | 1 6 7 | 9 |
3 | C 1 5 7 | 8 | 4 | 6 7 | D 1 5 | 1 6 9 | 1 6 9 | 2 |
1 9 | 6 | 1 45 9 | 12 5 | 8 | 12 5 | 1 4 7 | 1 3 4 7 | 1 3 4 |
2 | 1 7 | 1 4 | 3 | 6 7 | 9 | 8 | 1 4 6 | 5 |
ABC...はチェーンの順番です。
1 6 9 | 1 45 | 7 | 12 56 | 12 5 | 8 | 12 4 9 | 123 4 9 | 1 3 4 6 |
8 | 1 4 | 12 6 | 9 | 3 | 7 | 5 | 12 4 | 1 4 6 |
1 56 9 | 3 | 12 56 9 | 12 56 | 4 | 12 5 | 12 9 | 8 | 7 |
4 | 9 | 1 6 | 7 | 12 | 3 | 12 6 | 5 | 8 |
1 5 7 | 8 | 3 | 12 5 | 9 | 6 | 12 4 7 | 12 4 7 | 1 4 |
56 7 | 2 | 1 56 | 8 | 1 5 | 4 | 3 | 1 6 7 | 9 |
3 | 1 5 7 | 8 | 4 | 6 7 | 1 5 | 1 6 9 | 1 6 9 | 2 |
1 9 | 6 | 1 45 9 | 12 5 | 8 | 12 5 | 1 4 7 | 1 3 4 7 | 1 3 4 |
2 | 1 7 | 1 4 | 3 | 6 7 | 9 | 8 | 1 4 6 | 5 |
R1C1 | R1C2 | R1C3 | R1C4 | R1C5 | R1C6 | R1C7 | R1C8 | R1C9 |
R2C1 | R2C2 | R2C3 | R2C4 | R2C5 | R2C6 | R2C7 | R2C8 | R2C9 |
R3C1 | R3C2 | R3C3 | R3C4 | R3C5 | R3C6 | R3C7 | R3C8 | R3C9 |
R4C1 | R4C2 | R4C3 | R4C4 | R4C5 | R4C6 | R4C7 | R4C8 | R4C9 |
R5C1 | R5C2 | R5C3 | R5C4 | R5C5 | R5C6 | R5C7 | R5C8 | R5C9 |
R6C1 | R6C2 | R6C3 | R6C4 | R6C5 | R6C6 | R6C7 | R6C8 | R6C9 |
R7C1 | R7C2 | R7C3 | R7C4 | R7C5 | R7C6 | R7C7 | R7C8 | R7C9 |
R8C1 | R8C2 | R8C3 | R8C4 | R8C5 | R8C6 | R8C7 | R8C8 | R8C9 |
R9C1 | R9C2 | R9C3 | R9C4 | R9C5 | R9C6 | R9C7 | R9C8 | R9C9 |
Rは行(Y軸)、Cは列(X軸)となっています。(Row、Column)
DTP関連のIT技術者。システム開発など
運営:嵐山デザインガレージ合同会社