Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
21 changes: 21 additions & 0 deletions src/Triangles/Dot.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package Triangles;

public class Dot {
private final double x;
private final double y;

public Dot(double x, double y) {
this.x = x;
this.y = y;
}

public double getX() {
return x;
}

public double getY() {
return y;
}


}
31 changes: 31 additions & 0 deletions src/Triangles/FileParsing.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package Triangles;

import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.Comparator;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;

public class FileParsing {

public static List<Triangle> fileToTriangleList(File file) throws IOException {
List<String> stringList = Files.readAllLines(Path.of(file.getPath()));
return stringList.stream().map(Triangle::value).filter(Objects::nonNull).collect(Collectors.toList());

}

public static void writeInFile(List<Triangle> triangleList, File file) throws IOException {
if (triangleList.isEmpty()) return;
List<Triangle> IsoscelesTriangles = triangleList.stream().filter(Triangle::isIsosceles).collect(Collectors.toList());
Triangle biggestTriangle = IsoscelesTriangles.stream().min(Comparator.comparing(Solution::getTriangleScale)).get();

String triangle = biggestTriangle.toString() + "Scale: " + Solution.getTriangleScale(biggestTriangle);
PrintWriter out = new PrintWriter(file.getPath());
out.println(triangle);
out.close();
}
}
4 changes: 4 additions & 0 deletions src/Triangles/Main.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
package Triangles;

public class Main {
}
22 changes: 22 additions & 0 deletions src/Triangles/Solution.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
package Triangles;

import java.util.List;

public class Solution {

public static double getLineLength(Dot A, Dot B) {
return Math.sqrt(Math.pow(A.getX() - B.getX(), 2) + Math.pow(A.getY() - B.getY(), 2));
}

public static double getTriangleScale(Triangle triangle) {
double sideA = Solution.getLineLength(triangle.getA(), triangle.getB());
double sideB = Solution.getLineLength(triangle.getB(), triangle.getC());
double sideC = Solution.getLineLength(triangle.getA(), triangle.getC());

double p = (sideA + sideB + sideC) / 2;

return Math.sqrt(p*(p - sideA)*(p - sideB)*(p - sideC));
}


}
64 changes: 64 additions & 0 deletions src/Triangles/Triangle.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
package Triangles;

import java.util.ArrayList;
import java.util.List;

public class Triangle {
private final Dot A;
private final Dot B;
private final Dot C;

public Triangle(Dot a, Dot b, Dot c) {
A = a;
B = b;
C = c;
}

public Dot getA() {
return A;
}

public Dot getB() {
return B;
}

public Dot getC() {
return C;
}

public boolean isTriangle() {
return (C.getX() - A.getX()) / (B.getX() - A.getX()) != (C.getY() - A.getY()) / (B.getY() - A.getY());
}


public boolean isIsosceles() {
if (isTriangle()) {
double sideA = Solution.getLineLength(A, B);
double sideB = Solution.getLineLength(B, C);
double sideC = Solution.getLineLength(A, C);
return (sideA == sideB) || (sideA == sideC) || (sideB == sideC);
}
return false;
}

public static Triangle value(String s) {
String[] coords = s.split(" ");
if (coords.length < 6) {
return null; // Not enough data
}
List<Dot> dots = new ArrayList<>();
for (int i = 0; i < 6; i += 2) {
dots.add(new Dot(Double.parseDouble(coords[i]), Double.parseDouble(coords[i + 1])));
}
Triangle triangle = new Triangle(dots.get(0), dots.get(1), dots.get(2));
return triangle.isTriangle() ? triangle : null;
}

@Override
public String toString() {
return "Triangle:" +
"Ax=" + A.getX() + "Ay=" + A.getY() +
", Bx=" + B.getX() + "By=" + B.getY() +
", Cx=" + C.getX() + "Cy=" + C.getY();
}
}