イラストロジックの効率の良い解き方

#はじめに

##イラストロジックとは

こういうやつ
![illustlogicexample_p.png](https://qiita-image-store.s3.amazonaws.com/0/321407/48e42289-ca7b-5bb1-fbba-356797828237.png)←問題　解答→![illustlogicexample_a.png](https://qiita-image-store.s3.amazonaws.com/0/321407/4dc6712d-3bcb-db77-d5a6-ee27f5fa88a9.png)
盤面の外の数字はその列における黒マスの長さを順に表している

##この記事はどういう人向けか
ある程度イラストロジックをやったことがあり、基本的な手筋は習得している人向け
イラストロジックをやったことない人は「イラストロジック　解き方」でググると基本的な手筋がまとめられているサイトがあるのでそちらを先に読むべし
パズル得意な人にとってはごく当たり前のことしか書いていません
（対象者層、狭くない、、？）

##その他注意
上で分かる通り表現ガバガバです
細かい理屈は抜きに語っています

#本題

##こう解いていませんか？
![スクリーンショット 2018-11-30 22.45.48.png](https://qiita-image-store.s3.amazonaws.com/0/321407/d837b30e-b428-bc47-e6b1-5cfedd5554d1.png)
こんな列があったときに…

![スクリーンショット 2018-11-30 22.45.48-renew.png](https://qiita-image-store.s3.amazonaws.com/0/321407/b5af639c-8c66-14af-547c-abb485d135da.png)
このように両端に寄せたものを考えれば…

![スクリーンショット 2018-11-30 22.55.09.png](https://qiita-image-store.s3.amazonaws.com/0/321407/6ec9c633-c93a-8d11-20b0-d7f5c615184b.png)
その共通する部分が黒マスになるぞ、わーいってやつ

このようにして端寄せして考えるやり方は解く際の中盤とかでもよく使われますが、特に取っ掛かりのときには多くの場合はこの手筋を使わないと何も始まりません。また、上級問題だと白マスを埋めることも重要ですが、やはり黒マスが決まった方が進歩が大きいです。そういう意味でもこの手筋は最重要と言えるでしょう。

ところが、上のやり方は欠点が…

##1.めんどくさい
いやまあ、上のような10マスならどうってことないですが、多くの場合だと15x15だったり20x20だったり、ましてや商業誌だとバカみたいにでかいサイズのもありますね。こんな大きな盤面においてわざわざ2つの場合を書き下すのは、はっきり言ってやってられないですよ。

##2.間違えやすい
**そもそも上のやり方、間違いがありますよ。**実際は以下のように4が左端に寄って、右端に2が寄る場合があるので、丸で囲った部分は黒マスが入るとは限りません。
![スクリーンショット 2018-11-30 22.45.48renew2.png](https://qiita-image-store.s3.amazonaws.com/0/321407/7be9eaec-8201-dddf-007f-697402657adb.png)

上の例では実際には以下のように1マスしか確定しません。悲C
![スクリーンショット 2018-11-30 23.11.28.png](https://qiita-image-store.s3.amazonaws.com/0/321407/3cc758f3-9447-6754-0010-d4ac2dc929a7.png)

**正しい考え方は、同じヒント数字に対する共通部分は黒マスで確定する**というものです。ここでいうヒント数字は数値だけでなく（その黒マスの塊が）左から何番目にあるかという情報も含めて言っています。例えば以下のように同じ6で被っているから真ん中の2マスは塗れるな〜としてしまうと**OUT**です。
![スクリーンショット 2018-11-30 23.25.46renew.png](https://qiita-image-store.s3.amazonaws.com/0/321407/19683066-4951-2299-9a7b-4060d3f53624.png)
↑ダメ、ゼッタイ

##ではどうすれば…
自由度という概念を導入します。理系チックな堅苦しい表現ですが、ものは至って単純です。**自由度とは、端寄せをしたときに余るマスの個数のことです。**
![スクリーンショット 2018-11-30 22.45.48renew3.png](https://qiita-image-store.s3.amazonaws.com/0/321407/af9a2f1c-8d08-6de8-de38-97b01b9c8034.png)
↑この場合、丸で囲った部分が余ったマス。よって自由度は3

**自由度より大きい**（値の）**ヒント数字が入っている場合、その値から自由度を引いた数の分だけ黒マスを塗ることができます。**左寄せした場合、そのヒント数字に対応する部分の一番右側から塗ります。右寄せの場合はその逆です。なお、自由度以下の（値の）ヒント数字については何も確定しません。
![スクリーンショット 2018-11-30 23.11.28renew5.png](https://qiita-image-store.s3.amazonaws.com/0/321407/e43b7967-3393-4cfe-16de-70fbbc564565.png)
↑ヒント数字4に対しては4-3(自由度)=1で1マス塗ることができる！
　左寄せをしているので右側から1マス塗っている

自由度は計算によって求めることも出来ます。式は
（自由度）=（列の全マス数）- {（ヒント数字の値の総和）+ (（ヒント数字の個数）-1 ) }
です。なんでこんな展開してない面倒な式にしているかというと意味を捉えやすくするためです。例えば（ヒント数字の個数）-1というのは「ヒント数字とヒント数字の間」の個数を実質的には指しています。上の例においてこの式で自由度を求めると、10-((4+2)+(2-1))=3となって確かに上のものと合致します。

なお、慣れると自由度が分かれば端寄せを書き下さなくても塗れるようになるので、計算で自由度を求める方法も実戦的に有効と言えます。どちらが良いかは人によりけりですが、盤面が大きい場合は計算を用いた方が楽だと思います。

**自由度が小さいほど黒マスが確定する可能性、範囲は大きくなります。**自由度0が最高の状態で、この場合は全マス確定します。イラストロジックの取っ掛かりでは自由度が小さい列を見つける、というのが重要になってきます。そのためには上の式からも分かる通り、まずは
**1. ヒント数字の値が大きい列を探す**
**2. ヒント数字の個数が多い列を探す**
のが良いでしょう。

##練習問題
自由度を求めることで確定する黒マスを塗ろう！
1.　![スクリーンショット 2018-12-01 0.19.16.png](https://qiita-image-store.s3.amazonaws.com/0/321407/680350be-fb55-2e9e-a5bd-b7abe6678a1f.png)


2.　![スクリーンショット 2018-12-01 0.15.03.png](https://qiita-image-store.s3.amazonaws.com/0/321407/edc944fe-d51a-94c9-40cd-b329070a2fdc.png)

3.　![スクリーンショット 2018-12-01 0.16.18.png](https://qiita-image-store.s3.amazonaws.com/0/321407/37813ddd-a2a7-0fbc-d5bb-8cf2f1e590ba.png)


#まとめ
##結論
自由度ってすごい！

##で、なんでこんなの書いたの？
イラストロジックの解き方を解説しているサイトに（自分が見たなかでは）全然自由度のことについて触れられてなかったから…
一応wikipediaには備考にこんなことが多少書かれてた

##最後に
これを参考に自分なりのやり方をみつけてくれよな
ちなみに記事主はイラロジが作れなくて困ってる、てか絵が描けない