PC用解析君はコチラ
問題のアプリです
https://itunes.apple.com/jp/app/andrpzsolve/id580792881?l=ja&ls=1&mt=8
https://play.google.com/store/apps/details?id=net.onionsoft.hsptv.pdroute
アプリの名前柄、流行りに便乗して多くのユーザーにダウンロードしてもらったという形になったわけですが、
まぁ予想通りではあったが、計算速度があまりに遅すぎるというご指摘を多く頂きました。
その割にはちゃんと評価してくださっているユーザーもいて、親切だなとも思ったというのが感想です。
では早速、このアプリの問題点を全て挙げてみましょう
1、計算速度が遅すぎる
2、スクリーンショット取り込みができない
3、iphone、ipadだとメニュー画面に戻れない
4、androidでは計算中に強制終了画面がでる
1、計算速度が遅い
一番の原因は「全経路検索」をしているためです。
数学に「場合の数」という概念があります。
数学的に考えるなら、ドロップをあるルートで動かしたとき、一番コンボ数が多くなる経路を求めるには、すべての場合のルートを確認する必要があります。
ここでルートの最大距離を1マスとしたとき、全ての経路の場合の数は98通りとなります。
とりうる始点は30通り(横6マス×縦5マス)、そこからドロップ移動可能方向の上下左右4をかけ、30×4で120通りとなりますが、欄外にはみ出る経路の場合の数は考慮してはなりません。
例えば始点位置が一番左上の場合、そこから左、上へはもう移動できません。
同じように、ルートの最大距離が2マスとすれば、1マス移動の98通りのルートからさらに1マス上下左右へ移動可能なので4を掛けますが、先ほどと真逆の方向へは移動できません(戻る方向に行けばルート距離が1減るため)。さらに欄外へ行く経路を除外すれば236通りとなります。
以降ルートの場合の数は、 586通り、1452通り、3574通り、8764通り、21412通り、52220通り、127376通り、311224通り、760980通り・・と指数関数的に増えていくわけです。
ルート距離が12マスの場合、全ての経路のとりうる場合の数は1860172通りあります。
ハード的にはだいたいここらまでが限界です。
なぜならここらでスマホの使用メモリが200Mbを超えてしまうからです。
ルート1通りあたりに使うバイト数は、95byte。
内訳は、30個のドロップ(6種類)配列の格納で30byte。
同色ドロップが横2つ続いているときのみ0を表すいわゆる横差分値を格納する変数で30byte、同じく縦でも同じのを作り30byte。
これに加えルートの移動ログを格納する変数で4byte(1マス移動につき2bit)
さらに、ルートの先端部分つまり現在位置を格納する変数で1byte
スマホのメモリ容量は機種によりけりだが、スワップが発生すると劇的に遅くなるのでこれ以上のメモリ使用は難と考えられます。
また計算時間も非常識なものとなります。
1860172通りのルート全てで、コンボが発生するか、発生する場合は何色のドロップが何個何連鎖コンボが発生するかを計算する必要があるので、2.4GhzのノートパソコンのCPUでも3分近くかかります。
スマホのCPUは約1Ghz前後であるしキャッシュもあるのか無いのかよくわからないので、最大12マスの設定で全経路検索をすれば10分近くかかることとなります。
まぁただでさえ非常識な時間なのでこれ以上は不可能でしょう。
全経路検索にしなければ計算時間は劇的に早くなるわけですが、それではコンボの精度が悪化してしまうという欠点があります。
それでも計算速度が早くなる利点は非常に大きいですが、それは以下に示す問題点により、あえて精度をとったという経緯がありました。
2、スクリーンショット取り込みができない
これは、ただただ私の技術不足のため、という一言につきます。
アプリを開発するにあたり、取る方法は2通りあります。
ひとつはHSPdishを使い開発すること、もうひとつはxcodeでobject c、eclipseでjavaを使い開発すること。
後者ではスクリーンショット読み込み機能が実装できます。
私にはHSPで作るしか能力がなく、残念ながらスクリーンショット読み込み機能が実装できませんでした。
また私の機種にはそもそもスクリーンショットを取る機能がなく、そのような機種でもルート解析ができるようにしたいという思いがあったのも事実ですが、やはりスクショ機能はあったに越したことはありません
つまり、ドロップ配列を手動で入力するしかなく、ここでユーザーに多くの労力を強いることが容易に想像できました。
時間と労力をかけて入力しても、計算が一瞬で終わってしまいその割にはたいしたコンボ精度が得られなければ、意味がありません。
時間と労力をかける価値がある状況というのは通常の状況ではあまりありえなく、詰みそうな場合やこの1ターンで戦局が大きく変わる場合など、ここ一番という場面に限られます。
そういうときは、一回だけすごい時間をかけても最大コンボルートを導き出せればいいのですから、計算時間より精度を優先したシステムの方を選択し、結局このような非常識な計算時間になりました。
3、iphone、ipadだとメニュー画面に戻れない
※最新情報で、「ホームボタン二度押し、下の段に出てくるアプリアイコンを消してあげると再度アプリ起動した時に解析できる」ようになっているそうです。
これは評価コメントを見てはじめて気がついたのですが、iphone、ipadの場合、ホームボタンを押したときの動作として、アプリが終了するのではなく、アプリが待機状態になるという性質を理解していないために生まれてしまった不具合でした。申し訳ありません
4、androidでは計算中に強制終了画面がでることがある
これは私が、計算プログラムにwaitを入れるのを忘れたため、タスクがビジー状態になっているためです。
なんという初歩的なミス・・
対策方法は、エラーメッセージが出たら「待機」ボタンを押して待つ、です。いつか結果画面が表示されるでしょう
毎年のHSPプログラムコンテストの作品でもそうですが、私はwaitを 入れるのを忘れる癖があるようです
いい加減直したほうがいいですね
申し訳ありません
なにはともあれ、リリースして3週間くらい経とうとしていますがとても多くのダウンロードと評価をありがとうございます。そして沢山の不具合に関しては、申し訳ございません。
HSPdish製のアプリということで、アプリランキングでそこそこいい所までいけたというのは、HSPの評価を上げるまぁまぁいい話題になるのかなと思う反面、計算が遅かったりと評判が悪いのを見ると逆にHSPの評価を下げてしまう結果になるのではと少し恐れてもいます・・・
まぁアプリの名前は少し誤りがありますからね
もっと誠実につけるとしたら「移動距離が12マス以内で、コンボ数がそれ以上多くなるようなルートがないことを証明するアプリ」とでもなるのでしょうか。そのルートには移動距離制限がつくため、人間がルートを考えた場合13マス以上でもありうるので、人間が考えたほうがコンボ数が多くなる可能性もあります。
だから役に立つ場面なんてのはほとんどないかもしれません。
そういえばHSPdishが出た当初どこかで、その便利さを称えるコメントかなんかで、「これのお陰でしょうもないアプリがたくさん世に放たれるのか」といったのを見た記憶があるのですが、自分でまさにその通りにしてしまいました。
そして今後の抱負ですが・・
そろそろツールじゃなくてゲームを作りたいな・・
もちろんプラグイン開発も同時進行で
むしろプラグインを積極的に使ったゲームとか
問題のアプリです
https://itunes.apple.com/jp/app/andrpzsolve/id580792881?l=ja&ls=1&mt=8
https://play.google.com/store/apps/details?id=net.onionsoft.hsptv.pdroute
アプリの名前柄、流行りに便乗して多くのユーザーにダウンロードしてもらったという形になったわけですが、
まぁ予想通りではあったが、計算速度があまりに遅すぎるというご指摘を多く頂きました。
その割にはちゃんと評価してくださっているユーザーもいて、親切だなとも思ったというのが感想です。
では早速、このアプリの問題点を全て挙げてみましょう
1、計算速度が遅すぎる
2、スクリーンショット取り込みができない
3、iphone、ipadだとメニュー画面に戻れない
4、androidでは計算中に強制終了画面がでる
1、計算速度が遅い
一番の原因は「全経路検索」をしているためです。
数学に「場合の数」という概念があります。
数学的に考えるなら、ドロップをあるルートで動かしたとき、一番コンボ数が多くなる経路を求めるには、すべての場合のルートを確認する必要があります。
ここでルートの最大距離を1マスとしたとき、全ての経路の場合の数は98通りとなります。
とりうる始点は30通り(横6マス×縦5マス)、そこからドロップ移動可能方向の上下左右4をかけ、30×4で120通りとなりますが、欄外にはみ出る経路の場合の数は考慮してはなりません。
例えば始点位置が一番左上の場合、そこから左、上へはもう移動できません。
同じように、ルートの最大距離が2マスとすれば、1マス移動の98通りのルートからさらに1マス上下左右へ移動可能なので4を掛けますが、先ほどと真逆の方向へは移動できません(戻る方向に行けばルート距離が1減るため)。さらに欄外へ行く経路を除外すれば236通りとなります。
以降ルートの場合の数は、 586通り、1452通り、3574通り、8764通り、21412通り、52220通り、127376通り、311224通り、760980通り・・と指数関数的に増えていくわけです。
ルート距離が12マスの場合、全ての経路のとりうる場合の数は1860172通りあります。
ハード的にはだいたいここらまでが限界です。
なぜならここらでスマホの使用メモリが200Mbを超えてしまうからです。
ルート1通りあたりに使うバイト数は、95byte。
内訳は、30個のドロップ(6種類)配列の格納で30byte。
同色ドロップが横2つ続いているときのみ0を表すいわゆる横差分値を格納する変数で30byte、同じく縦でも同じのを作り30byte。
これに加えルートの移動ログを格納する変数で4byte(1マス移動につき2bit)
さらに、ルートの先端部分つまり現在位置を格納する変数で1byte
スマホのメモリ容量は機種によりけりだが、スワップが発生すると劇的に遅くなるのでこれ以上のメモリ使用は難と考えられます。
また計算時間も非常識なものとなります。
1860172通りのルート全てで、コンボが発生するか、発生する場合は何色のドロップが何個何連鎖コンボが発生するかを計算する必要があるので、2.4GhzのノートパソコンのCPUでも3分近くかかります。
スマホのCPUは約1Ghz前後であるしキャッシュもあるのか無いのかよくわからないので、最大12マスの設定で全経路検索をすれば10分近くかかることとなります。
まぁただでさえ非常識な時間なのでこれ以上は不可能でしょう。
全経路検索にしなければ計算時間は劇的に早くなるわけですが、それではコンボの精度が悪化してしまうという欠点があります。
それでも計算速度が早くなる利点は非常に大きいですが、それは以下に示す問題点により、あえて精度をとったという経緯がありました。
2、スクリーンショット取り込みができない
これは、ただただ私の技術不足のため、という一言につきます。
アプリを開発するにあたり、取る方法は2通りあります。
ひとつはHSPdishを使い開発すること、もうひとつはxcodeでobject c、eclipseでjavaを使い開発すること。
後者ではスクリーンショット読み込み機能が実装できます。
私にはHSPで作るしか能力がなく、残念ながらスクリーンショット読み込み機能が実装できませんでした。
また私の機種にはそもそもスクリーンショットを取る機能がなく、そのような機種でもルート解析ができるようにしたいという思いがあったのも事実ですが、やはりスクショ機能はあったに越したことはありません
つまり、ドロップ配列を手動で入力するしかなく、ここでユーザーに多くの労力を強いることが容易に想像できました。
時間と労力をかけて入力しても、計算が一瞬で終わってしまいその割にはたいしたコンボ精度が得られなければ、意味がありません。
時間と労力をかける価値がある状況というのは通常の状況ではあまりありえなく、詰みそうな場合やこの1ターンで戦局が大きく変わる場合など、ここ一番という場面に限られます。
そういうときは、一回だけすごい時間をかけても最大コンボルートを導き出せればいいのですから、計算時間より精度を優先したシステムの方を選択し、結局このような非常識な計算時間になりました。
3、iphone、ipadだとメニュー画面に戻れない
※最新情報で、「ホームボタン二度押し、下の段に出てくるアプリアイコンを消してあげると再度アプリ起動した時に解析できる」ようになっているそうです。
これは評価コメントを見てはじめて気がついたのですが、iphone、ipadの場合、ホームボタンを押したときの動作として、アプリが終了するのではなく、アプリが待機状態になるという性質を理解していないために生まれてしまった不具合でした。申し訳ありません
4、androidでは計算中に強制終了画面がでることがある
これは私が、計算プログラムにwaitを入れるのを忘れたため、タスクがビジー状態になっているためです。
なんという初歩的なミス・・
対策方法は、エラーメッセージが出たら「待機」ボタンを押して待つ、です。いつか結果画面が表示されるでしょう
毎年のHSPプログラムコンテストの作品でもそうですが、私はwaitを 入れるのを忘れる癖があるようです
いい加減直したほうがいいですね
申し訳ありません
なにはともあれ、リリースして3週間くらい経とうとしていますがとても多くのダウンロードと評価をありがとうございます。そして沢山の不具合に関しては、申し訳ございません。
HSPdish製のアプリということで、アプリランキングでそこそこいい所までいけたというのは、HSPの評価を上げるまぁまぁいい話題になるのかなと思う反面、計算が遅かったりと評判が悪いのを見ると逆にHSPの評価を下げてしまう結果になるのではと少し恐れてもいます・・・
まぁアプリの名前は少し誤りがありますからね
もっと誠実につけるとしたら「移動距離が12マス以内で、コンボ数がそれ以上多くなるようなルートがないことを証明するアプリ」とでもなるのでしょうか。そのルートには移動距離制限がつくため、人間がルートを考えた場合13マス以上でもありうるので、人間が考えたほうがコンボ数が多くなる可能性もあります。
だから役に立つ場面なんてのはほとんどないかもしれません。
そういえばHSPdishが出た当初どこかで、その便利さを称えるコメントかなんかで、「これのお陰でしょうもないアプリがたくさん世に放たれるのか」といったのを見た記憶があるのですが、自分でまさにその通りにしてしまいました。
そして今後の抱負ですが・・
そろそろツールじゃなくてゲームを作りたいな・・
もちろんプラグイン開発も同時進行で
むしろプラグインを積極的に使ったゲームとか