見出し画像

スマホだけでも使えるブルアカの周回数計算・記録ツールを作った(Googleスプレッドシート)


更新履歴

2023/03/18 完成

2023/03/19
・設定項目の表示・非表示機能を追加
・アイテム情報のペースト時に書式設定を上書きして体裁を維持する機能を追加

2023/03/20
・日付関係の設定を追加
・アイテム目標数の反映機能を追加
・アイテムの全チェック機能を追加

2023/03/21
・アイテム欄の連打バグ修正
・機能上マズい位置への行・列挿入前に、警告を表示するようにセル範囲の保護を追加
・ソルバーの計算に悪影響を与える入力ミスへのエラー表示を追加

2023/03/23
・複製や名前変更をしたソルバーのシートやアイテム計算シートでも処理が行えるように、シートの判別方法を変更
[基本的に複製しても同じように使えますが、他のシートへの書き込み機能(目標アイテム数の反映およびドロップ数の反映)は、一番左にあるソルバー機能のあるシートが対象になります]
・ボーナス値の下限のチェックおよびソルバーのドロップ欄へのボタン式入力シートを追加
・ソルバー&記録シートの下の方にこの記事へのURLを追加

2023/04/27
・iPadのマルチタスク機能(Slide Over)がブルアカ中に使えることに気づいたため使用例として追加

2023/05/24
・獲得AP確認シートを追加(栄養ドリンク&石割の計画を立てることが可能)

2023/10/03
・イベントアイテム4種以外にも最適化できるように、変数追加版のシートを試験的に公開

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のソフトウェアキーボードでやると結構邪魔なので、ドロップダウンリストからの選択がいい感じです。

これがiPadの画面上にある違和感
配信者の画面みたい

対応端末

Googleスプレッドシートが使用可能な端末。
というよりブラウザ機能さえあれば何でも使用可能?

スマホ・タブレットであればアプリ版のスプレッドシートを、パソコンであればブラウザで使えます。

ダウンロード

ここから[ブルアカ周回数計算 完全版 公開用]を開き、

スマホ(アプリ版)の場合
Googleスプレッドシートをインストール。
アプリで開く。
右上の[…]から[共有とエクスポート]-[コピーを作成]

PC(ブラウザ)の場合
[ファイル]-[コピーの作成] から複製。名前を変更。

下にもあります。


使い方

設定項目表示状態
  • 青色セルに任意に入力。項目がないものは省略可能。(ステージやアイテムの枠を全て使わない場合や、目標所持数を決めない場合は空欄でOK)

  • ポイントとアイテムは区別していないため、名前とドロップ数で使い分ける。

  • 赤丸のチェックマークを押すと設定項目の表示・非表示が切り替わる。

設定項目を非表示状態にするとウィンドウ枠の固定機能がONになります
  • 当日(AM4:00に日付変更)のセルは条件付き書式によってオレンジ色に強調される。

  • イベントは最終日のAM10:59までであり、最終日を周回可能な日数としてカウントするにはリスキーなので一日短く設定するのがオススメ。

1. Questを進める

理想としては、最終ステージまで掃討可能な星3クリア。
しかし、自分で入力したAPとドロップ数で計算を行うため、計算自体はステージの難易度に関係なく可能です(周回効率は悪い)。

初回クリア時に星3とチャレンジ条件を達成できれば良いのですが、後半ステージでそれが難しい場合、まず星3クリアをし、次にドロップボーナスを最大化してから改めてチャレンジ条件の達成に挑戦した方がドロップ数の面で効率が良いです。

2. ドロップボーナス最大化

ボーナス生徒を編成して後半のアイテム効率の良いステージをクリアし直し、ドロップ数を最大化します。
アイテムごとに最大値が保存されるため、ひとつのステージを各アイテムごとに挑戦して最大化することが可能です。(例えば、最後のステージをポイント・アイテム1・アイテム2・アイテム3と4回編成を変えてクリアするなど)
そして、ステージ番号・消費するAP・ドロップ数を入力します。

