diff --git a/README.md b/README.md index a9bf51e..b7760f8 100644 --- a/README.md +++ b/README.md @@ -39,6 +39,17 @@ mvn clean verify This command also runs all the tests and checks configured for the code. +## Running the Executable + +You can execute generated jar by: + +``` +java -jar ./target/assignment-1.0-SNAPSHOT.jar +``` + +It will load input data from file at path `./input.json`. `input.json` in the repository contains sample input. + + ## Documentation The documentation is [available](https://dd2480-group14.github.io/Assignment-1/) online. It is generated via Javadoc from comments in the source code and deployed automatically after pull request merges into main branch. diff --git a/format.xml b/format.xml index d9ed5bd..c1d169a 100644 --- a/format.xml +++ b/format.xml @@ -312,7 +312,7 @@ - + diff --git a/input.json b/input.json new file mode 100644 index 0000000..b0fec3a --- /dev/null +++ b/input.json @@ -0,0 +1,281 @@ +{ + "POINTS": [ + [0.0, 0.0], + [1.0, 1.0] + ], + "LENGTH1": 2.0, + "PUV": [ + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true, + true + ], + "LCM": [ + [ + "ANDD", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED" + ], + [ + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED" + ], + [ + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED" + ], + [ + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED" + ], + [ + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED" + ], + [ + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED" + ], + [ + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED" + ], + [ + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED" + ], + [ + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED" + ], + [ + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED" + ], + [ + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED" + ], + [ + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED" + ], + [ + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED" + ], + [ + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED" + ], + [ + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED", + "NOTUSED" + ] + ] +} \ No newline at end of file diff --git a/pom.xml b/pom.xml index bd21ffa..2a92ddc 100644 --- a/pom.xml +++ b/pom.xml @@ -20,6 +20,11 @@ 4.13.2 test + + org.json + json + 20220924 + @@ -55,14 +60,31 @@ org.apache.maven.plugins - maven-jar-plugin - 3.3.0 + maven-shade-plugin + 3.4.1 + + + package + + shade + + + - - + false + + + org.json:json + + META-INF/MANIFEST.MF + + + + + assignment.Main - - + + diff --git a/src/main/java/assignment/Main.java b/src/main/java/assignment/Main.java index d7c6f54..ffd0e31 100644 --- a/src/main/java/assignment/Main.java +++ b/src/main/java/assignment/Main.java @@ -1,31 +1,135 @@ package assignment; import assignment.Input.Connect; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.io.IOException; +import org.json.JSONObject; +import org.json.JSONArray; +import org.json.JSONException; public class Main { public static void main(String[] args) { - double[][] points = new double[50][2]; - for (int i = 0; i != points.length; ++i) { - points[i][0] = i; - points[i][1] = i / 2.0; + JSONObject json; + try { + String content = new String(Files.readAllBytes(Paths.get("input.json"))); + json = new JSONObject(content); + } catch (IOException e) { + System.out.println("Unable to read and parse JSON from input.json."); + return; + } catch (JSONException e) { + System.out.println("Unable to read and parse JSON from input.json."); + return; } - Parameters params = - new Parameters(points.length, 5, 5, 1, 5, 5, 1, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5); + ParametersBuilder builder = new ParametersBuilder(); + try { + builder.length1 = json.getDouble("LENGTH1"); + } catch (JSONException e) {} + try { + builder.radius1 = json.getDouble("RADIUS1"); + } catch (JSONException e) {} + try { + builder.epsilon = json.getDouble("EPSILON"); + } catch (JSONException e) {} + try { + builder.area1 = json.getDouble("AREA1"); + } catch (JSONException e) {} + try { + builder.q_pts = json.getInt("Q_PTS"); + } catch (JSONException e) {} + try { + builder.quads = json.getInt("QUADS"); + } catch (JSONException e) {} + try { + builder.dist = json.getDouble("DIST"); + } catch (JSONException e) {} + try { + builder.n_pts = json.getInt("N_PTS"); + } catch (JSONException e) {} + try { + builder.k_pts = json.getInt("K_PTS"); + } catch (JSONException e) {} + try { + builder.a_pts = json.getInt("A_PTS"); + } catch (JSONException e) {} + try { + builder.b_pts = json.getInt("B_PTS"); + } catch (JSONException e) {} + try { + builder.c_pts = json.getInt("C_PTS"); + } catch (JSONException e) {} + try { + builder.d_pts = json.getInt("D_PTS"); + } catch (JSONException e) {} + try { + builder.e_pts = json.getInt("E_PTS"); + } catch (JSONException e) {} + try { + builder.f_pts = json.getInt("F_PTS"); + } catch (JSONException e) {} + try { + builder.g_pts = json.getInt("G_PTS"); + } catch (JSONException e) {} + try { + builder.length2 = json.getDouble("LENGTH2"); + } catch (JSONException e) {} + try { + builder.radius2 = json.getDouble("RADIUS2"); + } catch (JSONException e) {} + try { + builder.area2 = json.getDouble("AREA2"); + } catch (JSONException e) {} + + double[][] points; + try { + JSONArray jsonPoints = json.getJSONArray("POINTS"); + points = new double[jsonPoints.length()][2]; + for (int i = 0; i != jsonPoints.length(); ++i) { + JSONArray point = jsonPoints.getJSONArray(i); + points[i][0] = point.getInt(0); + points[i][1] = point.getInt(1); + } + } catch (JSONException e) { + System.out.println("Unable to load POINTS from input.json."); + return; + } + + int numpoints; + try { + numpoints = json.getInt("NUMPOINTS"); + } catch (JSONException e) { + numpoints = points.length; + } + + Parameters params = builder.build(numpoints); Connect[][] lcm = new Connect[15][15]; - for (int i = 0; i != 15; ++i) { - for (int j = 0; j != 15; ++j) { - lcm[i][j] = Connect.ANDD; + try { + JSONArray jsonLcm = json.getJSONArray("LCM"); + for (int i = 0; i != 15; ++i) { + JSONArray row = jsonLcm.getJSONArray(i); + for (int j = 0; j != 15; ++j) { + lcm[i][j] = row.getEnum(Connect.class, j); + } } + } catch (JSONException e) { + System.out.println("Unable to load LCM from input.json."); + return; } boolean[] puv = new boolean[15]; - for (int i = 0; i != 15; ++i) { - puv[i] = true; + try { + JSONArray jsonLcm = json.getJSONArray("PUV"); + for (int i = 0; i != 15; ++i) { + puv[i] = jsonLcm.getBoolean(i); + } + } catch (JSONException e) { + System.out.println("Unable to load PUV from input.json."); + return; } - Input input = new Input(points.length, points, params, lcm, puv); + Input input = new Input(numpoints, points, params, lcm, puv); System.out.println(Decide.decide(input)); } }