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