feat(general): add typesafe romanize utility
This commit is contained in:
@@ -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
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user