Skip to content

Instantly share code, notes, and snippets.

@ltrainpr
Created December 5, 2013 05:20
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 ltrainpr/7800520 to your computer and use it in GitHub Desktop.
Save ltrainpr/7800520 to your computer and use it in GitHub Desktop.
Roman Numerals using and not using OOJS
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
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