UNPKG

math-q-factory

Version:

node module that return maths questions

88 lines (84 loc) 3.49 kB
const rFuncs = require('../../nonQ/randFuncs'); const { wrapMJax } = require('../../nonQ/formatFuncs'); const selector = { quarters: ({ denomThatIsFactor }) => { let numer = denomThatIsFactor % 2 ? 3 : 1 let ans = denomThatIsFactor % 2 ? '75%' : '25%' let frac = wrapMJax(`${numer}/4`) return { q: `Convert ${frac} to a percentage`, a: ans, hints: [ 'Percent means per 100', `Can you convert ${frac} into something over 100?`, `What is ${frac} of 100?` ], buildingBlocks: [ 'fraction-ofAmount-manySlices-120', ], qFeedback: `${frac} = ${ans}` } }, str8toOver100: ({ numerForDenomThatIsFactor, denomThatIsFactor }) => { let ans = numerForDenomThatIsFactor * 100 / denomThatIsFactor let frac = wrapMJax(`${numerForDenomThatIsFactor}/${denomThatIsFactor}`) return { q: `Convert ${frac} to a percentage`, a: ans + '%', hints: [ 'Percent means per 100', `Can you convert ${frac} into something over 100?`, `Multiply top and bottom of ${frac} by ${100 / denomThatIsFactor}` ], buildingBlocks: [ 'fraction-toPercentage-quarters-50' ], qFeedback: `${frac} = ${ans}%` } }, simplifyThenToOver100: ({ denomThatIsFactor, nonFactorDenom, numerForOtherDenom }) => { let ans = numerForOtherDenom * 100 / nonFactorDenom let frac = wrapMJax(`${numerForOtherDenom}/${nonFactorDenom}`) return { q: `Convert ${frac} to a percentage`, a: ans + '%', hints: [ 'It might be easier to start by simplifying the fraction', 'Then you want to make the denominator 100' ], buildingBlocks: [ 'fraction-toPercentage-str8toOver100-100' ], qFeedback: `${frac} = ${ans}%` } } } const usefulDenoms = [ // don't use multiples like 13 (except 52), 17, 19, 23 { factorOf100: 4, multiplesOfFactor: [8, 12, 16, 24, 28, 32, 36, 44, 48, 52, 56, 64, 72, 84, 88, 96] }, { factorOf100: 5, multiplesOfFactor: [15, 35, 45, 55] }, { factorOf100: 10, multiplesOfFactor: [30, 70, 90] }, { factorOf100: 20, multiplesOfFactor: [40, 60, 80] }, { factorOf100: 25, multiplesOfFactor: [75] } ] const sectionSetup = (qName) => { if (selector[qName] === undefined) { return { q: 'Default fraction-toPercentage- Q' } } let choice = rFuncs.randomElement(usefulDenoms); let denomThatIsFactor = choice.factorOf100, nonFactorDenom = rFuncs.randomElement(choice.multiplesOfFactor); let numerForDenomThatIsFactor = rFuncs.randomInt(denomThatIsFactor - 1) + 1 let numerForOtherDenom = numerForDenomThatIsFactor * nonFactorDenom / denomThatIsFactor // console.log({ // simple: numerForDenomThatIsFactor + '/' + denomThatIsFactor, // nonSimple: numerForOtherDenom + '/' + nonFactorDenom // }) return { qType: 'shortAnswer', ...selector[qName]({ denomThatIsFactor, nonFactorDenom, numerForDenomThatIsFactor, numerForOtherDenom }) } } module.exports = { sectionName: 'toPercentage', qGetter: sectionSetup }