Created
April 25, 2013 08:14
-
-
Save TalkativeTree/5458261 to your computer and use it in GitHub Desktop.
convert an arabic number to a roman numeral without using modulus.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#i played around a lot with ideas of how to model the arrays/hashes. I decided to make the key of the hash a string, | |
##because I wanted to use methods that only worked on strings and didn't want to keep using to_s. | |
#So I created one array that returns an array of the index of each | |
#digit in the number we want to convert and another method that returns the pattern for each method. | |
#What I was thinking was using gsub to replace the values of the pattern | |
@roman_digit_pattern = Hash["1" => 'X', | |
"2" => 'XX', | |
"3" => 'XXX', | |
"4" => 'XY', | |
"5" => 'Y', | |
"6" => 'YX', | |
"7" => 'YXX', | |
"8" => 'YXXX', | |
"9" => 'XZ'] | |
def digits_index(arabic) | |
array = [] | |
array <<arabic.to_s.each_char do |chr| | |
count += 1 | |
count | |
end | |
array | |
end | |
puts "digits_index = #{digits_index(423)}" | |
# p digits_index(423) # => [0,1,2] | |
def to_roman(arabic) | |
pattern = [] | |
@roman_digit_pattern | |
arabic.to_s.each_char do |get_pattern| | |
pattern << @roman_digit_pattern[get_pattern] | |
end | |
pattern | |
end | |
puts "roman(423) = #{to_roman(423)}" | |
def conversion_pair(arabic) | |
index = digits_index(arabic) | |
p index | |
patterns = to_roman(arabic) | |
p patterns | |
# pattern_hash = Hash.new[[index], [patterns]] | |
# pattern_hash = Hash.new do |index, pattern| | |
# index += 1 | |
# puts "index = #{index}" | |
# pattern = to_roman(arabic) | |
# puts "pattern = #{pattern}" | |
#end | |
end | |
puts conversion_pair(432) | |
# puts to_roman(423) #=> 'XX' => | |
# def to_roman(arabic) | |
# x = [ 'I', 'X', 'C', 'M'] | |
# y = [ 'V', 'L', 'D', '' ] | |
# z = [ 'X', 'C', 'M', '' ] | |
# puts x[2] | |
# array = [['I', 'V', 'X'], | |
# ['X', 'L', 'C'], | |
# ['C', 'D', 'M'],] | |
# puts array[0][0] * 1 | |
# puts array[0][0] * 2 | |
# puts array[0][0] * 3 | |
# puts array[0][0] + array[0][1] | |
# puts array[0][1] | |
# puts array[0][1] + array[0][0] * 1 | |
# puts array[0][1] + array[0][0] * 2 | |
# puts array[0][1] + array[0][0] * 3 | |
# puts array[0][1] + array[0][2] | |
# puts array[1][0] * 1 | |
# puts array[1][0] * 2 | |
# puts array[1][0] * 3 | |
# puts array[1][0] + array[1][1] | |
# puts array[1][1] | |
# puts array[1][1] + array[1][0] * 1 | |
# puts array[1][1] + array[1][0] * 2 | |
# puts array[1][1] + array[1][0] * 3 | |
# puts array[1][1] + array[1][2] | |
#digits_place = arabic.to_s.length - 1 | |
# # puts digits_place | |
# # puts arabic.to_s | |
# # puts roman_digit_pattern["1"].inspect | |
# # puts array[digits_place][roman_digit_pattern["3"]] | |
# arabic.to_s.each_char do |digit| | |
# puts roman_digit_pattern[digit].inspect | |
# end | |
# puts array.inspect | |
# digits_place -= 1 | |
# end |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment