diff --git a/README.md b/README.md index 2b0c7ec3..9638b0b5 100644 --- a/README.md +++ b/README.md @@ -465,3 +465,4 @@ Profile on LeetCode: [fartem](https://leetcode.com/fartem/). | 7. Reverse Integer | [Link](https://leetcode.com/problems/reverse-integer/) | [Link](./lib/medium/7_reverse_integer.rb) | | 8. String to Integer (atoi) | [Link](https://leetcode.com/problems/string-to-integer-atoi/) | [Link](./lib/medium/8_string_to_integer_atoi.rb) | | 11. Container With Most Water | [Link](https://leetcode.com/problems/container-with-most-water/) | [Link](./lib/medium/11_container_with_most_water.rb) | +| 12. Integer to Roman | [Link](https://leetcode.com/problems/integer-to-roman/) | [Link](./lib/medium/12_integer_to_roman.rb) | diff --git a/leetcode-ruby.gemspec b/leetcode-ruby.gemspec index b8c03a5f..6ee7ffaa 100644 --- a/leetcode-ruby.gemspec +++ b/leetcode-ruby.gemspec @@ -5,7 +5,7 @@ require 'English' ::Gem::Specification.new do |s| s.required_ruby_version = '>= 3.0' s.name = 'leetcode-ruby' - s.version = '5.9.9' + s.version = '6.0.0' s.license = 'MIT' s.files = ::Dir['lib/**/*.rb'] + %w[bin/leetcode-ruby README.md LICENSE] s.executable = 'leetcode-ruby' diff --git a/lib/medium/12_integer_to_roman.rb b/lib/medium/12_integer_to_roman.rb new file mode 100644 index 00000000..397aab21 --- /dev/null +++ b/lib/medium/12_integer_to_roman.rb @@ -0,0 +1,32 @@ +# frozen_string_literal: false + +# https://leetcode.com/problems/integer-to-roman/ +# @param {Integer} num +# @return {String} +def int_to_roman(num) + roman_numbers = { + 1000 => 'M', + 900 => 'CM', + 500 => 'D', + 400 => 'CD', + 100 => 'C', + 90 => 'XC', + 50 => 'L', + 40 => 'XL', + 10 => 'X', + 9 => 'IX', + 5 => 'V', + 4 => 'IV', + 1 => 'I' + } + + result = '' + roman_numbers.each do |value, symbol| + while num >= value + result << symbol + num -= value + end + end + + result +end diff --git a/test/medium/test_12_integer_to_roman.rb b/test/medium/test_12_integer_to_roman.rb new file mode 100644 index 00000000..e273c801 --- /dev/null +++ b/test/medium/test_12_integer_to_roman.rb @@ -0,0 +1,13 @@ +# frozen_string_literal: true + +require_relative '../test_helper' +require_relative '../../lib/medium/12_integer_to_roman' +require 'minitest/autorun' + +class IntegerToRomanTest < ::Minitest::Test + def test_default + assert_equal('MMMDCCXLIX', int_to_roman(3749)) + assert_equal('LVIII', int_to_roman(58)) + assert_equal('MCMXCIV', int_to_roman(1994)) + end +end