さて、今回は初めてスマートフォンアプリについての記事となります。
ぽんさんの「0をつくる計算ゲーム」のご紹介です。

make01

ジャンル:シンプルなパズルゲーム
プレイ時間:1プレイ数分~
ツール:Unity(Androidアプリ)
リリース:2022/3
備考:広告/課金要素あり(課金なしでも十分プレイ可能)


私は基本的にフリーゲームをやりこんでいて、スマホアプリはよほど気になったものでないとプレイしないのですが、本作にはハマってしまいました。私以上にやりこんだ人いるのかな? ってくらいです。

本作のルールはいたって簡単。3桁の数字が出てくるので、÷5、÷3、ー5、ー3の4つのボタンを使って0にすればよいというものです。ただし、割り切れない場合は無効(2回間違えるとやり直しになる)、3連続で同じ演算は使えない(こちらも強制的にやり直しになる。3回目で0にできた場合でも成功扱いにならない)という制約があります。押したボタンに青色の照明がついたり赤色になったりすることでこの制約が直感的にわかりやすくなっていて良いですね。
気になるのは、ゲームのシンプルさに比してやや動作が重いように感じられることでしょうか。

本作をインストールしてみたら、まずは普通にプレイしていきましょう。4つのボタンをうまく使って数字を徐々に小さくしていきます。しばらく続けると、最初の数字が4桁になるモードや4つの操作が÷7、ー6、ー5、+4になるモード、そしてタイムアタックモードが解放されます。このタイムアタックモードの存在のおかげでまた私の攻略欲が刺激されてきました。
このモードのルールも簡単。90秒以内に何点得られるかを競うというものです(なのでタイムアタックというよりはスコアアタックですね)。こうした単純な操作と判断力の素早さ・正確性が必要となるゲームはプレイするたびに上達が実感できて、さらに記録も残るため私はハマりやすいです。1プレイが90秒という短時間なのも、もう1回!と熱くなりやすくてちょうどいい感じがします。プレイし始めの時は140点行けばかなりいい記録という感じでしたが、まずは200点オーバーを目標にプレイを続け、
今では200点超えは余裕で達成できるレベルまで達しました。


というわけでここからは攻略について書いていきます。
タイムアタックモードにおいて高得点を取るには、まず第一に素早く0を作ることが大切。1回達成ごとに10ポイントです。そして短手数でできたときのボーナス(10手より少なく達成した場合は、余らせた手数分のボーナスポイントが入ります)、これも大切です。というわけでなるべく短手数かつ素早く0にしていきたいです。
4つのボタンの中では当然÷5と÷3が数字を小さくする力が強いので、これらをなるべく使いたい。しかし÷5はともかく÷3はできるかどうかが一瞬で判断するには難しいです。ここで、3や9で割った時のあまりに関する知識が必須となります。ある数字を3で割った時のあまりは、その数字の各桁を足したものを3で割ったあまりに等しいという事実です。9でも同様です。これを使うと暗算で3で割るよりも非常に素早く判断することができます。
例えば477だった場合、私がどう考えるかを説明します。これが3で割れるかを愚直に割ってみて考えるとだいぶ時間がかかりますが、4+7+7=18を暗算すれば、18は9の倍数なので477は9で割れる、つまり÷3を二回連続適用できることが分かります。割った結果が何になるかはこの段階では計算できていません。÷3を2回押すと、53になります。こうなれば後は楽勝です。3を引けば一の位が0、つまり5の倍数になるのでー3、÷5とすると10。あとはー5-5でOKです。こうして6手で0にすることができました。ボーナスと合わせて14点獲得です。これはかなり楽なパターンなので、3秒以内にこの手順を終わらせたいところです。

3桁の数字が3の倍数か判断するのに私が上記を応用して使っているのは、各桁の数字が等差数列(123や852など、隣同士の差が等しい数列)となっている場合は必ず3の倍数になるという事実です。これによって単純に足し算するよりも楽になることも多いです。また、ー5の操作は3で割った余りを1増やしていると頭の中で変換していることも多いです。例えば332の場合、+1すれば3の倍数なのは明らかです。そこでー5をすることによって3で割った余りが1増えることを使いノータイムでー5÷3まで持っていけます。

