Skip to content

Instantly share code, notes, and snippets.

@Dajust
Created November 26, 2015 12:48
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Dajust/65cac387de855a8090f6 to your computer and use it in GitHub Desktop.
Save Dajust/65cac387de855a8090f6 to your computer and use it in GitHub Desktop.
http://www.freecodecamp.com/dajust 's solution for Bonfire: Roman Numeral Converter
// Bonfire: Roman Numeral Converter
// Author: @dajust
// Challenge: http://www.freecodecamp.com/challenges/bonfire-roman-numeral-converter?solution=var%20romanNumeralMap%20%3D%20%7B%0A%20%200%20%20%20%20%3A%20%27%27%2C%20%0A%20%201%20%20%20%20%3A%20%27I%27%2C%20%0A%20%202%20%20%20%20%3A%20%27II%27%2C%20%0A%20%203%20%20%20%20%3A%20%27III%27%2C%20%0A%20%204%20%20%20%20%3A%20%27IV%27%2C%20%0A%20%205%20%20%20%20%3A%20%27V%27%2C%0A%20%206%20%20%20%20%3A%20%27VI%27%2C%0A%20%207%20%20%20%20%3A%20%27VII%27%2C%0A%20%208%20%20%20%20%3A%20%27VIII%27%2C%0A%20%209%20%20%20%20%3A%20%27IX%27%2C%0A%20%2010%20%20%20%3A%20%27X%27%2C%0A%20%2020%20%20%20%3A%20%27XX%27%2C%0A%20%2030%20%20%20%3A%20%27XXX%27%2C%0A%20%2040%20%20%20%3A%20%27XL%27%2C%0A%20%2050%20%20%20%3A%20%27L%27%2C%0A%20%2060%20%20%20%3A%20%27LX%27%2C%0A%20%2070%20%20%20%3A%20%27LXX%27%2C%0A%20%2080%20%20%20%3A%20%27LXXX%27%2C%0A%20%2090%20%20%20%3A%20%27XC%27%2C%0A%20%20100%20%20%3A%20%27C%27%2C%0A%20%20200%20%20%3A%20%27CC%27%2C%0A%20%20300%20%20%3A%20%27CCC%27%2C%0A%20%20400%20%20%3A%20%27CD%27%2C%0A%20%20500%20%20%3A%20%27D%27%2C%0A%20%20600%20%20%3A%20%27DC%27%2C%0A%20%20700%20%20%3A%20%27DCC%27%2C%0A%20%20800%20%20%3A%20%27DCCC%27%2C%0A%20%20900%20%20%3A%20%27CM%27%2C%0A%20%201000%20%3A%20%27M%27%2C%0A%20%202000%20%3A%20%27MM%27%2C%0A%20%203000%20%3A%20%27MMM%27%0A%7D%3B%0A%0A%2F%2Fbreak%20down%20number%20to%20roman%20numeral%20formart%0A%2F%2F1981%20%3D%201000%20900%2080%201%0A%2F%2Ffrom%20right%20to%20left%2C%20multiply%20number%20by%20its%20unit%20value%0Afunction%20breakDownNums%20(num)%20%7B%0A%20%20var%20numsArr%20%3D%20(%27%27%20%2B%20num).split(%27%27)%2C%0A%20%20%20%20%20%20unit%20%3D%201%2C%0A%20%20%20%20%20%20i%20%3D%20numsArr.length%20-%201%0A%20%20%3B%0A%20%20%0A%20%20for(i%3B%20i%20%3E%3D%200%3B%20i-%3D1)%20%7B%0A%20%20%20%20numsArr.splice(i%2C%201%2C%20(%2BnumsArr%5Bi%5D%20*%20unit))%3B%0A%20%20%20%20unit%20*%3D%2010%3B%0A%20%20%7D%0A%0A%20%20return%20numsArr%3B%0A%7D%0A%0Afunction%20convert(num)%20%7B%0A%20%20numsArr%20%3D%20breakDownNums(num)%3B%0A%20%20%0A%20%20return%20numsArr.map(function%20(val)%20%7B%0A%20%20%20%20%20%20return%20romanNumeralMap%5Bval%5D%3B%0A%20%20%7D)%0A%20%20.join(%27%27)%3B%0A%7D%0A%0Aconvert(36)%3B%0A
// Learn to Code at Free Code Camp (www.freecodecamp.com)
var romanNumeralMap = {
0 : '',
1 : 'I',
2 : 'II',
3 : 'III',
4 : 'IV',
5 : 'V',
6 : 'VI',
7 : 'VII',
8 : 'VIII',
9 : 'IX',
10 : 'X',
20 : 'XX',
30 : 'XXX',
40 : 'XL',
50 : 'L',
60 : 'LX',
70 : 'LXX',
80 : 'LXXX',
90 : 'XC',
100 : 'C',
200 : 'CC',
300 : 'CCC',
400 : 'CD',
500 : 'D',
600 : 'DC',
700 : 'DCC',
800 : 'DCCC',
900 : 'CM',
1000 : 'M',
2000 : 'MM',
3000 : 'MMM'
};
//break down number to roman numeral formart
//1981 = 1000 900 80 1
//from right to left, multiply number by its unit value
function breakDownNums (num) {
var numsArr = ('' + num).split(''),
unit = 1,
i = numsArr.length - 1
;
for(i; i >= 0; i-=1) {
numsArr.splice(i, 1, (+numsArr[i] * unit));
unit *= 10;
}
return numsArr;
}
function convert(num) {
numsArr = breakDownNums(num);
return numsArr.map(function (val) {
return romanNumeralMap[val];
})
.join('');
}
convert(36);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment