mirror of
https://github.com/voltrevo/ValueScript.git
synced 2026-01-14 07:57:57 -05:00
67 lines
1.3 KiB
TypeScript
67 lines
1.3 KiB
TypeScript
// test_output! 232792560
|
|
|
|
import { factorize } from "./helpers/primes.ts";
|
|
|
|
declare const Debug: {
|
|
log: (...args: unknown[]) => undefined;
|
|
};
|
|
|
|
export default function main() {
|
|
let n: number[] = [];
|
|
|
|
for (let i = 2; i <= 20; i++) {
|
|
n = lcm(n, factorize(i));
|
|
}
|
|
|
|
return n.reduce((a, b) => a * b);
|
|
}
|
|
|
|
function lcm(leftFactors: number[], rightFactors: number[]): number[] {
|
|
let factors: number[] = [];
|
|
|
|
while (true) {
|
|
while (leftFactors[0] < rightFactors[0]) {
|
|
factors.push(leftFactors.shift()!);
|
|
}
|
|
|
|
while (rightFactors[0] < leftFactors[0]) {
|
|
factors.push(rightFactors.shift()!);
|
|
}
|
|
|
|
if (leftFactors[0] === undefined) {
|
|
factors = factors.concat(rightFactors);
|
|
return factors;
|
|
}
|
|
|
|
if (rightFactors[0] === undefined) {
|
|
factors = factors.concat(leftFactors);
|
|
Debug.log({ factors });
|
|
return factors;
|
|
}
|
|
|
|
let f = leftFactors[0];
|
|
|
|
let lPower = 1;
|
|
let rPower = 1;
|
|
|
|
leftFactors.shift();
|
|
rightFactors.shift();
|
|
|
|
while (leftFactors[0] === f) {
|
|
leftFactors.shift();
|
|
lPower++;
|
|
}
|
|
|
|
while (rightFactors[0] === f) {
|
|
rightFactors.shift();
|
|
rPower++;
|
|
}
|
|
|
|
const maxPower = Math.max(lPower, rPower);
|
|
|
|
for (let i = 0; i < maxPower; i++) {
|
|
factors.push(f);
|
|
}
|
|
}
|
|
}
|