アイテム1種ごとに、上と下の枠を合計した数をドロップ数として計算しているため、一周あたりの合計ドロップ数を上だけ/下だけ に入力、というスタイルでも問題なく機能します。
(まず基礎ドロップ量を全部入力し、最高ボーナスで上書きしたらボーナス分を記録するという穴埋め方式でボーナス上書き忘れを予防するのが個人的におすすめの使い方)

基礎ドロップ数とボーナスを分けて入力できる(分けなくてもいい)

ドロップ最高効率とステージの組み合わせは基本的に2パターンです。
最後から4つのステージを最大化すれば、最高効率でアイテムを集められます。(例外として、集めるアイテムが極端に偏っている場合は要らないステージが発生します)

9,10,11が個別のアイテム効率最大、12が全種アイテムという構成
(12はポイント効率最大の場合と、他と変わらない場合があります)
9が全種、10,11がアイテム効率最大、12がポイント特化という構成

後からドロップ数等の条件が変わってしまうとアイテムを集めすぎることに繋がり無駄になってしまうため、イベントと関連したピックアップのガチャで後からボーナス生徒を入手するのは避けたいところです。
途中でソルバーの再計算を行うことは可能なのでそこまで問題にはなりませんが。

3. 必要アイテム数計算

ショップ画面で各アイテムの所持数(初クリア報酬とドロップ数最大化の過程でそれなりに入手している)を確認し、初期数に入力します。
各アイテムの必要数を計算し、目標数に入力します。

最初は電卓叩いてたんですが流石に面倒になってきたため、アイテム名・単価・個数の情報をWikiからコピペすることで、チェックボックスか個数指定で必要数を算出し、計算結果を目標所持数に反映させることができるシートを作りました。

使用例
  • チェックボックスと個数指定を同時に使った場合はMAXが優先。

  • 個数指定は購入上限以上を指定できないように入力規制済み。

  • 合計の横のドロップダウンリストから目標所持数を反映させたいドロップアイテム名を選択し、[反映]のチェックボックスをONにすることで、目標所持数を直接反映させることができる。(ドロップダウンリストで未選択or一致するアイテム名が存在しない場合は動作しない)

  • [全リセット]のチェックボックスをONにすることで、チェックボックスも個数もアイテムの情報も全部まとめてリセットできる。

  • [全選択]のチェックボックスをONにすることで、チェックボックスを全部ONにできる(ONにするだけでOFFにはできない。一気に全選択して要らないのを手作業で外す用)

  • 空の行のチェックマークは合計に無が足されるだけなので問題なし。

  • コピペ用に小計の項目があるが、計算には不使用。

  • このシートの編集時、A6セルの書式設定をアイテム欄に全体に適用することで書式設定を保ち続ける(コピペによる書式設定の変化を上書き)

  • チェックボックスの配置されているセルに、文字色を変えて見えなくした状態の真偽判定の結果が表示されてる。(計算時の判別用)

貼り付けた一瞬だけ変な見た目になりますが、自動で書式が上書きされます

チェックボックスをポチポチ連打すると書式だけでなく内容で上書きされる(全部がTRUEかFALSEになる)不具合があるんですが、GAS上では書式設定しかペーストできないように記述してあるのでバグです。
気持ち悪いのでトリガ条件を見直してみようと思います。

修正しました。copyToの{formatOnly:true} → copyFormatToRange

デイリーミッションによるアイテム獲得がある場合(バレンタインイベント等)、初期数か目標数を予想される分だけ変更して辻褄を合わせます。
面倒ならやらなくても問題はないです(アイテムが余って無駄になるだけ)。

4. ソルバー計算

目標とするアイテムを全回収するために、消費APが最小になる周回プランをソルバー計算によって求めることができます。

ソルバー実行のチェックボックスにチェックを入れます。
数秒計算した後、自動で必要周回数の欄に入力されます。

特殊な例として、バレンタインイベントのように一品目を過剰に収集する際に、どうせ余るならこのアイテムが余ってほしい、というアイテムを最大限確保できるようにアイテム最大化機能があります。

