« 制約ソルバーにスリザーリンクを解かせる話 | トップページ | ナンプレ破りバージョン0.7 »

2013年10月 1日 (火)

ナンプレ(数独)を解くAndroidアプリ

前の記事にも書いたとおり、SATソルバーで実用的にパズルが解けるということを知って驚いたのですが、その後、いろいろと試しました。それまで作っていたスリザーリンクを解くプログラムのエンジン部分を、SATソルバーベースのものに置き換えたりもしました。でも、なんか、遅いのです。

前回の記事を書いた時点ではわかっていませんでしたが、制約条件ソルバーとかSATソルバーとかいうものは、必要十分な制約条件を書けばそれでいいわけではなくて、解きやすい条件の書き方をしてやらないといけないようなのですね。田村さんという方は、そのスジの第一人者らしいのですが、ウェブの記事を詳しく読むと、その田村さんでもスリザーリンクを効率的に解くためには、それなりに苦労して条件を書いている模様。素人がちょっとやっても、なかなか難しいらしいことがわかりました。

そこで、とりあえず、スリザーリンクよりもずっとSAT向きらしいナンプレに挑戦してみました。(ナンバープレースとか数独とも呼ばれているパズルですね。)

ちょっと試したところ、ナンプレは、あまり工夫なく素朴に制約条件が書ける上、素朴な条件でもかなり高速に求解してくれることがわかりました。そこで、そのロジックに簡単なGUIをつけて、アンドロイドアプリにしてみました。

まだ未完成なのですが、とりあえず遊べる(?)ようになったので公開します。予定機能が全部できたら、Google Playで配るつもりですが、今のところはノラ配布です。例によってSkyDriveに置いてありますので、興味のある方は以下のリンクからダウンロードしてお試しください。Android 2.2以降なら動作するはずです。

number-place-breaker-006.apk

SkyDriveは、いろいろと凝ったつくりになっていて、よくトラブルを起こすわけですが、上のリンクも波乱があり、手持ちのアンドロイドデバイスで試したところ、4機種試しても1台もうまくダウンロードできませんでした。機種によって現象が違うのですが、ダウンロードが終了しなかったり、終了してもパッケージマネージャーでエラーになっちゃったりします。そのため、お手数ですが、パソコンでapkをダウンロードして、それをUSB接続でデバイスにコピーしてからインストールするなどしてお試しください。

Android SDKお使いの方は、adb install でもいけるはずですが、それくらいならソースを配ってますので、ご自分でビルドしてみるほうが面白いかもしれません。

https://github.com/AlissaSabre/NumberPlace

以下、使い方です。

起動すると、からっぽのナンプレの枠が表示されます。

Device20131001221148

画面にタッチして、解きたい問題を入力していきます。

Device20131001221424
全部入力できたら、Solve を押すと、

Device20131001221621
解が表示されます。

Device20131001221850
これくらいの問題だと、一瞬とはいきませんが、数秒で答えが求まります。(この機種は、それなりに昔デバイスなので、最近のアンドロイドケータイなら本当に一瞬かもしれません。)

« 制約ソルバーにスリザーリンクを解かせる話 | トップページ | ナンプレ破りバージョン0.7 »

コメント

コメントを書く

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/285638/53458927

この記事へのトラックバック一覧です: ナンプレ(数独)を解くAndroidアプリ:

» ナンプレ破りバージョン0.7 [Alissa Sabre at Second Life]
前回の記事で紹介したナンプレ(数独)を解くAndroidアプリですが、欠けていた [続きを読む]

« 制約ソルバーにスリザーリンクを解かせる話 | トップページ | ナンプレ破りバージョン0.7 »