スマホだけでも使えるブルアカの周回数計算・記録ツールを作った(Googleスプレッドシート)
更新履歴
Youtubeにて、本ツールをご紹介いただいております。
この記事の使い方を読むよりも遥かに分かりやすいので、ぜひこちらを御覧ください!
背景
最終編が良すぎて前回の記事で縦長化までアップデートしたんですが、このような記事を書くと改良したい欲が降って湧いて止まらなくなるもので、ソルバー計算機能をとにかくスマホのみで完結できるようにしたくてしたくて堪らなくなって徹夜で作ったら作れました。
PCからしか使えないExcelとGoogleスプレッドシートの両アドインソルバーにはサヨナラを告げ、Google Apps Script(GAS)のLinearOptimizationServiceを用いることで、スマホアプリのスプレッドシート上からソルバー計算を実行できるようにしました。初めて触ったんですがなんとかなるもんですね。
できること
ソルバーを用いた計算によって、目標個数のイベントアイテムを最小限のAP消費で入手する周回プランを求められる。
AP消費はそのままに、狙ったアイテムが沢山余るように計算できる。
自分の状況(ボーナス生徒・クリア難易度)に応じて計算できる。
イベント周回の進捗管理ができる。
イベント期日に間に合うAP消費ノルマが確認できる。
これらを全てスマホのみで完結させることができる。
アカウントで紐づければどの端末からも同じデータで管理できる
iPadでブルアカをやりながら同じ画面で入力できる!(New)
2023/04/27追記
イベント開始日にPCで設定、その後はiPad miniでブルアカ&iPhoneから記録、ということをずっとやっていました。今日授業中にふと閃いて試したらiPadのマルチタスク機能(Slide Over)がブルアカと共存することを発見したのでこれを試用中です。(Split View非対応AppでもSlide OverのAppを起動してから開けばマルチタスクできるなんて知りませんでした。)
周回してAPごっそり使うときにしかスプレッドシートのアプリを出す必要がないので、ブルアカのプレイに支障はなさそうですね。
数字入力をiPadのソフトウェアキーボードでやると結構邪魔なので、ドロップダウンリストからの選択がいい感じです。
対応端末
Googleスプレッドシートが使用可能な端末。
というよりブラウザ機能さえあれば何でも使用可能?
スマホ・タブレットであればアプリ版のスプレッドシートを、パソコンであればブラウザで使えます。
ダウンロード
ここから[ブルアカ周回数計算 完全版 公開用]を開き、
スマホ(アプリ版)の場合
Googleスプレッドシートをインストール。
アプリで開く。
右上の[…]から[共有とエクスポート]-[コピーを作成]
PC(ブラウザ)の場合
[ファイル]-[コピーの作成] から複製。名前を変更。
下にもあります。
使い方
青色セルに任意に入力。項目がないものは省略可能。(ステージやアイテムの枠を全て使わない場合や、目標所持数を決めない場合は空欄でOK)
ポイントとアイテムは区別していないため、名前とドロップ数で使い分ける。
赤丸のチェックマークを押すと設定項目の表示・非表示が切り替わる。
当日(AM4:00に日付変更)のセルは条件付き書式によってオレンジ色に強調される。
イベントは最終日のAM10:59までであり、最終日を周回可能な日数としてカウントするにはリスキーなので一日短く設定するのがオススメ。
1. Questを進める
理想としては、最終ステージまで掃討可能な星3クリア。
しかし、自分で入力したAPとドロップ数で計算を行うため、計算自体はステージの難易度に関係なく可能です(周回効率は悪い)。
初回クリア時に星3とチャレンジ条件を達成できれば良いのですが、後半ステージでそれが難しい場合、まず星3クリアをし、次にドロップボーナスを最大化してから改めてチャレンジ条件の達成に挑戦した方がドロップ数の面で効率が良いです。
2. ドロップボーナス最大化
ボーナス生徒を編成して後半のアイテム効率の良いステージをクリアし直し、ドロップ数を最大化します。
アイテムごとに最大値が保存されるため、ひとつのステージを各アイテムごとに挑戦して最大化することが可能です。(例えば、最後のステージをポイント・アイテム1・アイテム2・アイテム3と4回編成を変えてクリアするなど)
そして、ステージ番号・消費するAP・ドロップ数を入力します。
アイテム1種ごとに、上と下の枠を合計した数をドロップ数として計算しているため、一周あたりの合計ドロップ数を上だけ/下だけ に入力、というスタイルでも問題なく機能します。
(まず基礎ドロップ量を全部入力し、最高ボーナスで上書きしたらボーナス分を記録するという穴埋め方式でボーナス上書き忘れを予防するのが個人的におすすめの使い方)
ドロップ最高効率とステージの組み合わせは基本的に2パターンです。
最後から4つのステージを最大化すれば、最高効率でアイテムを集められます。(例外として、集めるアイテムが極端に偏っている場合は要らないステージが発生します)
後からドロップ数等の条件が変わってしまうとアイテムを集めすぎることに繋がり無駄になってしまうため、イベントと関連したピックアップのガチャで後からボーナス生徒を入手するのは避けたいところです。
途中でソルバーの再計算を行うことは可能なのでそこまで問題にはなりませんが。
3. 必要アイテム数計算
ショップ画面で各アイテムの所持数(初クリア報酬とドロップ数最大化の過程でそれなりに入手している)を確認し、初期数に入力します。
各アイテムの必要数を計算し、目標数に入力します。
最初は電卓叩いてたんですが流石に面倒になってきたため、アイテム名・単価・個数の情報をWikiからコピペすることで、チェックボックスか個数指定で必要数を算出し、計算結果を目標所持数に反映させることができるシートを作りました。
チェックボックスと個数指定を同時に使った場合はMAXが優先。
個数指定は購入上限以上を指定できないように入力規制済み。
合計の横のドロップダウンリストから目標所持数を反映させたいドロップアイテム名を選択し、[反映]のチェックボックスをONにすることで、目標所持数を直接反映させることができる。(ドロップダウンリストで未選択or一致するアイテム名が存在しない場合は動作しない)
[全リセット]のチェックボックスをONにすることで、チェックボックスも個数もアイテムの情報も全部まとめてリセットできる。
[全選択]のチェックボックスをONにすることで、チェックボックスを全部ONにできる(ONにするだけでOFFにはできない。一気に全選択して要らないのを手作業で外す用)
空の行のチェックマークは合計に無が足されるだけなので問題なし。
コピペ用に小計の項目があるが、計算には不使用。
このシートの編集時、A6セルの書式設定をアイテム欄に全体に適用することで書式設定を保ち続ける(コピペによる書式設定の変化を上書き)
チェックボックスの配置されているセルに、文字色を変えて見えなくした状態の真偽判定の結果が表示されてる。(計算時の判別用)
チェックボックスをポチポチ連打すると書式だけでなく内容で上書きされる(全部がTRUEかFALSEになる)不具合があるんですが、GAS上では書式設定しかペーストできないように記述してあるのでバグです。
気持ち悪いのでトリガ条件を見直してみようと思います。
修正しました。copyToの{formatOnly:true} → copyFormatToRange
デイリーミッションによるアイテム獲得がある場合(バレンタインイベント等)、初期数か目標数を予想される分だけ変更して辻褄を合わせます。
面倒ならやらなくても問題はないです(アイテムが余って無駄になるだけ)。
4. ソルバー計算
目標とするアイテムを全回収するために、消費APが最小になる周回プランをソルバー計算によって求めることができます。
特殊な例として、バレンタインイベントのように一品目を過剰に収集する際に、どうせ余るならこのアイテムが余ってほしい、というアイテムを最大限確保できるようにアイテム最大化機能があります。
消費APは最小かつ、全アイテムについて目標数は確保できるまま、周回数の配分を変更することで狙ったアイテムを最大化できます。
全アイテムにチェックボックスがありますが、複数選択は無効になります。任意のアイテム1つのみONにした状態で、[ソルバー実行]にチェックを入れることで、消費AP最小化&特定のアイテム数最大化 が実行されます。
特定のアイテムだけ突出して集めない場合は、そもそもの周回数を限界まで切り詰めてしまうため、配分をあまり変えることができず、大きな変化にはなりません。しかし、基本的には、イベントptか一番下のアイテム(無制限で交換できると僅かにおいしい)を余らせると良いと思います。それ以外だと上位のドロップアイテムに交換できるだけなので、そんなことをするなら直接ドロップさせたほうが効率良いです。
5. 日付の設定
[開始日]から記録の開始日を、[日数]からイベントに取り組む日数(日付を表示する日数)を選択できます。
開始日はmm/ddで入れると勝手に今年になります。
[今日の日付]にチェックを入れると、開始日を今日の日付で上書きします。
当日の目安APがAPの消費ノルマになります。
後に行くほど大きくなっているのは、やらずに溜めていた場合は直前になって沢山やらなければいけないということです。毎日目安ぴったりの周回を行うと目安は変化しませんが、端数もありますし、余裕のあるときに多めに進めていくのがいいと思います。
イベントは基本14日間ですが、復刻の一部イベントは7日間となる場合もあります。イベントに合わせて調節してください。
後述しますが日付を表示する枠は増減に対応しているため、日数のドロップダウンリストに表示される候補は枠の上限と一致するようにしてあります。
6. 周回数の記録
基本的には消費と目安(一日のAP消費量とノルマのAP消費量)を見比べながら周回します。一日に使えるAPはおよそ一定であるため、無理のないペースで周回しやすいです。
石割りしないと間に合わないのか、ドロップ○倍中の他のものにAPを流していいのか、勘ではなく数字で見れるので一安心。(ユウカもにっこり)
6. ソルバーの再計算を行う場合
ドロップ数を最新の状態に更新します。
目標数を変更しないなら、初期数を現在の所持数で更新した後、ソルバー計算を実行します。
周回数の記録は途中からになりますが、消費APの目安などの機能に影響はありません。
便利機能
獲得AP確認シート
ご要望にあった機能をようやく追加することができました。
人によって異なる条件(カフェの1日あたりのAP生産量・サークル加入の有無・2weeksスタミナパッケージの有無・ログボ1日目が何月何日か・スケジュールチケットの枚数)を入力orチェックすることで、ソルバー計算シートの日付に連動した獲得APの予測が可能になります。
減算APと加算APは、イベント以外にも毎日〇〇APは他のことに消費する、といった場合や、メールボックスのAP貯蓄がある場合などに入力します。
また、日々の獲得APでは足りない場合、栄養ドリンク購入と石割をどれくらいやればいいのかシミュレートできるようにしました。
残念ながら、ソルバー側で日付の表示数を変更しても、チェックボックスの数は連動して変更できなかったため、そこだけは手動です。数が合わないと思ったら日付変更を押してください。(反映に結構時間がかかります。連打しないほうがいいです。)
選択解除はそのままです。
上一行分のチェックボックスは列の全選択用です。色が変われば選択されたことになります。30割がわかりやすいです。
また、色が変わったところは「自動で選択済として扱われる」チェックボックスです。石の方は左まで埋め尽くすだけなんですが、栄養ドリンクについては穴があります。これは仕様です。
栄養ドリンクは更新にコインが10枚必要なので、更新するのであればそれ以前は全購入が基本です。そのため、チェックした箇所よりも左かつ更新が必要なところまでを埋め尽くすようにしてあります。
以下設定など
最高ドロップ数になる編成ボーナス下限値の可視化
新春狂想曲のWikiページを見ていたら、このような文章を見つけました。
イベントのドロップアイテムは基本的に切り上げなので、数値の組み合わせ次第ではボーナス生徒が増えてもドロップ数が変わらない、ということが起こります。
ボーナス生徒を一人抜いても問題ないと予め分かっていれば、低Lvの生徒の割合を小さくできるのでクリアが容易になります。
また、イベントの途中でボーナス対象生徒を引いた場合などに、ボーナス値が変わっても周回する必要がないと分かれば手間がかからず便利です。
ということで、自分の所持生徒で実現可能な最高編成ボーナス値を入力することで、そのドロップ数を維持できる下限のボーナス値を表示できるシートを作りました。
ついでにソルバー用のドロップ数反映機能も備えています。
青背景のセルに入力します。上には手持ちで出せる最高のボーナス値、基礎数はそのステージ本来のドロップ数を入力します。下は、生徒が増えた際に、青い箇所に増加後のボーナス値を入力することで、ボーナスのドロップ数がどうなるかを可視化します。増加量が0のステージは周回しなおす必要が無い、ということです。
下限Bonus値というのは、最高ドロップ数を維持したまま下げることができる下限のボーナス値となっています。「例」がわかりやすいのですが、ステージ9に関しては50%でも30%でもどうせ同じ数だ、というのが一目で分かるようになります。
色々書いていたんですが、ドロップ数が増えたら最高Bonus値を書き換えるだけで、ソルバーに今入っている数値より小さい(のでボーナス上書きのためにクリアする必要がある)ステージが黄色くなるので、それ見ればいいだけでした。
イベント周回では毎回毎回ボーナスの最大化忘れが心配で仕方なかったので、最大化するたびにソルバーのドロップ欄にひとつひとつ手入力する以外にも、最初に計算で全部出してからボタンで押し忘れを確認しながら入力する方法も用意できて満足しています。
各種設定
行・列を増減させる
日付の行・ステージの列は、行・列を選択して挿入・削除することで増減させることができます。
26行とB列に動的配列の式を格納しているため、そこさえ触れなければいくらでも増減できます。ソルバー計算も問題ありません。(効率の良いステージが自動的に選択されるので、用意したステージの半分も使わない、なんてこともザラにありそうですが…)
ドロップダウンリストの最大値
DDL最大値 と書かれているところの数字が周回数記録用のドロップダウンリストの最大値になっています。APは有限なのであまり大きくしても意味はないです。100でも多い気がしています。
小さすぎると入力規制に引っかかって大きな数字を入力できなくなるので、特にこだわらなければそのままにしておいてください。
最適化対象とする変数の追加
※ブルアカ周回数計算 変数追加版の仕様です。
イベントの実績ミッションで特定の敵を〇〇人倒す、といったものが出た際に、特定のステージにしか出現しない場合はそのステージを周回対象に含める必要が出てきます。しかし、イベントアイテムのドロップもあるため、何も考えずに周回すると、特定のものだけ集めすぎてしまう可能性が発生します。
このときの考え方としては、特定のステージにしか出現しない敵を新たなドロップアイテムだと考え、目標数を超えるようにソルバーの計算で考慮するというものになります。
コメントでのご要望にお応えし、イベントアイテム4個以上の任意の数の変数を設定できるように拡張しました。
使い方は変わらず、入力後ソルバー実行を押すだけです。
増やしすぎると計算に時間が掛かると思います。
変数を更に追加したい場合は赤矢印の場所に行を追加します。
変なことになったら削除してコピーし直してください。
所感
Google Apps Script(GAS)万能すぎる
初めて触って一晩でこんな便利なものが完成しちゃっていいんですか??
.getValues()で取得できる配列が1行だとしても勝手に二次元配列になるの許せない…これだけで既に完璧な設計になってたソルバーが動かなくなって2時間くらい困ってた
どんどん湧く改善案を反映させるのはいいんだけど、使い方の画像に反映させるのがめんどくさくて後回しになってる
noteで前回の方の記事を公開してから「覚悟」氏は30連、トキ&ナギサ様は無料10連チケ+20連で出て、徳を積む効果としてかなりのものがあるのではないかと期待値が爆上がりしています。ニュツキ・正月カヨコ・正月ハルカは是非とも100連以内で揃ってほしいですね。
感想・不具合報告 お待ちしてます
予防線を張っておきますが、C言語とArduino言語しか触ったことのない機械科の人間が作っているのでクラスとかオブジェクトとか何も理解していません。コードを見ても怒らないでください。
おまけ(神名のカケラ必要数計算表)
Wikiにある表が見づらかったのと、ワカモの限界解放がギリギリのところで困ったのでちゃんと計算できるように作りました。(色彩ホド戦)
神名文字の所持数を入力し、ショップでのカケラ購入数を入力すると、現在の星から任意の星に上げるためのカケラ必要数が表示されます。
ショップでの購入数に応じて交換レートに反映されます。
いくつ購入したか覚えていないなら、とりあえず80にしておけばそれより増えることはありません。
限界解放の段階が追加されても対応できるように、薄い字で枠だけ確保してあります。