Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def convert_roman_number(number)
- array = number.to_s.split('')
- ones_place = array[-1].to_i
- array[-1] = case ones_place
- when (1..8)
- repeat_numbers(ones_place, "I", "V")
- when (9)
- "IX"
- end
- if number >= 10
- tens_place = array[-2].to_i
- array[-2] = case tens_place
- when (1..8)
- repeat_numbers(tens_place, "X", "L")
- when (9)
- "XC"
- end
- end
- if number >= 100
- hundreds_place = array[-3].to_i
- array[-3] = case hundreds_place
- when (1..8)
- repeat_numbers(hundreds_place, "C", "D")
- when (9)
- "CM"
- end
- end
- if number >= 1000
- thousands_place = array[-4].to_i
- array[-4] = case thousands_place
- when (1..8)
- "M" * thousands_place
- end
- end
- array.join
- end
- def repeat_numbers(number, add, base = "")
- case number
- when (1..3)
- (add * number)
- when (4)
- add + base
- when (5)
- base
- when (6..8)
- base + (add * (number - 5))
- end
- end
- ----------
- describe "Number Conversion" do
- samples = {
- 1 => "I",
- 2 => "II",
- 3 => "III",
- 4 => "IV",
- 5 => "V",
- 10 => "X",
- 14 => "XIV",
- 30 => "XXX",
- 42 => "XLII",
- 60 => "LX",
- 85 => "LXXXV",
- 200 => "CC",
- 402 => "CDII",
- 211 => "CCXI",
- 3200 => "MMMCC",
- }
- samples.each do |arabic_number, roman_numeral|
- it "converts #{arabic_number} to #{roman_numeral}" do
- Test.assert_equals(convert_roman_number(arabic_number), roman_numeral)
- end
- end
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement