UNPKG

math-q-factory

Version:

node module that return maths questions

71 lines (66 loc) 2.88 kB
const rFuncs = require('../../nonQ/randFuncs'); const convRates = { 'mm2cm': 1, 'mm2m': 3, 'mm2km': 6, 'cm2m': 2, 'cm2km': 5, 'm2km': 3, 'mg2g': 3, 'g2kg': 3, 'mL2cL': 1, 'mL2L': 3, 'cL2L': 2 } const tags = { 'mm&cm': 'howManyMMinCM-35', 'cm&m': 'howManyCMinM-40', 'mm&m': 'howManyMMinM-95', 'm&km': 'howManyMinKM-40', 'cm&km': 'howManyCMinKM-105', 'mm&km': 'howManyMMinKM-110', 'g&kg': 'howManyGinKG-40', 'mg&kg': 'howManyMGinKG-130', 'mg&g': 'howManyMGinG-105', 'mL&L': 'howManyMLinL-45', 'cL&L': 'howManyCLinL-80', 'mL&cL': 'howManyMLinCL-85' } const sectionSetup = (qName) => { if (qName === 'rndLow') { qName = rFuncs.randomElement([ 'mm2cm#', 'mm2cm#REV', 'mm2cm#DEC', 'mm2cm#DECREV', 'cm2m#', 'cm2m#REV', 'cm2m#DEC', 'cm2m#DECREV', 'm2km#', 'm2km#REV', 'm2km#DEC', 'm2km#DECREV', 'g2kg#', 'g2kg#REV', 'g2kg#DEC', 'g2kg#DECREV', 'mL2L#', 'mL2L#REV', 'mL2L#DEC', 'mL2L#DECREV', ]) } if (qName === 'rndHigh') { qName = rFuncs.randomElement([ 'mm2m#', 'mm2m#REV', 'mm2m#DEC', 'mm2m#DECREV', 'mm2km#', 'mm2km#REV', 'mm2km#DEC', 'mm2km#DECREV', 'cm2km#', 'cm2km#REV', 'cm2km#DEC', 'cm2km#DECREV', 'mg2g#', 'mg2g#REV', 'mg2g#DEC', 'mg2g#DECREV', 'mL2cL#', 'mL2cL#REV', 'mL2cL#DEC', 'mL2cL#DECREV', 'cL2L#', 'cL2L#REV', 'cL2L#DEC', 'cL2L#DECREV' ]) } let convPair = qName.split('#')[0]; if (convRates[convPair] === undefined) { return { q: 'Default chapter-section- Q' } } let [smallUnit, largeUnit] = convPair.split('2'); let convRate = convRates[convPair]; let smallVal = rFuncs.randomInt(30) + 2; let numDecimals = Math.min(3, rFuncs.randomInt(convRate) + 1); let decimal = rFuncs.randomInt(10 ** numDecimals - 1) + 1; let useDecimal = qName.includes('DEC'); let smallValString = smallVal + (useDecimal ? '.' + decimal : ''); let largeValString = smallValString + 'e' + convRate; let largeVal = Number(largeValString); let reversed = qName.includes('REV'); let values = [largeVal + smallUnit, smallValString + largeUnit] let [forQ, forAns] = reversed ? [1, 0] : [0, 1] return { qType: 'shortAnswer', q: `Convert ${values[forQ]} into ${reversed ? smallUnit : largeUnit}`, a: values[forAns], hints: [ `How many ${smallUnit} are there in a ${largeUnit}?`, `There are ${10 ** convRate}${smallUnit}'s in a ${largeUnit}` ], qFeedback: `${values[forQ]} = ${values[forAns]} `, buildingBlocks: [`conversion-metricMCQ-${tags[[smallUnit, largeUnit].join('&')]}`] } } module.exports = { sectionName: 'metric', qGetter: sectionSetup }