RosettaCodeData/Task/Middle-three-digits/Scala/middle-three-digits.scala
2023-07-01 13:44:08 -04:00

21 lines
760 B
Scala

/**
* Optionally return the middle three digits of an integer.
*
* @example List(123,12345,-789,1234,12) flatMap (middleThree(_)), returns: List(123, 234, 789)
*/
def middleThree( s:Int ) : Option[Int] = s.abs.toString match {
case v if v.length % 2 == 0 => None // Middle three is undefined for even lengths
case v if v.length < 3 => None
case v =>
val i = (v.length / 2) - 1
Some( v.substring(i,i+3).toInt )
}
// A little test...
val intVals = List(123,12345,1234567,987654321,10001,-10001,-123,-100,100,-12345,1,2,-1,-10,2002,-2002,0)
intVals map (middleThree(_)) map {
case None => "No middle three"
case Some(v) => "%03d".format(v) // Format the value, force leading zeroes
} mkString("\n")