Created
October 9, 2020 00:35
-
-
Save Steakeye/ff37adba4ee83f6fb917c1a7ab9f4772 to your computer and use it in GitHub Desktop.
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 characters
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