diff --git a/problems/12-integer-to-roman/main.rb b/problems/12-integer-to-roman/main.rb new file mode 100644 index 0000000..9b0034b --- /dev/null +++ b/problems/12-integer-to-roman/main.rb @@ -0,0 +1,32 @@ +# @param {Integer} num +# @return {String} +def int_to_roman(num) + res = '' + + if num >= 1000 + res += 'M' * (num / 1000) + num %= 1000 + end + + if num >= 100 + res += to_roman(num / 100, 'C', 'D', 'M') + num %= 100 + end + + if num >= 10 + res += to_roman(num / 10, 'X', 'L', 'C') + num %= 10 + end + + res + to_roman(num, 'I', 'V', 'X') +end + +def to_roman(num, one, five, ten) + return one * num if num <= 3 + + return one + five if num == 4 + + return five + one * (num - 5) if num <= 8 + + one + ten +end diff --git a/problems/12-integer-to-roman/test.rb b/problems/12-integer-to-roman/test.rb new file mode 100644 index 0000000..903cf50 --- /dev/null +++ b/problems/12-integer-to-roman/test.rb @@ -0,0 +1,24 @@ +require_relative 'main' +require 'test/unit' + +class TestIntegerToRoman < Test::Unit::TestCase + def test_simple_integer + assert_equal('III', int_to_roman(3)) + end + + def test_complex_integer + assert_equal('LVIII', int_to_roman(58)) + end + + def test_substaction + assert_equal('MCMXCIV', int_to_roman(1994)) + end + + def test_smallest_number + assert_equal('I', int_to_roman(1)) + end + + def test_largest_number + assert_equal('MMMCMXCIX', int_to_roman(3999)) + end +end