Created
December 5, 2013 05:20
-
-
Save ltrainpr/7800520 to your computer and use it in GitHub Desktop.
Roman Numerals using and not using OOJS
This file contains 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
function toRoman(n) { | |
var r = '', | |
decimals = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1], | |
roman = ['M', 'CM', 'D', 'CD', 'C', 'XC', 'L', 'XL', 'X', 'IX', 'V', 'IV', 'I']; | |
for (var i = 0; i < decimals.length; i++) { | |
while (n >= decimals[i]) { | |
r += roman[i]; | |
n -= decimals[i]; | |
} | |
} | |
return r; | |
} | |
// This is a much more elegant solution that another person posted on Stack Exchange-Code Review |
This file contains 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
var romanArray = []; | |
var toRoman = { | |
analyze: function(number){ | |
romanArray = []; | |
if (number >= 1000) { | |
return this.thousands(number); | |
}else if (number >= 100){ | |
return this.hundreds(number); | |
}else if (number >= 10) { | |
return this.tens(number); | |
}else{ | |
return this.last_number(number); | |
} | |
}, | |
base_function: function (number, four, nine, five, one){ | |
if (number === 4){ | |
romanArray.push(four); | |
}else if(number === 9){ | |
romanArray.push(nine); | |
}else if(number >= 5 && number < 9){ | |
romanArray.push(five); | |
var remainder = number % 5; | |
for(var i = 0; i < remainder; i++) { | |
romanArray.push(one); | |
} | |
}else if (number > 0 && number < 4){ | |
for(var e = 0; e < number; e++) { | |
romanArray.push(one); | |
} | |
}else{ | |
} | |
return romanArray; | |
}, | |
thousands: function(number){ | |
var remainder = number % 1000; | |
var thousands = Math.floor(number / 1000); | |
for(var e = 0; e < thousands; e++) { | |
romanArray.push('M'); | |
} | |
return this.hundreds(remainder); | |
}, | |
hundreds: function(number) { | |
this.base_function(Math.floor(number / 100), 'CD', 'CM', 'D', 'C'); | |
return this.tens(number % 100); | |
}, | |
tens: function(number){ | |
this.base_function(Math.floor(number/10), 'XL', 'XC', 'L', 'X'); | |
return this.last_number(number % 10); | |
}, | |
last_number: function (number){ | |
this.base_function(number, 'IV', 'IX', 'V', 'I'); | |
return romanArray.join(''); | |
} | |
}; | |
console.log(toRoman.analyze(8)); | |
console.log(toRoman.analyze(299)); | |
console.log(toRoman.analyze(2361)); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment