From fdba322ec847d7b0d734803fc0fabe5166f314e7 Mon Sep 17 00:00:00 2001 From: Jakob Scheid Date: Fri, 20 Mar 2026 11:50:08 +0100 Subject: [PATCH] Problem 32 --- .../arithmetic/Problem32.scala | 15 +++++++++++++++ .../arithmetic/Problem32Suite.scala | 18 ++++++++++++++++++ 2 files changed, 33 insertions(+) create mode 100644 src/main/scala/ninetyNineScalaProblems/arithmetic/Problem32.scala create mode 100644 src/test/scala/ninetyNineScalaProblems/arithmetic/Problem32Suite.scala 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