Guest User

Untitled

a guest
Feb 18th, 2019
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.19 KB | None | 0 0
  1. // 配列をシャッフルする関数
  2. const shuffleArray = array => {
  3. for (var i = array.length - 1; i > 0; i--) {
  4. var r = Math.floor(Math.random() * (i + 1));
  5. var tmp = array[i];
  6. array[i] = array[r];
  7. array[r] = tmp;
  8. }
  9. return array
  10. }
  11.  
  12. // mondai:全部の問題。破壊的変更はしない。
  13. // shuffledMondai:全部の問題をシャッフルしたもの。
  14. // nokoriMondai:シャッフルされたあと出題ごとに配列をunshiftしていく。
  15. // shuffuledNokoriMondai:出題ごとに配列をunshiftしていく。
  16. // Q:問題文
  17. // seikai:Qに問題を入れたあと["ok","正解"]の形式になる
  18. // fuseikai:shuffledMondaiからランダムで3つ取り出したものを[["ng":"不正解"],["ng":"不正解"],["ng":"不正解"]]の形にする
  19. // shutudai:seikaiとfuseikaiを連結してシャッフルした結果の配列(例 [["ng":"不正解"],["ng":"不正解"],["ng":"不正解"],["ok":"正解"]] (正解の配列の要素の位置はランダム)になっている)
  20. const mondai = [["up", "上"], ["down", "下"], ["right", "右"], ["left", "左"], ["tree", "木"], ["fire", "火"], ["dog", "犬"]]
  21. // 全問題から回答して減っていく問題の配列をコピー(参照渡しではないのでArray.from)
  22. let shuffuledNokoriMondai = shuffleArray(Array.from(mondai))
  23.  
  24. // 問題数分の出題を繰り返す
  25. let num = shuffuledNokoriMondai.length
  26. for (let i = 0; i < num; i++) {
  27. // 1問分取り出す
  28. let seikai = shuffuledNokoriMondai.splice(0, 1)
  29.  
  30. // ランダムで正解とかぶってない配列だけを3つ取り出して不正解の配列を作る
  31. let shuffledMondai = Array.from(shuffleArray(mondai))
  32. let fuseikai = shuffledMondai.filter(v => v !== seikai[0])
  33. let randomFuseikai = fuseikai.splice(0, 3)
  34. randomFuseikai.map(v => v[0] = "ng")
  35.  
  36. // 問題文を作って、正解の配列を作って、出題の配列をランダムで作る
  37. let Q = seikai[0][0]
  38. seikai[0][0] = "ok"
  39. let shutudai = shuffleArray(randomFuseikai.concat(seikai))
  40.  
  41. // 出題のロジック
  42. console.log("出題")
  43. for (let a of shutudai) { console.log(a) }
  44. console.log("-------------------")
  45.  
  46. // "ok"から元の["問題","回答"]の状態に戻す
  47. seikai[0][0] = Q
  48. }
Add Comment
Please, Sign In to add comment