21 lines
760 B
Scala
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")
|