RPGツクールと数学のブログ

RPGツクールと数学についてのブログです。

FFRK ジェムの個数を0にする

過去ブログの転載です。

FFRK(ファイナルファンタジーレコードキーパー)というスマホ向けゲームがあるみたいなのですが、課金をするとジェムというアイテムがもらえて、それを使って色々できるらしいのです。

ジェムは課金でしか手に入らないらしくて、個数が0じゃなかったら、課金したことが明らかになってしまうことや、端数が残ってしまうのが気になるなどの理由で、何とかこのジェムの個数を0にしたいという方が少なからずいらっしゃるそうです。

他の方のジェムの個数が見られてしまうのですね。それは確かに厄介そうですね。

今日はジェムの購入・消費を調整することにより、個数をぴったり0にする方法を紹介します。ただしモラル的に正しく利用してくださいね。無課金を装って強い武器(?)ばっか買ってる人を嫌う人も多くいると聞いています。友達関係が崩れても私は知りません。当然だよね?

ジェムは課金アイテムですので、いくつかのプランから選択してまとめ買いすることになります。価格表は変動するかもしれませんが、その一例がこちらです。

【ジェムの購入額】
・Aセット(116ジェム):120円
・Bセット(349ジェム):360円
・Cセット(582ジェム):600円
・Dセット(1165ジェム):1200円
・Eセット(2330ジェム):2400円
・Fセット(3495ジェム):3600円
・Gセット(5825ジェム):6000円
・Hセット(11456ジェム):11800円

対応するジェムの消費個数の関係は以下の通りだとします。

【ジェムの消費個数】
・97ジェム
・2910ジェム
・873ジェム
・291ジェム

消費個数の大きい方がやはりいいのでしょうか。この場合は実はすべて97の倍数なので、97ジェムを大量消費するという考えでいいです。

現在のジェムの個数に、何セットを何個購入する、というのを繰り返して97の倍数にし、後は消費個数の大きいものから順番に選択して消費していけばぴったり0個にできます。もし消費個数の表が上の通りでなくて何とかの倍数、となっていない場合は、後に述べる変数の個数を増やしてやればいいのですが、ちょっとややこしくなりますし、今の所消費個数は上の表の通りなので、とりあえず97の倍数の場合でだけ書いてみます。

現在持っていたジェムの個数が37個だったとします。

Aセットの個数をa、Bセットの個数をb、…、Hセットの個数をh、として、これが97の倍数、すなわち97kにすることを考えます。こういうことになりますね。

37+116a+349b+582c+1165d+2330e+3495f+5825g+11456h=97k

ちょっと移項しておきます。

116a+349b+582c+1165d+2330e+3495f+5825g+11456h-97k=-37

これを満たす整数解を求めればいいのですが、人力ではかなり無理があるので、以下のツールを使ってください↓

fermiumbay16.jimdofree.com

ここに次のように入力します。

最初の所持数が37個じゃない場合は、-37の所をマイナス個数に変えてください。価格表が違う場合は適宜aiの部分とか、変数の個数を調整してください。

f:id:fermiumbay13:20190802014520p:plain

xiの下限は全部0にします。個数は0個以上だよ、という意味です。

-97の部分が消費個数に相当するのですが、この部分だけxiの上限を設定してください。より多く購入してより多く消費すれば、実は調整の組み合わせは無限にあるので、上限を設定しておかないと解が無限に出てきてしまうのです。扱いづらいので、てきとうに上限を設定しておきましょう。上図ではとりあえず50にしてます。これで実行します。

もし解が0個だったら、上限をもうちょっと上げて再実行してみてください。逆に解がいっぱいありすぎたら上限を下げてください。

この例だと上限を上げればちゃんと組み合わせが出てくるのですが、価格表や消費個数が変動して調整不可能な組み合わせに遭遇してしまうと、絶対に不可能ということにもなります。そうなったらむしろ問題な気もしますが……

f:id:fermiumbay13:20190802014532p:plain

この場合は解が17個出てきました。

まだ多い気もするので上限は30ぐらいにしてもいいでしょう。上限というのはx9の上限のことなので、上限を30にするとx9=28の2通りしか出ません。

表の見方について説明します。
例えば一番上の 3, 0, 1, 3, 0, 0, 0, 0, 46 というのは
Aセット3個、Bセット0個、Cセット1個、Dセット3個
Eセット0個、Fセット0個、Gセット0個、Hセット0個
購入すれば、97ジェムの消費を46回行えばぴったり個数が0になる、という意味です。46回も97ジェムの消費をするのは何だか疲れそうなので、実際には大きい消費から順番に行うだけでいいです。全部97の倍数なので必ず0個になります。(2910ジェムを消費、873ジェムを消費、291ジェムを2回消費、97ジェムを消費)

この表の中のどれかの組み合わせで購入、消費を行えばOKということですが、可能な限り低価格に抑えた方が良いでしょうから、解の吟味をした方が良いです。

このベズープログラムだと実は最低金額になるときのパターンを簡単に計算できないので、推測で得られる「おそらく最低金額になるであろうパターン」で行うのが良いでしょう。x9が消費個数に相当することから、x9が一番小さいパターンにするのがおそらく最低金額になりますので、それを選んでください。

とりあえずこの場合はx9=28になっている下の2つですね。そのうち安い方を選択されるといいでしょう。

0, 1, 0, 2, 0, 0, 0, 0, 28 → Bセット+Dセット×2=2760円
0, 1, 0, 0, 1, 0, 0, 0, 28 → Bセット+Eセット=2760円

この場合はどっちでも良かったですね。というかもしかしたら常に最低金額になるようになってるかもしれません。よくわかんないです。

いずれも2716ジェムになって、97の倍数になりますから、後は大きい順に消費すればOKです。873ジェムを3回消費、97ジェムを消費でいいですね。

こんな感じでやればぴったり0個にすることが出来ます。