僕は1.5周年開始勢なのでバレンタインイベントで全所持生徒+5名を含めた69人分のポイントを集めたんですが、AP最小化のみで計算した場合、そのままだと大して美味しくないアイテムが過剰に余ってしまうことが判明しました。
このときはフブキの神名と無制限に交換できるアイテムの目標数をじわじわと上げていき、最小APの範囲で最大限入手できるようにしたんですが、今回のリニューアルでソルバーを自分で記述したとおりに動作させることができるようになったので、この機能もついでに付けました。

左:消費AP最小化
右:消費AP最小化&アイテム数最大化
ここまで集める場合はかなりの差になります。

消費APは最小かつ、全アイテムについて目標数は確保できるまま、周回数の配分を変更することで狙ったアイテムを最大化できます。
全アイテムにチェックボックスがありますが、複数選択は無効になります。任意のアイテム1つのみONにした状態で、[ソルバー実行]にチェックを入れることで、消費AP最小化&特定のアイテム数最大化 が実行されます。
特定のアイテムだけ突出して集めない場合は、そもそもの周回数を限界まで切り詰めてしまうため、配分をあまり変えることができず、大きな変化にはなりません。しかし、基本的には、イベントptか一番下のアイテム(無制限で交換できると僅かにおいしい)を余らせると良いと思います。それ以外だと上位のドロップアイテムに交換できるだけなので、そんなことをするなら直接ドロップさせたほうが効率良いです。

5. 日付の設定

[開始日]から記録の開始日を、[日数]からイベントに取り組む日数(日付を表示する日数)を選択できます。
開始日はmm/ddで入れると勝手に今年になります。
[今日の日付]にチェックを入れると、開始日を今日の日付で上書きします。

当日の目安APがAPの消費ノルマになります。
後に行くほど大きくなっているのは、やらずに溜めていた場合は直前になって沢山やらなければいけないということです。毎日目安ぴったりの周回を行うと目安は変化しませんが、端数もありますし、余裕のあるときに多めに進めていくのがいいと思います。
イベントは基本14日間ですが、復刻の一部イベントは7日間となる場合もあります。イベントに合わせて調節してください。
後述しますが日付を表示する枠は増減に対応しているため、日数のドロップダウンリストに表示される候補は枠の上限と一致するようにしてあります。

6. 周回数の記録

掃討した回数を入力します。
(ドロップダウンリストからの選択と直接入力に両対応)
周回数を達成したステージ(列)は緑色になります。

消費AP : (当日に)消費したAP
目安AP : 最終日までの日割りAP 消費ノルマ
残りAP : 残りの周回に必要なAP

基本的には消費と目安(一日のAP消費量とノルマのAP消費量)を見比べながら周回します。一日に使えるAPはおよそ一定であるため、無理のないペースで周回しやすいです。
石割りしないと間に合わないのか、ドロップ○倍中の他のものにAPを流していいのか、勘ではなく数字で見れるので一安心。(ユウカもにっこり)

回数をオーバー(無駄に周回)した場合は赤色になります。
単純に総消費APを見ているわけではないため、進捗率や残りAPには影響しません。
アイテムの収集数は反映されます。

6. ソルバーの再計算を行う場合

ドロップ数を最新の状態に更新します。
目標数を変更しないなら、初期数を現在の所持数で更新した後、ソルバー計算を実行します。
周回数の記録は途中からになりますが、消費APの目安などの機能に影響はありません。

便利機能

獲得AP確認シート

ご要望にあった機能をようやく追加することができました。

人によって異なる条件(カフェの1日あたりのAP生産量・サークル加入の有無・2weeksスタミナパッケージの有無・ログボ1日目が何月何日か・スケジュールチケットの枚数)を入力orチェックすることで、ソルバー計算シートの日付に連動した獲得APの予測が可能になります。
減算APと加算APは、イベント以外にも毎日〇〇APは他のことに消費する、といった場合や、メールボックスのAP貯蓄がある場合などに入力します。

無駄な情報が多いので要らない列は非表示推奨

また、日々の獲得APでは足りない場合、栄養ドリンク購入と石割をどれくらいやればいいのかシミュレートできるようにしました。

