parent
3b3b9b9109
commit
d35d0792c4
13 changed files with 185 additions and 162 deletions
@ -0,0 +1,38 @@ |
|||||||
|
import BaseModel from './base.model'; |
||||||
|
|
||||||
|
const AdditionModel = Object.create(BaseModel); |
||||||
|
|
||||||
|
AdditionModel.generate = function(n, level) { |
||||||
|
const equals = []; |
||||||
|
const notequals = []; |
||||||
|
const target = level + 5; |
||||||
|
const midpoint = Math.ceil(target / 2); |
||||||
|
|
||||||
|
let g1, g2, b1, b2; |
||||||
|
|
||||||
|
for (let i = 1; i < midpoint; i++) { |
||||||
|
g1 = i; |
||||||
|
g2 = target - i; |
||||||
|
|
||||||
|
b1 = Math.max(1, i - Math.ceil(Math.random() * 3)); |
||||||
|
b2 = Math.max(1, target - i - Math.ceil(Math.random() * 3)); |
||||||
|
|
||||||
|
equals.push(`${g2}+${g1}`); |
||||||
|
equals.push(`${g1}+${g2}`); |
||||||
|
|
||||||
|
notequals.push(`${b2}+${b1}`); |
||||||
|
notequals.push(`${b1}+${b2}`); |
||||||
|
} |
||||||
|
|
||||||
|
return this.buildResults(equals, notequals, n); |
||||||
|
}; |
||||||
|
|
||||||
|
AdditionModel.getTitle = (level) => { |
||||||
|
return `Equals ${level + 5}`; |
||||||
|
}; |
||||||
|
|
||||||
|
AdditionModel.getError = (value, level) => { |
||||||
|
return `Oops! ${value} does not equal ${level + 5}.`; |
||||||
|
}; |
||||||
|
|
||||||
|
export default AdditionModel; |
@ -0,0 +1,39 @@ |
|||||||
|
const BaseModel = { |
||||||
|
buildResults(validResults, invalidResults, length) { |
||||||
|
let valid; |
||||||
|
const results = []; |
||||||
|
|
||||||
|
for (let i = 0; i < length; i++) { |
||||||
|
valid = Math.random() < 0.5; |
||||||
|
|
||||||
|
if (valid === true) { |
||||||
|
results.push({ |
||||||
|
value: validResults[Math.floor(Math.random() * validResults.length)], |
||||||
|
show: true, |
||||||
|
valid: true |
||||||
|
}); |
||||||
|
} |
||||||
|
else { |
||||||
|
results.push({ |
||||||
|
value: invalidResults[Math.floor(Math.random() * invalidResults.length)], |
||||||
|
show: true, |
||||||
|
valid: false |
||||||
|
}); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return results; |
||||||
|
}, |
||||||
|
|
||||||
|
checkComplete(values, level) { |
||||||
|
for (let i = 0; i < values.length; i++) { |
||||||
|
if (values[i].valid === true && values[i].show === true) { |
||||||
|
return false; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
return true; |
||||||
|
} |
||||||
|
}; |
||||||
|
|
||||||
|
export default BaseModel; |
@ -1,42 +0,0 @@ |
|||||||
const MultiplesModel = { |
|
||||||
// Anagrams, multiples, equality
|
|
||||||
generate(n, level) { |
|
||||||
const values = []; |
|
||||||
let v; |
|
||||||
|
|
||||||
for (let i = 0; i < n; i++) { |
|
||||||
v = Math.ceil(Math.random() * 1000); |
|
||||||
values.push({ |
|
||||||
value: v, |
|
||||||
show: true, |
|
||||||
valid: this.validate(v, level) |
|
||||||
}); |
|
||||||
}; |
|
||||||
|
|
||||||
return values; |
|
||||||
}, |
|
||||||
|
|
||||||
getTitle(level) { |
|
||||||
return `Multiples of ${level + 2}`; |
|
||||||
}, |
|
||||||
|
|
||||||
getError(value, level) { |
|
||||||
return `Oops! ${value} is not a multiple of ${level + 2}.`; |
|
||||||
}, |
|
||||||
|
|
||||||
checkComplete(values, level) { |
|
||||||
for (let i = 0; i < values.length; i++) { |
|
||||||
if (values[i].valid === true && values[i].show === true) { |
|
||||||
return false; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return true; |
|
||||||
} |
|
||||||
|
|
||||||
validate(value, level) { |
|
||||||
return ((value || -1) % (level + 2) === 0); |
|
||||||
}; |
|
||||||
}; |
|
||||||
|
|
||||||
export default MultiplesModel; |
|
@ -1,42 +1,30 @@ |
|||||||
const MultiplesModel = { |
import BaseModel from './base.model'; |
||||||
// Anagrams, multiples, equality
|
|
||||||
generate(n, level) { |
|
||||||
const values = []; |
|
||||||
let v; |
|
||||||
|
|
||||||
for (let i = 0; i < n; i++) { |
const FactorsModel = Object.create(BaseModel); |
||||||
v = Math.ceil(Math.random() * 1000); |
|
||||||
values.push({ |
|
||||||
value: v, |
|
||||||
show: true, |
|
||||||
valid: this.validate(v, level) |
|
||||||
}); |
|
||||||
}; |
|
||||||
|
|
||||||
return values; |
|
||||||
}, |
|
||||||
|
|
||||||
getTitle(level) { |
FactorsModel.generate = function(n, level) { |
||||||
return `Multiples of ${level + 2}`; |
const target = level + 3; |
||||||
}, |
const factors = []; |
||||||
|
const nonfactors = []; |
||||||
|
|
||||||
getError(value, level) { |
for (let i = 1; i <= target; i++) { |
||||||
return `Oops! ${value} is not a multiple of ${level + 2}.`; |
if (target % i === 0) { |
||||||
}, |
factors.push(i); |
||||||
|
} |
||||||
checkComplete(values, level) { |
else { |
||||||
for (let i = 0; i < values.length; i++) { |
nonfactors.push(i); |
||||||
if (values[i].valid === true && values[i].show === true) { |
|
||||||
return false; |
|
||||||
} |
} |
||||||
} |
} |
||||||
|
|
||||||
return true; |
return this.buildResults(factors, nonfactors, n); |
||||||
}, |
}; |
||||||
|
|
||||||
validate(value, level) { |
FactorsModel.getTitle = (level) => { |
||||||
return ((value || -1) % (level + 2) === 0); |
return `Factors of ${level + 3}`; |
||||||
} |
}; |
||||||
|
|
||||||
|
FactorsModel.getError = (value, level) => { |
||||||
|
return `Oops! ${value} is not a factor of ${level + 2}.`; |
||||||
}; |
}; |
||||||
|
|
||||||
export default MultiplesModel; |
export default FactorsModel; |
||||||
|
@ -1,42 +0,0 @@ |
|||||||
const MultiplesModel = { |
|
||||||
// Anagrams, multiples, equality
|
|
||||||
generate(n, level) { |
|
||||||
const values = []; |
|
||||||
let v; |
|
||||||
|
|
||||||
for (let i = 0; i < n; i++) { |
|
||||||
v = Math.ceil(Math.random() * 1000); |
|
||||||
values.push({ |
|
||||||
value: v, |
|
||||||
show: true, |
|
||||||
valid: this.validate(v, level) |
|
||||||
}); |
|
||||||
}; |
|
||||||
|
|
||||||
return values; |
|
||||||
}, |
|
||||||
|
|
||||||
getTitle(level) { |
|
||||||
return `Multiples of ${level + 2}`; |
|
||||||
}, |
|
||||||
|
|
||||||
getError(value, level) { |
|
||||||
return `Oops! ${value} is not a multiple of ${level + 2}.`; |
|
||||||
}, |
|
||||||
|
|
||||||
checkComplete(values, level) { |
|
||||||
for (let i = 0; i < values.length; i++) { |
|
||||||
if (values[i].valid === true && values[i].show === true) { |
|
||||||
return false; |
|
||||||
} |
|
||||||
} |
|
||||||
|
|
||||||
return true; |
|
||||||
}, |
|
||||||
|
|
||||||
validate(value, level) { |
|
||||||
return ((value || -1) % (level + 2) === 0); |
|
||||||
} |
|
||||||
}; |
|
||||||
|
|
||||||
export default MultiplesModel; |
|
@ -1,42 +1,37 @@ |
|||||||
const MultiplesModel = { |
import BaseModel from './base.model'; |
||||||
// Anagrams, multiples, equality
|
|
||||||
generate(n, level) { |
|
||||||
const values = []; |
|
||||||
let v; |
|
||||||
|
|
||||||
for (let i = 0; i < n; i++) { |
|
||||||
v = Math.ceil(Math.random() * 1000); |
|
||||||
values.push({ |
|
||||||
value: v, |
|
||||||
show: true, |
|
||||||
valid: this.validate(v, level) |
|
||||||
}); |
|
||||||
}; |
|
||||||
|
|
||||||
return values; |
const MultiplesModel = Object.create(BaseModel); |
||||||
}, |
|
||||||
|
|
||||||
getTitle(level) { |
MultiplesModel.generate = function(n, level) { |
||||||
return `Multiples of ${level + 2}`; |
const multiples = []; |
||||||
}, |
const nonmultiples = []; |
||||||
|
const target = 19//level + 2;
|
||||||
|
const upperLimit = target * 150; |
||||||
|
|
||||||
getError(value, level) { |
let tmp; |
||||||
return `Oops! ${value} is not a multiple of ${level + 2}.`; |
while (multiples.length < Math.ceil(n * 4)) { |
||||||
}, |
tmp = Math.ceil(Math.random() * upperLimit); |
||||||
|
if (tmp % target === 0) { |
||||||
|
multiples.push(tmp); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
checkComplete(values, level) { |
while (nonmultiples.length < Math.floor(n * 4)) { |
||||||
for (let i = 0; i < values.length; i++) { |
tmp = Math.ceil(Math.random() * upperLimit); |
||||||
if (values[i].valid === true && values[i].show === true) { |
if (tmp % target !== 0) { |
||||||
return false; |
nonmultiples.push(tmp); |
||||||
} |
} |
||||||
} |
} |
||||||
|
|
||||||
return true; |
return this.buildResults(multiples, nonmultiples, n); |
||||||
}, |
}; |
||||||
|
|
||||||
validate(value, level) { |
MultiplesModel.getTitle = (level) => { |
||||||
return ((value || -1) % (level + 2) === 0); |
return `Multiples of ${level + 2}`; |
||||||
} |
}; |
||||||
|
|
||||||
|
MultiplesModel.getError = (value, level) => { |
||||||
|
return `Oops! ${value} is not a multiple of ${level + 2}.`; |
||||||
}; |
}; |
||||||
|
|
||||||
export default MultiplesModel; |
export default MultiplesModel; |
||||||
|
@ -0,0 +1,41 @@ |
|||||||
|
import BaseModel from './base.model'; |
||||||
|
|
||||||
|
const SubtractionModel = Object.create(BaseModel); |
||||||
|
|
||||||
|
SubtractionModel.generate = function(n, level) { |
||||||
|
const equals = []; |
||||||
|
const notequals = []; |
||||||
|
const target = level + 2; |
||||||
|
const upperLimit = target * 10; |
||||||
|
|
||||||
|
let g1, g2, b1, b2, b3; |
||||||
|
|
||||||
|
for (let i = target + 1; i < upperLimit; i++) { |
||||||
|
g1 = i; |
||||||
|
g2 = i - target; |
||||||
|
|
||||||
|
b1 = i + Math.ceil(Math.random() * 3); |
||||||
|
b2 = Math.max(1, i - Math.ceil(Math.random() * 3)); |
||||||
|
b3 = i - target; |
||||||
|
|
||||||
|
// console.log(`(${i}) ${g1} - ${g2} = ${g1 - g2}`);
|
||||||
|
// console.error(`(${i}) ${b1} - ${b3} = ${b1 - b3}`);
|
||||||
|
// console.error(`(${i}) ${b2} - ${b3} = ${b2 - b3}`);
|
||||||
|
|
||||||
|
equals.push(`${g1}-${g2}`); |
||||||
|
notequals.push(`${b1}-${b3}`); |
||||||
|
notequals.push(`${b2}-${b3}`); |
||||||
|
} |
||||||
|
|
||||||
|
return this.buildResults(equals, notequals, n); |
||||||
|
}; |
||||||
|
|
||||||
|
SubtractionModel.getTitle = (level) => { |
||||||
|
return `Equals ${level + 2}`; |
||||||
|
}; |
||||||
|
|
||||||
|
SubtractionModel.getError = (value, level) => { |
||||||
|
return `Oops! ${value} does not equal ${level + 2}.`; |
||||||
|
}; |
||||||
|
|
||||||
|
export default SubtractionModel; |
Loading…
Reference in new issue