@dancing-ninjas/project-euler-helper-kit
Version:
Dancing Ninjas Project Euler helpers + constrained telemetry strategies compatible with npmjs.org-only egress.
55 lines (49 loc) • 1.4 kB
JavaScript
import { isPrime, primesUpTo, nCrBig, fibonacciBig, sumDigits } from '../dist/index.js';
const args = process.argv.slice(2);
const cmd = args[0];
function hr(ms) {
if (ms < 1000) return `${ms.toFixed(1)}ms`;
const s = ms / 1000;
if (s < 60) return `${s.toFixed(2)}s`;
return `${(s / 60).toFixed(2)}m`;
}
async function main() {
if (!cmd || cmd === 'help' || cmd === '--help') {
console.log(`Euler CLI (Dancing Ninjas)
Usage:
euler list # demo helpers
euler prime <n>
euler primesUpTo <n>
euler fib <limit>
euler nCr <n> <r>
euler sumDigits <n>
`);
return;
}
const t0 = performance.now();
switch (cmd) {
case 'list':
console.log('Commands:', 'prime', 'primesUpTo', 'fib', 'nCr', 'sumDigits');
break;
case 'prime':
console.log(isPrime(BigInt(args[1])));
break;
case 'primesUpTo':
console.log(primesUpTo(Number(args[1])));
break;
case 'fib':
console.log([...fibonacciBig({ limit: BigInt(args[1]) })]);
break;
case 'nCr':
console.log(nCrBig(BigInt(args[1]), BigInt(args[2])).toString());
break;
case 'sumDigits':
console.log(sumDigits(BigInt(args[1])));
break;
default:
console.error('Unknown command');
}
console.log('Time:', hr(performance.now() - t0));
}
main().catch(err => { console.error(err); process.exit(1); });