diff --git a/src/main/scala/ninetyNineScalaProblems/Problem02.scala b/src/main/scala/ninetyNineScalaProblems/Problem02.scala new file mode 100644 index 0000000..7195b8d --- /dev/null +++ b/src/main/scala/ninetyNineScalaProblems/Problem02.scala @@ -0,0 +1,13 @@ +package ninetyNineScalaProblems + +object Problem02: + def lastButOneElement(list: List[Any]): Option[Any] = + list match + case l if l.length >= 2 => Some(list(l.length - 2)) + case _ => None + +object Problem02Stdlib: + def lastButOneElement(list: List[Any]): Option[Any] = + list.reverse match + case last :: lastButOne :: tail => Some(lastButOne) + case _ => None \ No newline at end of file diff --git a/src/test/scala/ninetyNineScalaProblems/Problem02Suite.scala b/src/test/scala/ninetyNineScalaProblems/Problem02Suite.scala new file mode 100644 index 0000000..bc8b04e --- /dev/null +++ b/src/test/scala/ninetyNineScalaProblems/Problem02Suite.scala @@ -0,0 +1,13 @@ +package ninetyNineScalaProblems + +class Problem02Suite extends munit.FunSuite: + List( + (List(1, 2, 3, 4, 5), Some(4)), + (List(1, 2), Some(1)), + (List(1), None), + (List(), None) + ).foreach: + case (list, expected) => + test(s"lastButOneElement returns [$expected]"): + assertEquals(Problem02.lastButOneElement(list), expected, "Problem02") + assertEquals(Problem02Stdlib.lastButOneElement(list), expected, "Problem02Stdlib") \ No newline at end of file