diff --git a/assignments/assignment08.rb b/assignments/assignment08.rb index 3d46269..7207601 100644 --- a/assignments/assignment08.rb +++ b/assignments/assignment08.rb @@ -8,51 +8,50 @@ # implement conversion between integers and roman numerals # validate using MiniTest unit tests + +require 'minitest/autorun' +require 'active_support/all' + + module Assignment08 class RomanNumeral + def i_to_r + { + 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" + } + end + def initialize(i) # your implementation here + @number = i end def to_s # your implementation here - end - - def to_i - # your implementation here - end - - # bonus: create from Roman Numeral - def self.from_string - # your implementation here - # returns a new instance + s = "" + i_to_r.keys.each do |r| + times = @number / r + remainder = @number % r + s << i_to_r[r] * times + @number = remainder + end + s end end end -# expected results: -RomanNumeral.new(1).to_s # => 'I' -RomanNumeral.new(2).to_s # => 'II' -RomanNumeral.new(3).to_s # => 'III' -RomanNumeral.new(4).to_s # => 'IV' -RomanNumeral.new(5).to_s # => 'V' -RomanNumeral.new(6).to_s # => 'VI' -RomanNumeral.new(9).to_s # => 'IX' -RomanNumeral.new(10).to_s # => 'X' -RomanNumeral.new(19).to_s # => 'XIX' -RomanNumeral.new(32).to_s # => 'XXXII' -RomanNumeral.new(51).to_s # => 'LI' - -# bonus: -RomanNumeral.from_string('III').to_i # => 3 -RomanNumeral.from_string('IX').to_i # => 9 -RomanNumeral.from_string('IX').to_i # => 9 - -# given any arbitrary integer n: -n == RomanNumeral.from_string(RomanNumeral.new(n).to_s).to_i - - - # ======================================================================================== # Problem 2: Golden Ratio @@ -61,12 +60,42 @@ def self.from_string # validate using MiniTest unit tests module Assignment08 + def golden_ratio(precision) # your implementation here + gr = 12586269025.0/7778742049.0 + gr.round(precision) end end -# expected results: -golden_ratio(2) # => 1.62 -golden_ratio(5) # => 1.61803 -golden_ratio(8) # => 1.61803399 + + +class TestMyClass < Minitest::Test + include Assignment08 + + def test_roman_numeral + + assert_equal 'I', RomanNumeral.new(1).to_s # => 'I' + assert_equal 'II', RomanNumeral.new(2).to_s # => 'II' + assert_equal 'III', RomanNumeral.new(3).to_s # => 'III' + assert_equal 'IV', RomanNumeral.new(4).to_s # => 'IV' + assert_equal 'V', RomanNumeral.new(5).to_s # => 'V' + assert_equal 'VI', RomanNumeral.new(6).to_s # => 'VI' + assert_equal 'IX', RomanNumeral.new(9).to_s # => 'IX' + assert_equal 'X', RomanNumeral.new(10).to_s # => 'X' + assert_equal 'XIX', RomanNumeral.new(19).to_s # => 'XIX' + assert_equal 'XXXII', RomanNumeral.new(32).to_s # => 'XXXII' + assert_equal 'LI', RomanNumeral.new(51).to_s # => 'LI' + + end + + def test_golden_ratio + + assert_equal 1.62, golden_ratio(2) # => 1.62 + assert_equal 1.61803, golden_ratio(5) # => 1.61803 + assert_equal 1.61803399, golden_ratio(8) # => 1.61803399 + + end + +end +