Files
cabrits-math/lib/math/ratios.ts
2026-03-01 18:50:29 -04:00

36 lines
987 B
TypeScript

import { gcd } from "./fractions";
export function simplifyRatio(parts: number[]): number[] {
if (parts.length === 0) return [];
let g = parts[0];
for (let i = 1; i < parts.length; i++) {
g = gcd(g, parts[i]);
}
return parts.map((p) => p / g);
}
export function divideInRatio(total: number, parts: number[]): number[] {
const sum = parts.reduce((a, b) => a + b, 0);
const onePart = total / sum;
return parts.map((p) => p * onePart);
}
export function ratioToFraction(a: number, b: number): [number, number] {
return [a, a + b];
}
export function areEquivalent(ratio1: number[], ratio2: number[]): boolean {
if (ratio1.length !== ratio2.length) return false;
const s1 = simplifyRatio(ratio1);
const s2 = simplifyRatio(ratio2);
return s1.every((v, i) => v === s2[i]);
}
export function totalParts(parts: number[]): number {
return parts.reduce((a, b) => a + b, 0);
}
export function ratioToKatex(parts: number[]): string {
return parts.join(":");
}