-
Notifications
You must be signed in to change notification settings - Fork 0
/
index.js
136 lines (123 loc) · 5.05 KB
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
function random(from, to) {
return Math.floor(Math.random() * (to - from)) + from;
}
function sample(arr, count) {
if (count == null) {
return arr[random(0, arr.length)];
}
return shuffle(arr).slice(0, count);
}
function shuffle(arr) {
return [...arr].sort(() => {
return Math.random() > 0.5 ? -1 : 1;
});
}
const tasks = [
{ q: "2 ⋅ 2 =", s: "4", f: ["2", "3", "8", "6"] },
{ q: "2 ⋅ 3 =", s: "6", f: ["3", "5", "8", "7"] },
{ q: "2 ⋅ 4 =", s: "8", f: ["6", "7", "10", "12"] },
{ q: "2 ⋅ 5 =", s: "10", f: ["12", "8", "9", "7"] },
{ q: "2 ⋅ 6 =", s: "12", f: ["11", "10", "14", "8"] },
{ q: "2 ⋅ 7 =", s: "14", f: ["12", "13", "15", "17"] },
{ q: "2 ⋅ 8 =", s: "16", f: ["12", "14", "18", "20"] },
{ q: "2 ⋅ 9 =", s: "18", f: ["17", "16", "20", "21", "19"] },
{ q: "3 ⋅ 2 =", s: "6", f: ["4", "5", "7", "9"] },
{ q: "3 ⋅ 3 =", s: "9", f: ["8", "7", "10", "11"] },
{ q: "3 ⋅ 4 =", s: "12", f: ["11", "10", "13", "14"] },
{ q: "3 ⋅ 5 =", s: "15", f: ["12", "14", "16", "20"] },
{ q: "3 ⋅ 6 =", s: "18", f: ["12", "17", "20", "19"] },
{ q: "3 ⋅ 7 =", s: "21", f: ["22", "23", "28", "20"] },
{ q: "3 ⋅ 8 =", s: "24", f: ["22", "23", "25", "28"] },
{ q: "3 ⋅ 9 =", s: "27", f: ["28", "29", "30", "26"] },
{ q: "4 ⋅ 2 =", s: "8", f: ["4", "7", "6", "10"] },
{ q: "4 ⋅ 3 =", s: "12", f: ["10", "11", "13", "14"] },
{ q: "4 ⋅ 4 =", s: "16", f: ["8", "12", "18", "20"] },
{ q: "4 ⋅ 5 =", s: "20", f: ["22", "21", "18", "25"] },
{ q: "4 ⋅ 6 =", s: "24", f: ["23", "22", "28", "26"] },
{ q: "4 ⋅ 7 =", s: "28", f: ["30", "32", "21", "27"] },
{ q: "4 ⋅ 8 =", s: "32", f: ["30", "31", "34", "36"] },
{ q: "4 ⋅ 9 =", s: "36", f: ["26", "34", "35", "38"] },
{ q: "5 ⋅ 2 =", s: "10", f: ["5", "15", "13", "9"] },
{ q: "5 ⋅ 3 =", s: "15", f: ["10", "20", "17", "20"] },
{ q: "5 ⋅ 4 =", s: "20", f: ["15", "25", "18", "22"] },
{ q: "5 ⋅ 5 =", s: "25", f: ["20", "30", "23", "27"] },
{ q: "5 ⋅ 6 =", s: "30", f: ["25", "35", "31", "28"] },
{ q: "5 ⋅ 7 =", s: "35", f: ["30", "40", "31", "37"] },
{ q: "5 ⋅ 8 =", s: "40", f: ["45", "35", "34", "42"] },
{ q: "5 ⋅ 9 =", s: "45", f: ["50", "40", "42", "47"] },
{ q: "6 ⋅ 2 =", s: "12", f: ["11", "14", "16", "10"] },
{ q: "6 ⋅ 3 =", s: "18", f: ["16", "20", "12", "24"] },
{ q: "6 ⋅ 4 =", s: "24", f: ["25", "22", "28", "26"] },
{ q: "6 ⋅ 5 =", s: "30", f: ["28", "25", "35", "32"] },
{ q: "6 ⋅ 6 =", s: "36", f: ["30", "33", "40", "38"] },
{ q: "6 ⋅ 7 =", s: "42", f: ["41", "40", "38", "45"] },
{ q: "6 ⋅ 8 =", s: "48", f: ["42", "44", "50", "52"] },
{ q: "6 ⋅ 9 =", s: "54", f: ["50", "52", "56", "57"] },
{ q: "7 ⋅ 2 =", s: "14", f: ["12", "16", "18", "15"] },
{ q: "7 ⋅ 3 =", s: "21", f: ["25", "17", "19", "23"] },
{ q: "7 ⋅ 4 =", s: "28", f: ["25", "26", "30", "32"] },
{ q: "7 ⋅ 5 =", s: "35", f: ["30", "40", "25", "45"] },
{ q: "7 ⋅ 6 =", s: "42", f: ["40", "41", "44", "46"] },
{ q: "7 ⋅ 7 =", s: "49", f: ["45", "47", "51", "52"] },
{ q: "7 ⋅ 8 =", s: "56", f: ["53", "52", "57", "54"] },
{ q: "7 ⋅ 9 =", s: "63", f: ["60", "62", "65", "66"] },
{ q: "8 ⋅ 2 =", s: "16", f: ["12", "14", "18", "20"] },
{ q: "8 ⋅ 3 =", s: "24", f: ["22", "26", "28", "30"] },
{ q: "8 ⋅ 4 =", s: "32", f: ["30", "28", "34", "36"] },
{ q: "8 ⋅ 5 =", s: "40", f: ["30", "35", "45", "50"] },
{ q: "8 ⋅ 6 =", s: "48", f: ["52", "50", "44", "46"] },
{ q: "8 ⋅ 7 =", s: "56", f: ["55", "46", "58", "53"] },
{ q: "8 ⋅ 8 =", s: "64", f: ["66", "60", "62", "68"] },
{ q: "8 ⋅ 9 =", s: "72", f: ["62", "70", "68", "74"] },
{ q: "9 ⋅ 2 =", s: "18", f: ["17", "20", "16", "21"] },
{ q: "9 ⋅ 3 =", s: "27", f: ["25", "29", "30", "33"] },
{ q: "9 ⋅ 4 =", s: "36", f: ["32", "34", "40", "38"] },
{ q: "9 ⋅ 5 =", s: "45", f: ["55", "40", "55", "50"] },
{ q: "9 ⋅ 6 =", s: "54", f: ["44", "58", "56", "52"] },
{ q: "9 ⋅ 7 =", s: "63", f: ["67", "62", "65", "61"] },
{ q: "9 ⋅ 8 =", s: "72", f: ["76", "70", "68", "78"] },
{ q: "9 ⋅ 9 =", s: "81", f: ["79", "82", "83", "89"] },
];
m.mount(document.body, () => {
let task, solutions;
const rightSounds = [];
const wrongSounds = [];
function takeNextTask() {
task = sample(tasks);
solutions = shuffle([task.s, ...sample(task.f, 2)]);
}
takeNextTask();
return {
view: () => [
[1, 2].map((index) =>
m("audio", {
src: `sounds/right${index}.mp3`,
oncreate: ({ dom }) => rightSounds.push(dom),
})
),
[1, 2].map((index) =>
m("audio", {
src: `sounds/wrong${index}.mp3`,
oncreate: ({ dom }) => wrongSounds.push(dom),
})
),
m(".q", task.q),
solutions.map((s) =>
m(
"button",
{
onclick: () => {
if (s === task.s) {
sample(rightSounds).play();
takeNextTask();
} else {
sample(wrongSounds).play();
}
},
},
s
)
),
],
};
});