Skip to content

Instantly share code, notes, and snippets.

@Steakeye
Created October 9, 2020 00:35
Show Gist options
  • Save Steakeye/ff37adba4ee83f6fb917c1a7ab9f4772 to your computer and use it in GitHub Desktop.
Save Steakeye/ff37adba4ee83f6fb917c1a7ab9f4772 to your computer and use it in GitHub Desktop.
const Units = {
one: 'I',
five: 'V',
ten: 'X',
fifty: 'L',
hundred: 'C',
fiveHundred: 'D',
thousand: 'M',
}
function detemineBaseUnitOutput(baseUnit: string, val: number) {
return Array(val).fill(baseUnit).join('');
}
function handleUnit(baseUnit: string, midUnit: string, nextBaseUnit: string, val: number) {
let parsedVal;
if (!val) {
parsedVal = '';
} else if (val < 4) {
parsedVal = detemineBaseUnitOutput(baseUnit, val);
} else if (val === 4) {
parsedVal = baseUnit + midUnit;
} else if (val < 9) {
parsedVal = midUnit + detemineBaseUnitOutput(baseUnit, val - 5);
} else {
parsedVal = baseUnit + nextBaseUnit;
}
console.log(val, parsedVal)
return parsedVal;
}
function handleOnes(val: number) {
return handleUnit(Units.one, Units.five, Units.ten, val);
}
function handleTens(val: number) {
return handleUnit(Units.ten, Units.fifty, Units.hundred, val);
}
function handleHundreds(val: number) {
return handleUnit(Units.hundred, Units.fiveHundred, Units.thousand, val);
}
function handleThousands(val: number) {
return detemineBaseUnitOutput(Units.thousand, val);
}
const BaseTenUnitHandler = {
'1': handleOnes,
'2': handleTens,
'3': handleHundreds,
'4': handleThousands,
}
export function solution(number: number): string {
// convert the number to a roman numeral
const units = number.toString().split('');
const unitsLength = units.length;
let unitsIter = unitsLength;
let romanNumerals = [];
while (0 < unitsIter--) {
const valueToParse = units[unitsIter];
const valueParser = BaseTenUnitHandler[unitsLength - unitsIter];
romanNumerals.unshift(valueParser(parseInt(valueToParse)));
}
return romanNumerals.join('');
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment