KataRomanNumerals

7 views
Skip to first unread message

<peter.lewerin@swipnet.se>

unread,
Aug 12, 2010, 8:11:57 PM8/12/10
to scala-...@googlegroups.com

> Någon som var med och/eller har löst denna Kata i scala, har ni lust
> att dela med er av er lösning, jag skulle vilja jämföra och få lite
> idéer.

Något i den här stilen kanske:


object RomanNumeral {
  val r = "IVXLCDM.".iterator.sliding(3, 2).withPartial(true).toArray

  def conv(t: (Char, Int)) = {
    val s = r(t._2)

    t._1 match {
      case '9' => s(0).toString + s(2)
      case '4' => s take 2 mkString
      case c   => {
        val n = c.toString.toInt
        (if (n >= 5) s(1) else "") + s(0).toString * (n % 5)
      }
    }
  }

  def apply(n: Int) = {
    require(n <= 3999)

    ((n.toString.reverse zipWithIndex) reverse) map conv mkString
  }
}


Reply all
Reply to author
Forward
0 new messages