I am working on the coding kata Roman Numerals defined here. While I have finished it and am not stuck I do have a question that I need help answering.
Here is where my question sits:
class Fixnum
NUMERALS = [
['V', 5], ['IV', 4], ['I', 1]
]
def to_roman
roman = ""
number = self
for key, value in NUMERALS
count, number = number.divmod(value)
roman << (key * count)
end
roman
end
end
When I execute divmod on say the number 5, like so
5.to_roman
It returns V. And that makes sense because
5.divmod(5) => 1, 0
But how does this code above not do the same with
5.divmod(1) => 5, 0
So how is it returning V and not IIIII, since it’s just appending the key (I) times count (5). Somehow it’s obviously correctly returning V instead of IIIII but i’m not sure where that logic is. Any help would be greatly appreciated. Thanks
Your code never executes
5.divmod(1). The first time it executes the loop,keyis ‘V’ andvalueis 5. It then executes5.divmod(5)and afterwards,number == 0. So in the next iteration of the loop, whenkeyis ‘IV’ andvalueis 4, it executes0.divmod(4), resulting incount == 0and nothing being added to the string.But this code is weird, because
9.to_romanreturns ‘VIV’.