feat(general): add typesafe romanize utility

This commit is contained in:
2025-09-01 14:34:20 +02:00
parent 658f664366
commit 3c0d577aa6

View File

@@ -32,3 +32,22 @@ export function concatStatsArray<T extends Record<string, number>>(keys: (keyof
} }
return base as T return base as T
} }
export function romanize(num: number): string {
if (!Number.isFinite(num)) return "NaN"
const digits = Math.trunc(num).toString().split("")
const key = [
"","C","CC","CCC","CD","D","DC","DCC","DCCC","CM",
"","X","XX","XXX","XL","L","LX","LXX","LXXX","XC",
"","I","II","III","IV","V","VI","VII","VIII","IX"
] as const
let roman = ""
let i = 3
while (i--) {
const idx = Number(digits.pop()) + i * 10
roman = (key[idx] || "") + roman
}
const thousands = Number(digits.join(""))
return "M".repeat(thousands) + roman
}