模擬試験問題を「ユーザーのタイミング」でシャッフルする

従来の方式
月に 1 回、サーバー(Google Apps Script)側で過去問をシャッフルして、新しい模擬試験問題を作り、アプリに配信していました。学習者は指定された問題を解く、という流れです。


ご指摘をいただきました
 ユーザーの方から 「模擬試験問題の構成が似通った問題に偏っている」 というご指摘をいただきました。
 

問題分類の複雑さ:科目aの配点が50点だとすると


単問 … 1つの設問だけで完結する問題
連問 … 複数の小問(問1・問2・問3など)がある問題
リード文 … 「この文に従って問題4から7を解け。」

模擬試験を作るときは、科目aの配点が50点になるように、「a1は5問選ぶ」「a2は5問選ぶ」「a3は1問選ぶ」と決めていきます。

「連問」や「リード文」は、複数の小問がセットになっているのでセットで動かす必要があります。

実は最初、バラして作成していたのですが、これもユーザーからご指摘をいただきました(当然です)。

 
新しい方式:端末でシャッフル
そこで発想を変えました。問題データベースを端末に持たせて、実際の「問題の入れ替え」は端末内で行う方式に移行します。
こうすることで、ユーザーが好きなタイミングで問題をシャッフルできる


ユーザーが見る変化
模擬試験選択画面に、新しく 2 つのボタン が出ます。
1. 「問題をシャッフル」ボタン
→ 今までの記録が消えて、新しく問題が入れ替わります
→ 実行する前に確認パネルが出ます

2. 「選択肢の表示順を変更」ボタン
→ ランダムにするか、昇順にするかを選べます
→ 表示順を変えただけでは点数は消えません


まとめ
「月に 1 回配信」という仕組みも面白かったのですが、これ以上問題を細かく管理するのに限界がありました。

模擬試験問題を ユーザーのタイミングでシャッフルできれば 、より柔軟な学習が実現できると思い、修正を行いました。


追記
この新方式への移行は JavaScript(Google Apps Script)をC#(Unity)に変換する という作業がありました。

GAS で書かれたスパゲッティコード(複雑で保守しづらいコード)をAIに読ませた所、C#のコードに変換してくれました。驚きです。