これも使わない範囲は非表示を推奨

残念ながら、ソルバー側で日付の表示数を変更しても、チェックボックスの数は連動して変更できなかったため、そこだけは手動です。数が合わないと思ったら日付変更を押してください。(反映に結構時間がかかります。連打しないほうがいいです。)

選択解除はそのままです。

上一行分のチェックボックスは列の全選択用です。色が変われば選択されたことになります。30割がわかりやすいです。
また、色が変わったところは「自動で選択済として扱われる」チェックボックスです。石の方は左まで埋め尽くすだけなんですが、栄養ドリンクについては穴があります。これは仕様です。
栄養ドリンクは更新にコインが10枚必要なので、更新するのであればそれ以前は全購入が基本です。そのため、チェックした箇所よりも左かつ更新が必要なところまでを埋め尽くすようにしてあります。

以下設定など

Shiftを押しながら非表示にしたい端と端(AGとAQ)をクリックし、右クリックから非表示
ログボによるAP獲得量は、基準日からの日数で算出している
基準日はログボ1日目となる日付であれば過去でも未来でも問題なし
30割を2週続けるだけで10連分
ホラーですね

最高ドロップ数になる編成ボーナス下限値の可視化

新春狂想曲のWikiページを見ていたら、このような文章を見つけました。

・実際のドロップ数は小数点以下を切り上げた値になるため、基本ドロップ数の少ないクエストではボーナス値を積み増しても差が付かないことがある。
(例:基本ドロップ数が4個の場合、ボーナス値は30%でも50%でもボーナスドロップ数は2個)

https://bluearchive.wikiru.jp/?イベント41_【復刻】新春狂想曲+第68番#Quest

イベントのドロップアイテムは基本的に切り上げなので、数値の組み合わせ次第ではボーナス生徒が増えてもドロップ数が変わらない、ということが起こります。
ボーナス生徒を一人抜いても問題ないと予め分かっていれば、低Lvの生徒の割合を小さくできるのでクリアが容易になります。
また、イベントの途中でボーナス対象生徒を引いた場合などに、ボーナス値が変わっても周回する必要がないと分かれば手間がかからず便利です。
ということで、自分の所持生徒で実現可能な最高編成ボーナス値を入力することで、そのドロップ数を維持できる下限のボーナス値を表示できるシートを作りました。
ついでにソルバー用のドロップ数反映機能も備えています。

黄色い反映ボタンはドロップがあるのにソルバー側で空白という意味
ボタンを押すとソルバーに入力される
全反映で一括入力も可能

青背景のセルに入力します。上には手持ちで出せる最高のボーナス値、基礎数はそのステージ本来のドロップ数を入力します。
下は、生徒が増えた際に、青い箇所に増加後のボーナス値を入力することで、ボーナスのドロップ数がどうなるかを可視化します。増加量が0のステージは周回しなおす必要が無い、ということです。
下限Bonus値というのは、最高ドロップ数を維持したまま下げることができる下限のボーナス値となっています。「例」がわかりやすいのですが、ステージ9に関しては50%でも30%でもどうせ同じ数だ、というのが一目で分かるようになります。

色々書いていたんですが、ドロップ数が増えたら最高Bonus値を書き換えるだけで、ソルバーに今入っている数値より小さい(のでボーナス上書きのためにクリアする必要がある)ステージが黄色くなるので、それ見ればいいだけでした。

ボーナス値は5%か10%刻みなので、見やすいように左上にあるボタンで切上げ表示にできます。
※下の行は削除しました

ボタンの色

・黄色は未入力orソルバーに入力済みの数が小さい
・緑は一致
・赤はソルバーの数の方が大きい(なにかおかしい)

イベント周回では毎回毎回ボーナスの最大化忘れが心配で仕方なかったので、最大化するたびにソルバーのドロップ欄にひとつひとつ手入力する以外にも、最初に計算で全部出してからボタンで押し忘れを確認しながら入力する方法も用意できて満足しています。

