ハイパーロボットの解法のアプリ上での実装についてのメモ
ハイパーロボットの説明書には、
"Note: Most situations on the gameboard can be solved in less than 10 moves; but sometimes, a situation will arise that requires 20 or more moves."
「ほとんどの盤面は10手以下で解けます。ただし、時々20手以上かかるような盤面もあり得ます。」
とあります。ハイパーロボットや直進パズルオンラインをやったことがある人はわかると思いますが、10手以下ばかりの解法を思いつき続けることはないと思います。(それができる人はすごく上手です!)
果たして本当にそうなのか、プログラムを書いてみました。日頃慣れているpythonで書いてみたところ、わりとすんなり動くものは作れました。基本的には総当たりで、なるべく効率よく解けるように実装しました。それで実際問題を解かせてみると、見事に10手以下の解がほとんどでした。すごい。
せっかく書いたし、直進パズルオンラインにはシングルプレイがあるので、答えを表示できるようにして、答えを見るためにリワード広告を見る必要がある、という実装をしようとしてみたところ、unity editor上でさえ動きが止まってたまにフリーズしたりするので、スマホ上ならなおさら負荷が大きすぎてダメなのでは?と思い、一旦作業を中断しました。
ただ、google playにはRicochet Robot Solverというハイパーロボット(ricochet robot)の問題を解くアプリがあることを思い出しました。インストールして動かしてみたところ、google chrome上で動かしていると表示されました。更に、コードはgithub上にあると書いています。なので最初はスマホアプリ内で計算しているのではなく、どこかのサーバで計算して結果だけダウンロードしているのか?と思ったのですが、そうではないようです。(オフラインで起動しても解いてくれる)ということはスマホで十分計算できるということなので、私のunity上でのコーディングが間違っているか、私の考えているアルゴリズムが負荷が大きすぎるのか、ということになる気がするのですが、今はよくわかっていません。
ちょっと頭を冷やそう・・・。
もし実装がうまくいったらこのブログでも内容の解説をしたいと思っています。
コメント
コメントを投稿