diff --git a/src/main/scala/ninetyNineScalaProblems/Problem03.scala b/src/main/scala/ninetyNineScalaProblems/Problem03.scala new file mode 100644 index 0000000..59f671c --- /dev/null +++ b/src/main/scala/ninetyNineScalaProblems/Problem03.scala @@ -0,0 +1,21 @@ +package ninetyNineScalaProblems + +import scala.annotation.tailrec + +object Problem03: + def nthElement(list: List[Any], n: Int): Option[Any] = + @tailrec + def loop(cursor: List[Any], acc: Int): Option[Any] = + cursor match + case e :: tail if acc == n => + Some(e) + case e :: tail => + loop(tail, acc + 1) + case Nil => + None + + loop(list, 0) + +object Problem03Stdlib: + def nthElement(list: List[Any], n: Int): Option[Any] = + list.drop(n).headOption \ No newline at end of file diff --git a/src/test/scala/ninetyNineScalaProblems/Problem03Suite.scala b/src/test/scala/ninetyNineScalaProblems/Problem03Suite.scala new file mode 100644 index 0000000..08aaa54 --- /dev/null +++ b/src/test/scala/ninetyNineScalaProblems/Problem03Suite.scala @@ -0,0 +1,13 @@ +package ninetyNineScalaProblems + +class Problem03Suite extends munit.FunSuite: + List( + ((List(1, 2, 3, 4, 5), 0), Some(1)), + ((List(1, 2, 3, 4, 5), 2), Some(3)), + ((List(1), 1), None), + ((List(), 0), None) + ).foreach: + case ((list, n), expected) => + test(s"nthElement returns [$expected]"): + assertEquals(Problem03.nthElement(list, n), expected) + assertEquals(Problem03Stdlib.nthElement(list, n), expected) \ No newline at end of file