From 4cb7b4e95b47d00b4a3f91c11127e607cde9d237 Mon Sep 17 00:00:00 2001 From: Jakob Scheid Date: Thu, 19 Mar 2026 15:39:35 +0100 Subject: [PATCH] Problem 18 --- .../ninetyNineScalaProblems/Problem18.scala | 17 +++++++++++++++++ .../Problem18Suite.scala | 18 ++++++++++++++++++ 2 files changed, 35 insertions(+) create mode 100644 src/main/scala/ninetyNineScalaProblems/Problem18.scala create mode 100644 src/test/scala/ninetyNineScalaProblems/Problem18Suite.scala diff --git a/src/main/scala/ninetyNineScalaProblems/Problem18.scala b/src/main/scala/ninetyNineScalaProblems/Problem18.scala new file mode 100644 index 0000000..ab01a59 --- /dev/null +++ b/src/main/scala/ninetyNineScalaProblems/Problem18.scala @@ -0,0 +1,17 @@ +package ninetyNineScalaProblems + +import scala.annotation.tailrec + +object Problem18: + def slice(i: Int, k: Int, list: List[Any]): List[Any] = + @tailrec + def loop(cursor: List[Any], acc: List[Any], index: Int): List[Any] = + cursor match + case e :: tail if (i <= index && index < k) => + loop(tail, e :: acc, index + 1) + case e :: tail => + loop(tail, acc, index + 1) + case Nil => + acc + + loop(list, List(), 0).reverse \ No newline at end of file diff --git a/src/test/scala/ninetyNineScalaProblems/Problem18Suite.scala b/src/test/scala/ninetyNineScalaProblems/Problem18Suite.scala new file mode 100644 index 0000000..d7ec305 --- /dev/null +++ b/src/test/scala/ninetyNineScalaProblems/Problem18Suite.scala @@ -0,0 +1,18 @@ +package ninetyNineScalaProblems + +import scala.compiletime.ops.boolean + +class Problem18Suite extends munit.FunSuite: + List( + ((0, 0, List(1, 2, 3, 4)), List()), + ((0, 1, List(1, 2, 3, 4)), List(1)), + ((1, 1, List(1, 2, 3, 4)), List()), + ((1, 2, List(1, 2, 3, 4)), List(2)), + ((1, 3, List(1, 2, 3, 4)), List(2, 3)), + ((1, 4, List(1, 2, 3, 4)), List(2, 3, 4)), + ((1, 5, List(1, 2, 3, 4)), List(2, 3, 4)), + ((1, 0, List(1, 2, 3, 4)), List()), + ).foreach: + case ((i, k, list), expected) => + test(s"slice returns [$expected]"): + assertEquals(Problem18.slice(i, k, list), expected) \ No newline at end of file