There’s a Scala User Group in Gothenburg that had several meetings during this summer. In one of the meetings the group solved a Kata named KataRomanNumerals (A Kata is a small problem that you do over and over again to learn)
The KataRomanNumerals says you should write a function to convert from normal numbers to Roman Numerals: e.g.
1 –> I
10 –> X
7 –> VII
Unfortunately I could not attend at this meeting, so I had to do it on my own during a few summer nights when my family finally was asleep :-).
Here’s my solution:
object Program extends Application {
class RomanInt(number: Int) {
def toRomanString() = {
val ones = List(“”, “I”, “II”, “III”, “IV”, “V”, “VI”, “VII”, “VIII”, “IX”);
val tens = List(“”, “X”, “XX”, “XXX”, “XL”, “L”, “LX”, “LXX”, “LXXX”, “XC”);
val hundreds = List(“”, “C”, “CC”, “CCC”, “CD”, “D”, “DC”, “DCC”, “DCCC”, “CM”);
val thousands = List(“”, “M”, “MM”, “MMM”);
thousands(part(1000)) + hundreds(part(100)) + tens(part(10)) + ones(part(1))
}
def part(digit: Int) = {
number % (digit * 10) / digit
}
}
implicit def Int2RomanInt(number: Int) = new RomanInt(number)
println(154.toRomanString()) // prints ‘CLVIII’
}
Here’s the code with better formatting.
Please comment and correct if I didn’t write idomatic Scala or if you have suggestions for improvements.
/Hans