Advertisement
Guest User

RomanNumbers Scala Recursive from hash

a guest
Feb 18th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scala 2.06 KB | None | 0 0
  1.  
  2. object RomanNumbers {
  3.  
  4.   def mapping():Array[Array[Int,String]] = {
  5.     val a = Array.ofDim[String, Int](11, 2)
  6.     a(1000)("C"), // would be great to have a 'tupple' here
  7.     a(900)("CM"),
  8.     a(500)("L"),
  9.     a(400)("CL"),
  10.     a(100)("C"),
  11.     a(90)("XC"),
  12.     a(40)("XD"),
  13.     a(10)("X"),
  14.     a(9)("IX"),
  15.     a(4)("IV"),
  16.     a(1)("I")
  17.   }
  18.  
  19.   def convert(n:Int):String = {
  20.     def go(n:Int, m:Array[(a:Int, r:String)])
  21.       if (n == 0)
  22.         ""
  23.       else if (n > left(first(a)))
  24.         right(first(a)) + go(n-left(first(a)), r)
  25.       else if (n == left(first(a)))
  26.         right(first(a)) + go(n-left(first(a)), tail(r))
  27.       else if (n < left(first(a)))
  28.         go(n, tail(r))
  29.  
  30.     go(n, mapping())
  31.   }
  32. }
  33.  
  34. // 1923
  35. // 1000 found - 'M' added
  36. // go(1923 - 1000, (full mapping))
  37. // 1000 not found
  38. // go(923, (mapping starting from 900))
  39. // 900 found - 'CM' added - current 'return' value 'MCM'
  40. // go(923 - 900, (mapping starting from 900))
  41. // 900 not found
  42. // go(23, (mapping starting from 500))
  43. // 500 not found
  44. // go(23, (mapping starting from 400))
  45. // 400 not found
  46. // go(23, (mapping starting from 100))
  47. // 100 not found
  48. // go(23, (mapping starting from 90))
  49. // 90 not found
  50. // go(23, (mapping starting from 50))
  51. // 50 not found
  52. // go(23, (mapping starting from 40))
  53. // 40 not found
  54. // go(23, (mapping starting from 10))
  55. // 10 found - 'X' added - current 'return' value 'MCMX'
  56. // go(23 - 10, (mapping starting from 10))
  57. // 10 found - 'X' added - current 'return' value 'MCMXX'
  58. // go(13 - 10, (mapping starting from 10))
  59. // 10 not found
  60. // go(3, (mapping starting from 9))
  61. // 9 not found
  62. // go(3, (mapping starting from 5))
  63. // 5 not found
  64. // go(3, (mapping starting from 4))
  65. // 4 not found
  66. // go(3, (mapping starting from 1))
  67. // 1 found - 'I' added - current 'return' value 'MCMXXI'
  68. // go(3-1, (mapping starting from 1))
  69. // 1 found - 'I' added - current 'return' value 'MCMXXII'
  70. // go(2-1, (mapping starting from 1))
  71. // 1 found - 'I' added - current 'return' value 'MCMXXIII'
  72. // go(1-1, (mapping starting from 1))
  73. // n == 0 - end!
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement