Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- object RomanNumbers {
- def mapping():Array[Array[Int,String]] = {
- val a = Array.ofDim[String, Int](11, 2)
- a(1000)("C"), // would be great to have a 'tupple' here
- a(900)("CM"),
- a(500)("L"),
- a(400)("CL"),
- a(100)("C"),
- a(90)("XC"),
- a(40)("XD"),
- a(10)("X"),
- a(9)("IX"),
- a(4)("IV"),
- a(1)("I")
- }
- def convert(n:Int):String = {
- def go(n:Int, m:Array[(a:Int, r:String)])
- if (n == 0)
- ""
- else if (n > left(first(a)))
- right(first(a)) + go(n-left(first(a)), r)
- else if (n == left(first(a)))
- right(first(a)) + go(n-left(first(a)), tail(r))
- else if (n < left(first(a)))
- go(n, tail(r))
- go(n, mapping())
- }
- }
- // 1923
- // 1000 found - 'M' added
- // go(1923 - 1000, (full mapping))
- // 1000 not found
- // go(923, (mapping starting from 900))
- // 900 found - 'CM' added - current 'return' value 'MCM'
- // go(923 - 900, (mapping starting from 900))
- // 900 not found
- // go(23, (mapping starting from 500))
- // 500 not found
- // go(23, (mapping starting from 400))
- // 400 not found
- // go(23, (mapping starting from 100))
- // 100 not found
- // go(23, (mapping starting from 90))
- // 90 not found
- // go(23, (mapping starting from 50))
- // 50 not found
- // go(23, (mapping starting from 40))
- // 40 not found
- // go(23, (mapping starting from 10))
- // 10 found - 'X' added - current 'return' value 'MCMX'
- // go(23 - 10, (mapping starting from 10))
- // 10 found - 'X' added - current 'return' value 'MCMXX'
- // go(13 - 10, (mapping starting from 10))
- // 10 not found
- // go(3, (mapping starting from 9))
- // 9 not found
- // go(3, (mapping starting from 5))
- // 5 not found
- // go(3, (mapping starting from 4))
- // 4 not found
- // go(3, (mapping starting from 1))
- // 1 found - 'I' added - current 'return' value 'MCMXXI'
- // go(3-1, (mapping starting from 1))
- // 1 found - 'I' added - current 'return' value 'MCMXXII'
- // go(2-1, (mapping starting from 1))
- // 1 found - 'I' added - current 'return' value 'MCMXXIII'
- // go(1-1, (mapping starting from 1))
- // n == 0 - end!
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement