diff --git a/src/main/scala/ninetyNineScalaProblems/Problem14.scala b/src/main/scala/ninetyNineScalaProblems/Problem14.scala new file mode 100644 index 0000000..5c73893 --- /dev/null +++ b/src/main/scala/ninetyNineScalaProblems/Problem14.scala @@ -0,0 +1,18 @@ +package ninetyNineScalaProblems + +import scala.annotation.tailrec + +object Problem14: + def duplicateElements(list: List[Any]): List[Any] = + @tailrec + def loop(cursor: List[Any], acc: List[Any]): List[Any] = + cursor match + case e :: tail => + loop(tail, e :: e :: acc) + case Nil => + acc + + loop(list, List()).reverse + + def duplicateElements2(list: List[Any]): List[Any] = + list.flatMap(i => i :: List(i)) \ No newline at end of file diff --git a/src/test/scala/ninetyNineScalaProblems/Problem14Suite.scala b/src/test/scala/ninetyNineScalaProblems/Problem14Suite.scala new file mode 100644 index 0000000..9dc6ca4 --- /dev/null +++ b/src/test/scala/ninetyNineScalaProblems/Problem14Suite.scala @@ -0,0 +1,17 @@ +package ninetyNineScalaProblems + +import scala.compiletime.ops.boolean + +class Problem14Suite extends munit.FunSuite: + List( + (List(1, 2, 3, 4), List(1, 1, 2, 2, 3, 3, 4, 4)), + (List(1, 2, 2, 3), List(1, 1, 2, 2, 2, 2, 3, 3)), + (List(1, 2, 3, 2), List(1, 1, 2, 2, 3, 3, 2, 2)), + (List(), List()), + (List(1), List(1, 1)), + (List(1, 1, 1), List(1, 1, 1, 1, 1, 1)), + ).foreach: + case (list, expected) => + test(s"duplicateElements returns [$expected]"): + assertEquals(Problem14.duplicateElements(list), expected) + assertEquals(Problem14.duplicateElements2(list), expected) \ No newline at end of file