diff --git a/src/Triangles/Dot.java b/src/Triangles/Dot.java new file mode 100644 index 0000000..cdc1f5b --- /dev/null +++ b/src/Triangles/Dot.java @@ -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; + } + + +} diff --git a/src/Triangles/FileParsing.java b/src/Triangles/FileParsing.java new file mode 100644 index 0000000..2111792 --- /dev/null +++ b/src/Triangles/FileParsing.java @@ -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 fileToTriangleList(File file) throws IOException { + List stringList = Files.readAllLines(Path.of(file.getPath())); + return stringList.stream().map(Triangle::value).filter(Objects::nonNull).collect(Collectors.toList()); + + } + + public static void writeInFile(List triangleList, File file) throws IOException { + if (triangleList.isEmpty()) return; + List 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(); + } +} diff --git a/src/Triangles/Main.java b/src/Triangles/Main.java new file mode 100644 index 0000000..38c4a7c --- /dev/null +++ b/src/Triangles/Main.java @@ -0,0 +1,4 @@ +package Triangles; + +public class Main { +} diff --git a/src/Triangles/Solution.java b/src/Triangles/Solution.java new file mode 100644 index 0000000..2090313 --- /dev/null +++ b/src/Triangles/Solution.java @@ -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)); + } + + +} diff --git a/src/Triangles/Triangle.java b/src/Triangles/Triangle.java new file mode 100644 index 0000000..8dace13 --- /dev/null +++ b/src/Triangles/Triangle.java @@ -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 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(); + } +}