Skip to content

Instantly share code, notes, and snippets.

@ltrainpr
Created December 5, 2013 05:20
Show Gist options
  • Select an option

  • Save ltrainpr/7800520 to your computer and use it in GitHub Desktop.

Select an option

Save ltrainpr/7800520 to your computer and use it in GitHub Desktop.

Revisions

  1. ltrainpr created this gist Dec 5, 2013.
    14 changes: 14 additions & 0 deletions roman_numerals.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,14 @@
    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
    65 changes: 65 additions & 0 deletions roman_numerals_oo.js
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,65 @@
    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));