さて、÷3に関するテクニックを使っても、3つの数字をすべて見る必要があるため、本当に一瞬では判別できません。しかし5で割れるかどうかなら別。一の位だけ見て0か5ならOKなのでずっと素早く判断できます。そのため÷5が可能な時は÷5を優先させることが多いです。
例えば528を考えてみましょう。この数は実は3で割れますが、それを判断するには1秒程度とはいえ時間がかかります。ここで一の位の8に注目すると、ー3することで5の倍数にできるのが分かります。さらに言うと下2桁が25になり、この時全体が25の倍数であることが確定するので÷5を二連打できます。この判断は足し算しなくて済む分一瞬で終わるため、÷3よりー3÷5÷5を行った方が早く終わります。

あとは、2桁の数字(特に50以下)については最適手順を暗記するまで繰り返しましょう。
例えば32を見ると、私は昔からゲームやコンピュータに触れていたため2の5乗だなということが頭に浮かびますがこのゲームにおいてはそれはどうでもよく、ー5すれば27となり、÷3÷3ー3で0にできるという手順を暗記していることが大事です。
84も何回も見たので、÷3ー3÷5ー5が一瞬で浮かび、1秒で0にすることができます。
気をつけなくてはならないのは81でしょう。九九の最後の数という印象が強く、9の倍数なので調子に乗って÷3を二連打したくなりますが、そうすると同じ操作が3連続できないというルールによって詰みます。9になったら÷3ー3しかないので、81から÷3÷3とすると÷3できず、かといってー3を3連打もできずあきらめるしかなくなってしまいます。これを何度も食らったので、81の場合÷3ー3÷3ー5ー3の手順を暗記するようにしています。35とかでも考えなしに÷5すると詰むので気を付けましょう。

最後にちょっと高度(と思っている)テクニックです。ー5するまで3の倍数であるという性質は不変であることを使います。363を考えましょう。どの桁も3の倍数なので当然全体も3の倍数、÷3を押したくなりますがここで一呼吸置きます。すぐに÷3した結果は121。3の倍数でも5の倍数でもなく扱いにくそうです。しかし363からー3したら一の位が0になり5の倍数になります。さらにー3や÷5といった操作では3の倍数であるという性質が失われないため、ー3÷5÷3という3つの操作がセットで行うことができることに気付きます。すると一気に小さい数字にできるので素早く完了させやすいのです。

私が頭の中で何となく考えていたのはこんな感じです。これで10時間以上はやり込んだ結果、現在の最高記録は289です。ここまで来たら300出したいと思って粘ったのですが、どうも私の限界はこのあたりのようです。
make02



攻略とは若干外れますが、このルールをコンピューターで解析した結果も載せておきましょう。
最初に出てきた数字を初期値、何回の操作で0にできるかを最短手数と呼ぶことにします。

ノーマルモードやタイムアタックモードで出てくる初期値は3桁の数字と思っていましたが、どうやら1000も出るようです。この範囲において最短手数が何手になるかをコンピューターに計算させたところ、どんな初期値でも11手以内ということが分かりました。
11手必要な初期値は5つ。
877,907,949,967,979
10手必要な初期値は53個。その中で最小のものは337でした。ちなみに手順は
-3,-5,-5,÷3,÷3,-3,÷3,-5,-3,-3
です。1手では3の倍数にも5の倍数にもできず、とても扱いにくいので初期値の小ささのわりに最短手順が長いということでしょう。逆に最も短い手数なのは簡単で125です。÷5÷5ー5で行けますね。

グラフにした結果はこんな感じ。
make03
横軸が初期値、縦軸が最短手数、赤い線は追加してみた近似曲線です。やっぱり対数が一番マッチしました。

今回の解析結果をcsvファイルにしたので、詳細に見たい方はこちらを見てください。
見方ですが、一番左の列が初期値、その二列目が最短手数、その右以降が最短手数を実現する手順(の内の1つ)となっています。/は÷に置き換えてください。

なおノーマル以外のモードも一応解析しました。4桁モードでは最短手数は15手以内。7桁モードでは25手以内。4567モードでは11手以内のようです。もしこれらの解析結果の詳細も知りたいという方がいたら私にコンタクトをください。ちなみに7桁モードは計算がすぐには終わらず1分くらいはかかってます。
4567モードは人間にはとても難易度が高い(7の倍数かどうかを効率的に判断できない)のであまりやり込みませんでしたが、ノーマルモードとちょうど同じ手数というのがちょっと面白いですね。11手必要な数は961ただ一つ、10手必要なのも24個と、最適にやればノーマルモードよりも早く0にできる傾向があるようです。


私の記録を超えたよという方がいたらぜひ教えてください。
それでは。