From 0c522de9cc1dcad94eb24bf91c14236656a60f40 Mon Sep 17 00:00:00 2001 From: Jakob Scheid Date: Thu, 19 Mar 2026 16:02:23 +0100 Subject: [PATCH] Problem 25 --- .../ninetyNineScalaProblems/Problem25.scala | 16 ++++++++++++++++ .../ninetyNineScalaProblems/Problem25Suite.scala | 10 ++++++++++ 2 files changed, 26 insertions(+) create mode 100644 src/main/scala/ninetyNineScalaProblems/Problem25.scala create mode 100644 src/test/scala/ninetyNineScalaProblems/Problem25Suite.scala diff --git a/src/main/scala/ninetyNineScalaProblems/Problem25.scala b/src/main/scala/ninetyNineScalaProblems/Problem25.scala new file mode 100644 index 0000000..8381706 --- /dev/null +++ b/src/main/scala/ninetyNineScalaProblems/Problem25.scala @@ -0,0 +1,16 @@ +package ninetyNineScalaProblems + +import scala.util.Random +import scala.annotation.tailrec + +object Problem25: + def randomPermute(list: List[Any]): List[Any] = + @tailrec + def loop(cursor: List[Any], acc: List[Any]): List[Any] = + cursor match + case head :: tail => + loop(tail, cursor(Random.between(0, cursor.length)) :: acc) + case Nil => + acc + + loop(list, List()) \ No newline at end of file diff --git a/src/test/scala/ninetyNineScalaProblems/Problem25Suite.scala b/src/test/scala/ninetyNineScalaProblems/Problem25Suite.scala new file mode 100644 index 0000000..7c31ba1 --- /dev/null +++ b/src/test/scala/ninetyNineScalaProblems/Problem25Suite.scala @@ -0,0 +1,10 @@ +package ninetyNineScalaProblems + +class Problem25Suite extends munit.FunSuite: + List( + (List(1), List(1)), + (List(), List()), + ).foreach: + case (list, expected) => + test(s"randomPermute returns [$expected]"): + assertEquals(Problem25.randomPermute(list), expected) \ No newline at end of file