From 426c0a18990c7a91b4f7c6ac1b95ab89c39a0365 Mon Sep 17 00:00:00 2001 From: clr Date: Wed, 19 Aug 2009 20:12:16 -0400 Subject: [PATCH] -- added Peter and Topher's solution -- --- 002/original_spec/example_entry.rb | 49 ++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/002/original_spec/example_entry.rb b/002/original_spec/example_entry.rb index 51a98e7..4c4d252 100644 --- a/002/original_spec/example_entry.rb +++ b/002/original_spec/example_entry.rb @@ -1,14 +1,59 @@ class RomanNumeral def initialize( numeral_string ) + @roman_string = numeral_string end def +( numeral_string ) - "MMX" + self.to_I + numeral_string.to_I end def -( numeral_string ) - "MCMXCVI" + self.to_I - numeral_string.to_I + end + + def to_I + @roman_string.to_a.each do |letter| + if @roman_string.shorthand? + @longhand - Array( RomanNumeral.scratch_counts( letter ), "I" ) + else + @longhand + Array( RomanNumeral.scratch_counts( letter ), "I" ) + end + @roman_string = [ 1..( @roman_string.length - 1 ) ] + end + end + + def shorthand? + @roman_string[ 1..( @roman_string.length - 1 ) ].detect{ |letter| RomanNumeral.letters.index( @roman_string[0] ) + end + + def self.scratch_counts( letter ) + case letter + when 'I': + 1 + when 'V': + 5 + when 'X': + 10 + when 'L': + 50 + when 'C': + 100 + when 'D': + 500 + when 'M': + 1000 + else + raise "ERROR!! Wtf is that -- Greek?" + end + end + + def self.letters + "MDCLXVI" + end + + def self.has_shorthand?( letters ) + end end