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 = { |
||||
// Anagrams, multiples, equality
|
||||
generate(n, level) { |
||||
const values = []; |
||||
let v; |
||||
import BaseModel from './base.model'; |
||||
|
||||
for (let i = 0; i < n; i++) { |
||||
v = Math.ceil(Math.random() * 1000); |
||||
values.push({ |
||||
value: v, |
||||
show: true, |
||||
valid: this.validate(v, level) |
||||
}); |
||||
}; |
||||
const FactorsModel = Object.create(BaseModel); |
||||
|
||||
return values; |
||||
}, |
||||
FactorsModel.generate = function(n, level) { |
||||
const target = level + 3; |
||||
const factors = []; |
||||
const nonfactors = []; |
||||
|
||||
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; |
||||
} |
||||
for (let i = 1; i <= target; i++) { |
||||
if (target % i === 0) { |
||||
factors.push(i); |
||||
} |
||||
else { |
||||
nonfactors.push(i); |
||||
} |
||||
} |
||||
|
||||
return true; |
||||
}, |
||||
return this.buildResults(factors, nonfactors, n); |
||||
}; |
||||
|
||||
validate(value, level) { |
||||
return ((value || -1) % (level + 2) === 0); |
||||
} |
||||
FactorsModel.getTitle = (level) => { |
||||
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 = { |
||||
// 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; |
||||
} |
||||
} |
||||
import BaseModel from './base.model'; |
||||
|
||||
const MultiplesModel = Object.create(BaseModel); |
||||
|
||||
MultiplesModel.generate = function(n, level) { |
||||
const multiples = []; |
||||
const nonmultiples = []; |
||||
const target = 19//level + 2;
|
||||
const upperLimit = target * 150; |
||||
|
||||
return true; |
||||
}, |
||||
let tmp; |
||||
while (multiples.length < Math.ceil(n * 4)) { |
||||
tmp = Math.ceil(Math.random() * upperLimit); |
||||
if (tmp % target === 0) { |
||||
multiples.push(tmp); |
||||
} |
||||
} |
||||
|
||||
validate(value, level) { |
||||
return ((value || -1) % (level + 2) === 0); |
||||
while (nonmultiples.length < Math.floor(n * 4)) { |
||||
tmp = Math.ceil(Math.random() * upperLimit); |
||||
if (tmp % target !== 0) { |
||||
nonmultiples.push(tmp); |
||||
} |
||||
} |
||||
|
||||
return this.buildResults(multiples, nonmultiples, n); |
||||
}; |
||||
|
||||
MultiplesModel.getTitle = (level) => { |
||||
return `Multiples of ${level + 2}`; |
||||
}; |
||||
|
||||
MultiplesModel.getError = (value, level) => { |
||||
return `Oops! ${value} is not a multiple of ${level + 2}.`; |
||||
}; |
||||
|
||||
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