| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
-
- import java.util.ArrayList;
- import java.util.List;
- import java.util.Objects;
- import java.util.stream.Collectors;
-
- public class PythagoreanTriplet {
-
- private int a;
- private int b;
- private int c;
-
- public PythagoreanTriplet(final int a, final int b, final int c) {
- this.a = a;
- this.b = b;
- this.c = c;
- }
-
- public static TripletListBuilder makeTripletsList() {
- return new TripletListBuilder();
- }
-
- public int calculateSum() {
- return this.a + this.b + this.c;
- }
-
- public long calculateProduct() {
- return this.a * this.b * this.c;
- }
-
- public boolean isPythagorean() {
- return this.a * this.a + this.b * this.b == this.c * this.c;
- }
-
- @Override
- public int hashCode() {
- return Objects.hash(a, b, c);
- }
-
- @Override
- public boolean equals(Object obj) {
- if (this == obj) {
- return true;
- }
- if (obj == null) {
- return false;
- }
- if (getClass() != obj.getClass()) {
- return false;
- }
- final PythagoreanTriplet other = (PythagoreanTriplet) obj;
- if (this.a != other.a) {
- return false;
- }
- if (this.b != other.b) {
- return false;
- }
- if (this.c != other.c) {
- return false;
- }
- return true;
- }
-
- public static class TripletListBuilder {
-
- private static final int MAX_FACTOR_DEFAULT_VALUE = 0;
- private static final int SUM_DEFAULT_VALUE = -1;
-
- private int maxFactor = MAX_FACTOR_DEFAULT_VALUE;
- private int minFactor = 1;
- private int sum = SUM_DEFAULT_VALUE;
-
- public TripletListBuilder() {
- }
-
- public TripletListBuilder withFactorsLessThanOrEqualTo(
- final int maxFactor) {
- this.maxFactor = maxFactor;
- return this;
- }
-
- public TripletListBuilder withFactorsGreaterThanOrEqualTo(
- final int minFactor) {
- this.minFactor = minFactor;
- return this;
- }
-
- public TripletListBuilder thatSumTo(final int sum) {
- this.sum = sum;
- return this;
- }
-
- public List<PythagoreanTriplet> build() {
- List<PythagoreanTriplet> triplets = new ArrayList<>();
- if (this.maxFactor == MAX_FACTOR_DEFAULT_VALUE) {
- return triplets;
- }
- double sqrt;
- int floor;
- for (int n = minFactor; n < maxFactor; n++) {
- for (int m = n + 1; m < maxFactor; m++) {
- sqrt = Math.sqrt(n * n + m * m);
- floor = (int) Math.floor(sqrt);
- if (sqrt == floor) {
- triplets.add(new PythagoreanTriplet(m, n, floor));
- }
- }
- }
- if (sum != SUM_DEFAULT_VALUE) {
- return triplets.stream()
- .filter(t -> t.calculateSum() == sum)
- .collect(Collectors.toList());
- }
- return triplets;
- }
- }
- }
|