Advertisement
Guest User

Untitled

a guest
Mar 28th, 2017
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.44 KB | None | 0 0
  1. def convert_roman_number(number)
  2. array = number.to_s.split('')
  3.  
  4. ones_place = array[-1].to_i
  5. array[-1] = case ones_place
  6. when (1..8)
  7. repeat_numbers(ones_place, "I", "V")
  8. when (9)
  9. "IX"
  10. end
  11.  
  12. if number >= 10
  13. tens_place = array[-2].to_i
  14. array[-2] = case tens_place
  15. when (1..8)
  16. repeat_numbers(tens_place, "X", "L")
  17. when (9)
  18. "XC"
  19. end
  20. end
  21.  
  22. if number >= 100
  23. hundreds_place = array[-3].to_i
  24. array[-3] = case hundreds_place
  25. when (1..8)
  26. repeat_numbers(hundreds_place, "C", "D")
  27. when (9)
  28. "CM"
  29. end
  30. end
  31.  
  32. if number >= 1000
  33. thousands_place = array[-4].to_i
  34. array[-4] = case thousands_place
  35. when (1..8)
  36. "M" * thousands_place
  37. end
  38. end
  39.  
  40. array.join
  41. end
  42.  
  43. def repeat_numbers(number, add, base = "")
  44. case number
  45. when (1..3)
  46. (add * number)
  47. when (4)
  48. add + base
  49. when (5)
  50. base
  51. when (6..8)
  52. base + (add * (number - 5))
  53. end
  54. end
  55.  
  56.  
  57.  
  58. ----------
  59. describe "Number Conversion" do
  60. samples = {
  61. 1 => "I",
  62. 2 => "II",
  63. 3 => "III",
  64. 4 => "IV",
  65. 5 => "V",
  66. 10 => "X",
  67. 14 => "XIV",
  68. 30 => "XXX",
  69. 42 => "XLII",
  70. 60 => "LX",
  71. 85 => "LXXXV",
  72. 200 => "CC",
  73. 402 => "CDII",
  74. 211 => "CCXI",
  75. 3200 => "MMMCC",
  76. }
  77. samples.each do |arabic_number, roman_numeral|
  78. it "converts #{arabic_number} to #{roman_numeral}" do
  79. Test.assert_equals(convert_roman_number(arabic_number), roman_numeral)
  80. end
  81. end
  82. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement