diff --git a/src/main/scala/ninetyNineScalaProblems/arithmetic/Problem32.scala b/src/main/scala/ninetyNineScalaProblems/arithmetic/Problem32.scala new file mode 100644 index 0000000..a171a72 --- /dev/null +++ b/src/main/scala/ninetyNineScalaProblems/arithmetic/Problem32.scala @@ -0,0 +1,15 @@ +package ninetyNineScalaProblems.arithmetic + +import scala.annotation.tailrec + +object Problem32: + def gcd(a: Int, b: Int): Int = + @tailrec + def loop(cursor: Tuple2[Int, Int]): Int = + cursor match + case (a, 0) => + a + case (a, b) => + loop((b, a % b)) + + loop((a, b)) \ No newline at end of file diff --git a/src/test/scala/ninetyNineScalaProblems/arithmetic/Problem32Suite.scala b/src/test/scala/ninetyNineScalaProblems/arithmetic/Problem32Suite.scala new file mode 100644 index 0000000..900db26 --- /dev/null +++ b/src/test/scala/ninetyNineScalaProblems/arithmetic/Problem32Suite.scala @@ -0,0 +1,18 @@ +package ninetyNineScalaProblems.arithmetic + +class Problem32Suite extends munit.FunSuite: + List( + ((0, 0), 0), + ((1, 1), 1), + ((2, 2), 2), + ((1, 0), 1), + ((0, 1), 1), + ((1, 3), 1), + ((3, 1), 1), + ((2, 4), 2), + ((4, 2), 2), + ((6, 9), 3), + ).foreach: + case ((a, b), expected) => + test(s"gcd returns [$expected]"): + assertEquals(Problem32.gcd(a, b), expected) \ No newline at end of file