Created
August 11, 2013 22:25
-
-
Save scottmascio2115/6207165 to your computer and use it in GitHub Desktop.
roman_refactor
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
# 1: Grab a solution to Roman Numerals | |
# | |
# Source: https://gist.github.com/leeacto/ece0c63cfda0d022b536 | |
# Author: Nick lee | |
# ------------ | |
# 2. Explain the code in plain English | |
# Given a number, translate that number into a roman numeral. | |
# You have to create a set of numbers. The assign those numbers letters. | |
#Take your original number and run it through the set of numbers. | |
#If the number divides into the number in the set put the letter coresponding to | |
# that number. If the number divides more than once into the number in the set | |
#put a letter representing how many times it divides into it. | |
# ------------ | |
# 3. Translate to pseudocode | |
# Create a hash where the key is a number and the value is the letter. | |
# Create a variable number that can be tested through each key- value pair | |
# Run the number through each key/value pair | |
# If the number divides into the key | |
#return put the letter value * how many times it divides into the key | |
#end if | |
#return a string | |
# ------------ | |
# 4. Test the code | |
def to_roman_modern(num) | |
test_arr = {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"} | |
@num = num | |
roman = "" | |
test_arr.each do |base, rom| | |
r_count = @num / base | |
roman += rom * r_count | |
@num -= r_count * base | |
end | |
return roman | |
end | |
# Drive code... this should print out trues. | |
puts to_roman_modern(1) == "I" | |
puts to_roman_modern(3) == "III" | |
puts to_roman_modern(6) == "VI" | |
# 5. Refactor | |
# | |
# Write the refactored method below. | |
# Comment out the original so that your tests are run | |
# against the refactored version. | |
def to_roman_refactor(number) | |
romans_hash = {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"} | |
#final roman string variable | |
roman = "" | |
#iterate through hash | |
romans_hash.each do |key, value| | |
romans_count = number / key | |
#push roman numerals into string | |
roman << value * romans_count | |
#decrementing number | |
number -= romans_count * key | |
end | |
roman | |
end | |
puts to_roman_refactor(1) == "I" | |
puts to_roman_refactor(3) == "III" | |
puts to_roman_refactor(6) == "VI" |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment