math-q-factory
Version:
node module that return maths questions
48 lines (44 loc) • 1.36 kB
JavaScript
const joinList = (arr) => {
if (arr.length <= 2) { return arr.join(' and ') }
return arr[0] + ', ' + joinList(arr.slice(1))
}
const cFracFormat = (arr) => arr.length <= 1 ? `[${arr[0]}]` : `[${arr[0]}; ${arr.slice(1).join(', ')}]`
const stndrdth = (n) => {
switch (n % 10) {
case 1: { return 'st' }
case 2: { return 'nd' }
case 3: { return 'rd' }
default: { return 'th' }
}
}
/**
*
* @param {[Number]} c
* @param {[String]} v
* @returns an expression combining the co-efficients and variables provided
*/
const makeExpression = (c, v) => {
const l = Math.min(c.length, v.length);
if (l === 0) { return null }
let exp = '';
for (let i = 0; i < l; i++) {
if (c[i] !== 0) {
exp += c[i] < 0 ? '-' : exp.length > 0 ? '+' : '';
let val = Math.abs(c[i]);
exp += val === 1 && v[i] !== '' ? '' : val;
exp += v[i];
}
}
return exp === '' ? '0' : exp;
}
/**
*
* @param {[String]} s
* @returns the input wrapped in backticks, so MathJax can typeset AsciiMaths notation
* Works even in template literal as: `Simplify ${wrapMJax('x^2 xx x^3')}`
*/
const wrapMJax = s => '`' + s + '`'
module.exports = {
cFracFormat, joinList, stndrdth,
makeExpression, wrapMJax
}