From 1c2372e4b07f2a35e10898e35f5d809503b03731 Mon Sep 17 00:00:00 2001 From: Nelson Ruivo Date: Sat, 11 Jan 2020 20:42:22 +0000 Subject: [PATCH 1/4] Implemented int AbundantNumber calculator. --- .../stringbasic/exercises/AbundantNumber.java | 24 +++++++++++ .../exercises/AbundantNumberTest.java | 43 +++++++++++++++++++ 2 files changed, 67 insertions(+) create mode 100644 src/main/java/stringbasic/exercises/AbundantNumber.java create mode 100644 src/test/java/stringbasic/exercises/AbundantNumberTest.java diff --git a/src/main/java/stringbasic/exercises/AbundantNumber.java b/src/main/java/stringbasic/exercises/AbundantNumber.java new file mode 100644 index 0000000..1722491 --- /dev/null +++ b/src/main/java/stringbasic/exercises/AbundantNumber.java @@ -0,0 +1,24 @@ +package stringbasic.exercises; + +public class AbundantNumber { + + private int number; + + public AbundantNumber(int number) { + this.number = number; + } + + public int abundance() { + int result = 0; + for (int i = this.number-1; i>0; i--) { + if (this.number % i == 0) + result += i; + } + + return result; + } + + public boolean isAbundant() { + return this.abundance() > this.number; + } +} \ No newline at end of file diff --git a/src/test/java/stringbasic/exercises/AbundantNumberTest.java b/src/test/java/stringbasic/exercises/AbundantNumberTest.java new file mode 100644 index 0000000..57645a4 --- /dev/null +++ b/src/test/java/stringbasic/exercises/AbundantNumberTest.java @@ -0,0 +1,43 @@ +package stringbasic.exercises; + +import com.google.common.collect.ImmutableList; +import org.junit.Assert; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameters; + +import java.util.Collection; + +@RunWith(Parameterized.class) +public class AbundantNumberTest { + + private int number; + private int abundance; + private boolean isAbundant; + + @Parameters + public static Collection abundantNumbers () { + return ImmutableList.of( + new Object[] {10, 8, false}, + new Object[] {12, 16, true}, + new Object[] {18, 21, true}, + new Object[] {20, 22, true}, + new Object[] {21, 11, false}, + new Object[] {24, 36, true}, + new Object[] {30, 42, true} + ); + } + + public AbundantNumberTest(int number, int abundance, boolean isAbundant) { + this.number = number; + this.abundance = abundance; + this.isAbundant = isAbundant; + } + + @Test + public void testKnownCases() { + AbundantNumber sut = new AbundantNumber(this.number); + Assert.assertEquals(this.abundance, sut.abundance()); + } +} \ No newline at end of file From ea89bbaefe698b729232bd72aa84a2dfa7bfa817 Mon Sep 17 00:00:00 2001 From: Nelson Ruivo Date: Sat, 11 Jan 2020 20:47:10 +0000 Subject: [PATCH 2/4] Optimized AbundantNumber to N/2. --- src/main/java/stringbasic/exercises/AbundantNumber.java | 2 +- src/test/java/stringbasic/exercises/AbundantNumberTest.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/stringbasic/exercises/AbundantNumber.java b/src/main/java/stringbasic/exercises/AbundantNumber.java index 1722491..f081b3d 100644 --- a/src/main/java/stringbasic/exercises/AbundantNumber.java +++ b/src/main/java/stringbasic/exercises/AbundantNumber.java @@ -10,7 +10,7 @@ public AbundantNumber(int number) { public int abundance() { int result = 0; - for (int i = this.number-1; i>0; i--) { + for (int i = 1; i <= this.number/2; i++) { if (this.number % i == 0) result += i; } diff --git a/src/test/java/stringbasic/exercises/AbundantNumberTest.java b/src/test/java/stringbasic/exercises/AbundantNumberTest.java index 57645a4..bea01dc 100644 --- a/src/test/java/stringbasic/exercises/AbundantNumberTest.java +++ b/src/test/java/stringbasic/exercises/AbundantNumberTest.java @@ -39,5 +39,6 @@ public AbundantNumberTest(int number, int abundance, boolean isAbundant) { public void testKnownCases() { AbundantNumber sut = new AbundantNumber(this.number); Assert.assertEquals(this.abundance, sut.abundance()); + Assert.assertEquals(this.isAbundant, sut.isAbundant()); } } \ No newline at end of file From cd00bdfbe255a3a1c1b22b58adbecd73e7881b09 Mon Sep 17 00:00:00 2001 From: Nelson Ruivo Date: Sat, 11 Jan 2020 20:56:49 +0000 Subject: [PATCH 3/4] Optimized AbundantNumber to sqrt(N). --- src/main/java/stringbasic/exercises/AbundantNumber.java | 9 ++++++--- .../java/stringbasic/exercises/AbundantNumberTest.java | 4 ++-- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/main/java/stringbasic/exercises/AbundantNumber.java b/src/main/java/stringbasic/exercises/AbundantNumber.java index f081b3d..90857a4 100644 --- a/src/main/java/stringbasic/exercises/AbundantNumber.java +++ b/src/main/java/stringbasic/exercises/AbundantNumber.java @@ -10,12 +10,15 @@ public AbundantNumber(int number) { public int abundance() { int result = 0; - for (int i = 1; i <= this.number/2; i++) { - if (this.number % i == 0) + for (int i = 1; i <= Math.sqrt(this.number); i++) { + if (this.number % i == 0) { result += i; + if (this.number / i != i) + result += this.number / i; + } } - return result; + return result - this.number; } public boolean isAbundant() { diff --git a/src/test/java/stringbasic/exercises/AbundantNumberTest.java b/src/test/java/stringbasic/exercises/AbundantNumberTest.java index bea01dc..eef5597 100644 --- a/src/test/java/stringbasic/exercises/AbundantNumberTest.java +++ b/src/test/java/stringbasic/exercises/AbundantNumberTest.java @@ -38,7 +38,7 @@ public AbundantNumberTest(int number, int abundance, boolean isAbundant) { @Test public void testKnownCases() { AbundantNumber sut = new AbundantNumber(this.number); - Assert.assertEquals(this.abundance, sut.abundance()); - Assert.assertEquals(this.isAbundant, sut.isAbundant()); + Assert.assertEquals("number: " + this.number, this.abundance, sut.abundance()); + Assert.assertEquals("number: " + this.number, this.isAbundant, sut.isAbundant()); } } \ No newline at end of file From 5b494f5071d10a88681d0e3ec91b77d65b595a8c Mon Sep 17 00:00:00 2001 From: Nelson Ruivo Date: Sat, 11 Jan 2020 20:58:40 +0000 Subject: [PATCH 4/4] Added EOL on AbundantNumber files. --- src/main/java/stringbasic/exercises/AbundantNumber.java | 2 +- src/test/java/stringbasic/exercises/AbundantNumberTest.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/stringbasic/exercises/AbundantNumber.java b/src/main/java/stringbasic/exercises/AbundantNumber.java index 90857a4..6260880 100644 --- a/src/main/java/stringbasic/exercises/AbundantNumber.java +++ b/src/main/java/stringbasic/exercises/AbundantNumber.java @@ -24,4 +24,4 @@ public int abundance() { public boolean isAbundant() { return this.abundance() > this.number; } -} \ No newline at end of file +} diff --git a/src/test/java/stringbasic/exercises/AbundantNumberTest.java b/src/test/java/stringbasic/exercises/AbundantNumberTest.java index eef5597..9bcb70d 100644 --- a/src/test/java/stringbasic/exercises/AbundantNumberTest.java +++ b/src/test/java/stringbasic/exercises/AbundantNumberTest.java @@ -41,4 +41,4 @@ public void testKnownCases() { Assert.assertEquals("number: " + this.number, this.abundance, sut.abundance()); Assert.assertEquals("number: " + this.number, this.isAbundant, sut.isAbundant()); } -} \ No newline at end of file +}