From c3b389f4dcec431fa374a1ef366af925121da2fd Mon Sep 17 00:00:00 2001 From: "Kai.Yuan" Date: Sat, 9 Mar 2024 00:09:04 +0100 Subject: [PATCH 1/2] [happy-number] happy number --- .../happynumber/HappyNumberUnitTest.java | 82 +++++++++++++++++++ 1 file changed, 82 insertions(+) create mode 100644 algorithms-modules/algorithms-miscellaneous-7/src/test/java/com/baeldung/algorithms/happynumber/HappyNumberUnitTest.java diff --git a/algorithms-modules/algorithms-miscellaneous-7/src/test/java/com/baeldung/algorithms/happynumber/HappyNumberUnitTest.java b/algorithms-modules/algorithms-miscellaneous-7/src/test/java/com/baeldung/algorithms/happynumber/HappyNumberUnitTest.java new file mode 100644 index 0000000000..5cdf1a82c5 --- /dev/null +++ b/algorithms-modules/algorithms-miscellaneous-7/src/test/java/com/baeldung/algorithms/happynumber/HappyNumberUnitTest.java @@ -0,0 +1,82 @@ +package com.baeldung.algorithms.happynumber; + +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertTrue; + +import java.util.HashSet; +import java.util.Set; + +import org.junit.jupiter.api.Test; + +class HappyNumberDecider { + + public static boolean isHappyNumber(int n) { + Set checkedNumbers = new HashSet<>(); + while (true) { + n = sumDigitsSquare(n); + if (n == 1) { + return true; + } + if (checkedNumbers.contains(n)) { + return false; + } + checkedNumbers.add(n); + } + } + + public static boolean isHappyNumber2(int n) { + int slow = n; + int fast = n; + do { + slow = sumDigitsSquare(slow); + fast = sumDigitsSquare(sumDigitsSquare(fast)); + } while (slow != fast); + + return slow == 1; + } + + private static int sumDigitsSquare(int n) { + int squareSum = 0; + while (n != 0) { + squareSum += (n % 10) * (n % 10); + n /= 10; + } + return squareSum; + } +} + +public class HappyNumberUnitTest { + + @Test + void whenUsingIsHappyNumber_thenGetTheExpectedResult() { + assertTrue(HappyNumberDecider.isHappyNumber(7)); + assertTrue(HappyNumberDecider.isHappyNumber(10)); + assertTrue(HappyNumberDecider.isHappyNumber(13)); + assertTrue(HappyNumberDecider.isHappyNumber(19)); + assertTrue(HappyNumberDecider.isHappyNumber(23)); + + assertFalse(HappyNumberDecider.isHappyNumber(4)); + assertFalse(HappyNumberDecider.isHappyNumber(6)); + assertFalse(HappyNumberDecider.isHappyNumber(11)); + assertFalse(HappyNumberDecider.isHappyNumber(15)); + assertFalse(HappyNumberDecider.isHappyNumber(20)); + + } + + @Test + void whenUsingIsHappyNumber2_thenGetTheExpectedResult() { + assertTrue(HappyNumberDecider.isHappyNumber2(7)); + assertTrue(HappyNumberDecider.isHappyNumber2(10)); + assertTrue(HappyNumberDecider.isHappyNumber2(13)); + assertTrue(HappyNumberDecider.isHappyNumber2(19)); + assertTrue(HappyNumberDecider.isHappyNumber2(23)); + + assertFalse(HappyNumberDecider.isHappyNumber2(4)); + assertFalse(HappyNumberDecider.isHappyNumber2(6)); + assertFalse(HappyNumberDecider.isHappyNumber2(11)); + assertFalse(HappyNumberDecider.isHappyNumber2(15)); + assertFalse(HappyNumberDecider.isHappyNumber2(20)); + + } + +} \ No newline at end of file From 11ee2130ccb2d084fd4385b89b47eec167d57926 Mon Sep 17 00:00:00 2001 From: "Kai.Yuan" Date: Sun, 10 Mar 2024 18:05:49 +0100 Subject: [PATCH 2/2] [happy-number] renaming method --- .../happynumber/HappyNumberUnitTest.java | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/algorithms-modules/algorithms-miscellaneous-7/src/test/java/com/baeldung/algorithms/happynumber/HappyNumberUnitTest.java b/algorithms-modules/algorithms-miscellaneous-7/src/test/java/com/baeldung/algorithms/happynumber/HappyNumberUnitTest.java index 5cdf1a82c5..2056688659 100644 --- a/algorithms-modules/algorithms-miscellaneous-7/src/test/java/com/baeldung/algorithms/happynumber/HappyNumberUnitTest.java +++ b/algorithms-modules/algorithms-miscellaneous-7/src/test/java/com/baeldung/algorithms/happynumber/HappyNumberUnitTest.java @@ -24,7 +24,7 @@ class HappyNumberDecider { } } - public static boolean isHappyNumber2(int n) { + public static boolean isHappyNumberFloyd(int n) { int slow = n; int fast = n; do { @@ -65,17 +65,17 @@ public class HappyNumberUnitTest { @Test void whenUsingIsHappyNumber2_thenGetTheExpectedResult() { - assertTrue(HappyNumberDecider.isHappyNumber2(7)); - assertTrue(HappyNumberDecider.isHappyNumber2(10)); - assertTrue(HappyNumberDecider.isHappyNumber2(13)); - assertTrue(HappyNumberDecider.isHappyNumber2(19)); - assertTrue(HappyNumberDecider.isHappyNumber2(23)); + assertTrue(HappyNumberDecider.isHappyNumberFloyd(7)); + assertTrue(HappyNumberDecider.isHappyNumberFloyd(10)); + assertTrue(HappyNumberDecider.isHappyNumberFloyd(13)); + assertTrue(HappyNumberDecider.isHappyNumberFloyd(19)); + assertTrue(HappyNumberDecider.isHappyNumberFloyd(23)); - assertFalse(HappyNumberDecider.isHappyNumber2(4)); - assertFalse(HappyNumberDecider.isHappyNumber2(6)); - assertFalse(HappyNumberDecider.isHappyNumber2(11)); - assertFalse(HappyNumberDecider.isHappyNumber2(15)); - assertFalse(HappyNumberDecider.isHappyNumber2(20)); + assertFalse(HappyNumberDecider.isHappyNumberFloyd(4)); + assertFalse(HappyNumberDecider.isHappyNumberFloyd(6)); + assertFalse(HappyNumberDecider.isHappyNumberFloyd(11)); + assertFalse(HappyNumberDecider.isHappyNumberFloyd(15)); + assertFalse(HappyNumberDecider.isHappyNumberFloyd(20)); }