Created
January 22, 2020 16:55
-
-
Save ngsctt/ea419c8ae4b35c4bd8e389a39b9709bc to your computer and use it in GitHub Desktop.
Revisions
-
ngsctt created this gist
Jan 22, 2020 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,45 @@ function romanise (number, upper=true) { if (number > 1999999) { console.warn('WARN: attempted to convert number over 1,999,999 to roman numeral'); return number; } const letters = upper ? [ ['X', 'V', 'I'], ['C', 'L', 'X'], ['M', 'D', 'C'], ['X̅', 'V̅', 'M'], ['C̅', 'L̅', 'X̅'], ['M̅', 'D̅', 'C̅'] ] : [ ['x', 'v', 'i'], ['c', 'l', 'x'], ['m', 'd', 'c'], ['x̅', 'v̅', 'm'], ['c̅', 'l̅', 'x̅'], ['m̅', 'd̅', 'c̅'] ]; function toText (n, X, V, I) { let out = ''; let r = n % 10; if (n > 0 && r === 0) out = X; else if (r <= 3) for (i=0; i<r; i++) out += I; else if (r < 5) out += I + V; else if (r <= 8) { out = V; for (i=0; i<(r-5); i++) out += I; } else { for (i=0; i<(10-r); i++) out += I; out += X; } return out; } function recurse (q, depth) { let out = ''; let remainder = q % 10; let quotient = (q - remainder) / 10; out += toText(remainder, ...letters[depth]); if (quotient > 0) out = recurse(quotient, depth + 1) + out; return out; } return recurse(number,0); }