From 3c0d577aa6cc7033fa4a78fe05b37cc69c6ad3d6 Mon Sep 17 00:00:00 2001 From: Taken Date: Mon, 1 Sep 2025 14:34:20 +0200 Subject: [PATCH] feat(general): add typesafe romanize utility --- src/lib/hypixel/general.ts | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/lib/hypixel/general.ts b/src/lib/hypixel/general.ts index 2eae5b0..b4d0baf 100644 --- a/src/lib/hypixel/general.ts +++ b/src/lib/hypixel/general.ts @@ -32,3 +32,22 @@ export function concatStatsArray>(keys: (keyof } 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 +}