Following with my take on the Scala 99 Problems that I started here, lets talk a little bit about the second one. Here is the problem definition, from the original page:
- P02 (*) Find the last but one element of a list.
- Example:
scala> penultimate(List(1, 1, 2, 3, 5, 8)) res0: Int = 5
This one is very similar to the last problem and has similar solutions as well. The first solution I tried was, again, an ugly one:
def penultimate[A](list: List[A]): A = { list(list.size-2) }
Terrible, but works. The second solution is nicer, with pattern matching, as before. But this time I learned a little bit from Phil Gold’s solution for the first problem, so prettier it is:
def penultimateWithPatternMatching[A](list: List[A]): A = list match { case x :: y :: Nil => x case _ :: tail => penultimateWithPatternMatching(tail) case _ => throw new NoSuchElementException }
You can find Phil Gold’s solution to this problem here. His simpler solution is a bit better than mine, so my mind expands a little bit and I learn =). Also, he plays with a generic finder – interesting to read, and more mind expanding happens.
Pingback: Scala Problem Number Three « JCranky's Blog!