Skip to content

Instantly share code, notes, and snippets.

@lhoang
Created April 29, 2019 15:34
Show Gist options
  • Save lhoang/b3ea856e4135b6443115ad01fd86f823 to your computer and use it in GitHub Desktop.
Save lhoang/b3ea856e4135b6443115ad01fd86f823 to your computer and use it in GitHub Desktop.
Roman numbers in JS
const roman = (n) => {
const div = (v, d) => {
return {quotient: v / d, rest: v % d}
};
const romanMap = [
{diviser: 1000, letter: "M"},
{diviser: 900, letter: "CM"},
{diviser: 500, letter: "D"},
{diviser: 400, letter: "CD"},
{diviser: 100, letter: "C"},
{diviser: 90, letter: "XC"},
{diviser: 50, letter: "L"},
{diviser: 40, letter: "XL"},
{diviser: 10, letter: "X"},
{diviser: 9, letter: "IX"},
{diviser: 5, letter: "V"},
{diviser: 4, letter: "IV"},
{diviser: 1, letter: "I"},
];
const {tempResult: result} = romanMap.reduce(
({rest: tempRest, tempResult}, {diviser, letter}) => {
const {quotient, rest} = div(tempRest, diviser);
return {
rest,
tempResult: tempResult + letter.repeat(quotient),
}
}, {rest: n, tempResult: ''});
return result;
};
console.log(roman(4));
console.log(roman(3));
console.log(roman(9));
console.log(roman(12));
console.log(roman(69));
console.log(roman(22));
console.log(roman(16));
console.log(roman(2569));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment