diff --git a/src/main/scala/ninetyNineScalaProblems/arithmetic/Problem34.scala b/src/main/scala/ninetyNineScalaProblems/arithmetic/Problem34.scala new file mode 100644 index 0000000..cb7f8f2 --- /dev/null +++ b/src/main/scala/ninetyNineScalaProblems/arithmetic/Problem34.scala @@ -0,0 +1,17 @@ +package ninetyNineScalaProblems.arithmetic + +import scala.annotation.tailrec + +object Problem34: + def totient(int: Int): Int = + @tailrec + def loop(cursor: Int, acc: Int): Int = + cursor match + case c if c == int => + acc + case c if Problem33.coprime(c, int) => + loop(cursor + 1, acc + 1) + case _ => + loop(cursor + 1, acc) + + loop(0, 0) \ No newline at end of file diff --git a/src/test/scala/ninetyNineScalaProblems/arithmetic/Problem34Suite.scala b/src/test/scala/ninetyNineScalaProblems/arithmetic/Problem34Suite.scala new file mode 100644 index 0000000..cd955eb --- /dev/null +++ b/src/test/scala/ninetyNineScalaProblems/arithmetic/Problem34Suite.scala @@ -0,0 +1,14 @@ +package ninetyNineScalaProblems.arithmetic + +class Problem34Suite extends munit.FunSuite: + List( + (0, 0), + (1, 1), + (2, 1), + (3, 2), + (42, 12), + (10, 4), + ).foreach: + case (int, expected) => + test(s"totient returns [$expected]"): + assertEquals(Problem34.totient(int), expected) \ No newline at end of file