From 6504948100ad6cf2c7c5b752f4db3b1cb480d8e6 Mon Sep 17 00:00:00 2001 From: Jakob Scheid Date: Thu, 19 Mar 2026 15:39:09 +0100 Subject: [PATCH] Problem 03 --- .../ninetyNineScalaProblems/Problem03.scala | 21 +++++++++++++++++++ .../Problem03Suite.scala | 13 ++++++++++++ 2 files changed, 34 insertions(+) create mode 100644 src/main/scala/ninetyNineScalaProblems/Problem03.scala create mode 100644 src/test/scala/ninetyNineScalaProblems/Problem03Suite.scala 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