白いところは全てソルバーに入力済みの情報を表示しているのですが、ステージの枠数が足りなくなった場合は自分で行を挿入して増やす必要があります。
また、複製したソルバーでも計算ができるようになった代わりに、一番左にあるソルバーを主と認識して読み取り・書き込みの対象とするため、シート参照が完全自動ではなくなってしまい、裏での処理が煩雑になっています。
なにかのタイミングで行数の不一致が発生し、ぐちゃぐちゃした状況になってもリセットできるように[stage読込]を用意しようと考えていますが、動的配列の参照も途切れる可能性も考慮しなければいけないため、どうすればいいのか勉強中です。しばらくお待ち下さい。

各種設定

行・列を増減させる

日付の行・ステージの列は、行・列を選択して挿入・削除することで増減させることができます。
26行とB列に動的配列の式を格納しているため、そこさえ触れなければいくらでも増減できます。ソルバー計算も問題ありません。(効率の良いステージが自動的に選択されるので、用意したステージの半分も使わない、なんてこともザラにありそうですが…)

日数やステージ数に合わせて増減可能

ドロップダウンリストの最大値

DDL最大値 と書かれているところの数字が周回数記録用のドロップダウンリストの最大値になっています。APは有限なのであまり大きくしても意味はないです。100でも多い気がしています。
小さすぎると入力規制に引っかかって大きな数字を入力できなくなるので、特にこだわらなければそのままにしておいてください。

最適化対象とする変数の追加

※ブルアカ周回数計算 変数追加版の仕様です。
イベントの実績ミッションで特定の敵を〇〇人倒す、といったものが出た際に、特定のステージにしか出現しない場合はそのステージを周回対象に含める必要が出てきます。しかし、イベントアイテムのドロップもあるため、何も考えずに周回すると、特定のものだけ集めすぎてしまう可能性が発生します。
このときの考え方としては、特定のステージにしか出現しない敵を新たなドロップアイテムだと考え、目標数を超えるようにソルバーの計算で考慮するというものになります。
コメントでのご要望にお応えし、イベントアイテム4個以上の任意の数の変数を設定できるように拡張しました。

使い方は変わらず、入力後ソルバー実行を押すだけです。
増やしすぎると計算に時間が掛かると思います。

変数を更に追加したい場合は赤矢印の場所に行を追加します。
変なことになったら削除してコピーし直してください。

自分で増やした場合、最終所持数と余剰獲得数は空白になります。残念ながら仕様です。

所感

  • Google Apps Script(GAS)万能すぎる

  • 初めて触って一晩でこんな便利なものが完成しちゃっていいんですか??

  • .getValues()で取得できる配列が1行だとしても勝手に二次元配列になるの許せない…これだけで既に完璧な設計になってたソルバーが動かなくなって2時間くらい困ってた

  • どんどん湧く改善案を反映させるのはいいんだけど、使い方の画像に反映させるのがめんどくさくて後回しになってる

  • noteで前回の方の記事を公開してから「覚悟」氏は30連、トキ&ナギサ様は無料10連チケ+20連で出て、徳を積む効果としてかなりのものがあるのではないかと期待値が爆上がりしています。ニュツキ・正月カヨコ・正月ハルカは是非とも100連以内で揃ってほしいですね。

驕るな!!!!!!

感想・不具合報告 お待ちしてます

予防線を張っておきますが、C言語とArduino言語しか触ったことのない機械科の人間が作っているのでクラスとかオブジェクトとか何も理解していません。コードを見ても怒らないでください。

おまけ(神名のカケラ必要数計算表)

Wikiにある表が見づらかったのと、ワカモの限界解放がギリギリのところで困ったのでちゃんと計算できるように作りました。(色彩ホド戦)
神名文字の所持数を入力し、ショップでのカケラ購入数を入力すると、現在の星から任意の星に上げるためのカケラ必要数が表示されます。
ショップでの購入数に応じて交換レートに反映されます。
いくつ購入したか覚えていないなら、とりあえず80にしておけばそれより増えることはありません。
限界解放の段階が追加されても対応できるように、薄い字で枠だけ確保してあります。

いいなと思ったら応援しよう!