From 80ccb9219d019b47c43acef0ae7dea7c6f85ac9c Mon Sep 17 00:00:00 2001 From: habere-et-dispertire <18032974+habere-et-dispertire@users.noreply.github.com> Date: Mon, 22 Jun 2026 20:12:46 +0100 Subject: [PATCH 1/2] Add Modular Arithmetic approach to RaindropConverter --- .../raindrops/.approaches/introduction.md | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/exercises/practice/raindrops/.approaches/introduction.md b/exercises/practice/raindrops/.approaches/introduction.md index 48b7d6b07..a860542d5 100644 --- a/exercises/practice/raindrops/.approaches/introduction.md +++ b/exercises/practice/raindrops/.approaches/introduction.md @@ -54,6 +54,32 @@ class RaindropConverter { For more information, check the [`Map` approach][approach-map]. +## Approach: `Modular Arithmetic` + +```java +import java.math.BigInteger; +import static java.math.BigInteger.valueOf; + +class RaindropConverter { + + String convert (int n) { + switch ( valueOf(n).modPow( valueOf(12), valueOf(105) ).intValue() ) { + case ( 1): { return String.valueOf(n); } + case (36): { return "Pling"; } + case (85): { return "Plang"; } + case (91): { return "Plong"; } + case (15): { return "PlingPlang"; } + case (21): { return "PlingPlong"; } + case (70): { return "PlangPlong"; } + default : { return "PlingPlangPlong"; } // 0 + } + } + +} +``` + +For more information, check the [`Modular arithmetic` approach][approach-modular]. + ## Which approach to use? Benchmarking with the [Java Microbenchmark Harness][jmh] is currently outside the scope of this document, @@ -64,4 +90,5 @@ and no other code would need to be added. [remainder-operator]: https://www.geeksforgeeks.org/modulo-or-remainder-operator-in-java/ [approach-if-statements]: https://exercism.org/tracks/java/exercises/raindrops/approaches/if-statements [approach-map]: https://exercism.org/tracks/java/exercises/raindrops/approaches/map +[approach-modular]: https://philcrissman.net/posts/eulers-fizzbuzz/ [jmh]: https://github.com/openjdk/jmh From c5802d2d3780a164461e3d3f86fa582e51f15ee0 Mon Sep 17 00:00:00 2001 From: habere-et-dispertire <18032974+habere-et-dispertire@users.noreply.github.com> Date: Tue, 23 Jun 2026 09:01:46 +0100 Subject: [PATCH 2/2] Refactor RaindropConverter default case --- exercises/practice/raindrops/.approaches/introduction.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exercises/practice/raindrops/.approaches/introduction.md b/exercises/practice/raindrops/.approaches/introduction.md index a860542d5..ade18fe66 100644 --- a/exercises/practice/raindrops/.approaches/introduction.md +++ b/exercises/practice/raindrops/.approaches/introduction.md @@ -64,14 +64,14 @@ class RaindropConverter { String convert (int n) { switch ( valueOf(n).modPow( valueOf(12), valueOf(105) ).intValue() ) { - case ( 1): { return String.valueOf(n); } case (36): { return "Pling"; } case (85): { return "Plang"; } case (91): { return "Plong"; } case (15): { return "PlingPlang"; } case (21): { return "PlingPlong"; } case (70): { return "PlangPlong"; } - default : { return "PlingPlangPlong"; } // 0 + case ( 0): { return "PlingPlangPlong"; } + default : { return String.valueOf(n); } } }