Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // 配列をシャッフルする関数
- const shuffleArray = array => {
- for (var i = array.length - 1; i > 0; i--) {
- var r = Math.floor(Math.random() * (i + 1));
- var tmp = array[i];
- array[i] = array[r];
- array[r] = tmp;
- }
- return array
- }
- // mondai:全部の問題。破壊的変更はしない。
- // shuffledMondai:全部の問題をシャッフルしたもの。
- // nokoriMondai:シャッフルされたあと出題ごとに配列をunshiftしていく。
- // shuffuledNokoriMondai:出題ごとに配列をunshiftしていく。
- // Q:問題文
- // seikai:Qに問題を入れたあと["ok","正解"]の形式になる
- // fuseikai:shuffledMondaiからランダムで3つ取り出したものを[["ng":"不正解"],["ng":"不正解"],["ng":"不正解"]]の形にする
- // shutudai:seikaiとfuseikaiを連結してシャッフルした結果の配列(例 [["ng":"不正解"],["ng":"不正解"],["ng":"不正解"],["ok":"正解"]] (正解の配列の要素の位置はランダム)になっている)
- const mondai = [["up", "上"], ["down", "下"], ["right", "右"], ["left", "左"], ["tree", "木"], ["fire", "火"], ["dog", "犬"]]
- // 全問題から回答して減っていく問題の配列をコピー(参照渡しではないのでArray.from)
- let shuffuledNokoriMondai = shuffleArray(Array.from(mondai))
- // 問題数分の出題を繰り返す
- let num = shuffuledNokoriMondai.length
- for (let i = 0; i < num; i++) {
- // 1問分取り出す
- let seikai = shuffuledNokoriMondai.splice(0, 1)
- // ランダムで正解とかぶってない配列だけを3つ取り出して不正解の配列を作る
- let shuffledMondai = Array.from(shuffleArray(mondai))
- let fuseikai = shuffledMondai.filter(v => v !== seikai[0])
- let randomFuseikai = fuseikai.splice(0, 3)
- randomFuseikai.map(v => v[0] = "ng")
- // 問題文を作って、正解の配列を作って、出題の配列をランダムで作る
- let Q = seikai[0][0]
- seikai[0][0] = "ok"
- let shutudai = shuffleArray(randomFuseikai.concat(seikai))
- // 出題のロジック
- console.log("出題")
- for (let a of shutudai) { console.log(a) }
- console.log("-------------------")
- // "ok"から元の["問題","回答"]の状態に戻す
- seikai[0][0] = Q
- }
Add Comment
Please, Sign In to add comment