5 Commits

6 changed files with 133 additions and 9 deletions
+56 -6
View File
@@ -16,7 +16,6 @@ public class Main {
boolean help_enqueued = false; boolean help_enqueued = false;
boolean allow_networking = true; boolean allow_networking = true;
String matrix_file_name = ""; String matrix_file_name = "";
int verbosity = 1;
int p = 0; int p = 0;
while (p < args.length) { while (p < args.length) {
@@ -25,10 +24,6 @@ public class Main {
help_enqueued = true; help_enqueued = true;
p += 1; p += 1;
} }
else if (Objects.equals(args[p], "-v")) {
verbosity = Integer.parseInt(args[p+1]);
p += 2;
}
else if (Objects.equals(args[p], "--offline")) { else if (Objects.equals(args[p], "--offline")) {
allow_networking = false; allow_networking = false;
p += 2; p += 2;
@@ -59,9 +54,27 @@ public class Main {
if (allow_networking) { if (allow_networking) {
System.err.println("[WARN] File is missing, downloading random matrix from the server"); System.err.println("[WARN] File is missing, downloading random matrix from the server");
fetchResource("http://lab2.kpi.dev:16554/matrix.py", matrix_file_name); fetchResource("http://lab2.kpi.dev:16554/matrix.py", matrix_file_name);
} else {
System.err.println("[WARN] File is missing; networking is disabled, not recovering");
System.exit(1);
} }
} }
// loading matrix data from file
int[][] raw_m = loadMatrixFromFile(matrix_file);
// creating original matrix object
System.out.println("Original matrix:");
Matrix m = new Matrix();
m.init(raw_m);
// transposing
m.transpose();
System.out.println("\nTransposed matrix:");
m.print();
// avg
System.out.println("\nAverage value is " + m.getAvg());
} }
private static void fetchResource(String remote_url, String output_filename) { private static void fetchResource(String remote_url, String output_filename) {
@@ -97,7 +110,7 @@ public class Main {
Scanner help_file_scanner = new Scanner(help_file); Scanner help_file_scanner = new Scanner(help_file);
while (help_file_scanner.hasNextLine()) { while (help_file_scanner.hasNextLine()) {
System.out.print(help_file_scanner.nextLine()); System.out.println(help_file_scanner.nextLine());
} }
help_file_scanner.close(); help_file_scanner.close();
@@ -106,4 +119,41 @@ public class Main {
System.exit(1); System.exit(1);
} }
} }
private static int[][] loadMatrixFromFile(File matrix_file) {
try {
Scanner matrix_file_reader = new Scanner(matrix_file);
ArrayList<String> raw_matrix_lines = new ArrayList<String>();
while (matrix_file_reader.hasNextLine()) {
raw_matrix_lines.add(matrix_file_reader.nextLine());
}
ArrayList<String[]> baked_matrix_lines = new ArrayList<String[]>();
for (String s : raw_matrix_lines) {
baked_matrix_lines.add(s.split(" "));
}
int ref_length = baked_matrix_lines.get(0).length;
int[][] baked_matrix = new int[baked_matrix_lines.size()][ref_length];
for (int i = 0; i < baked_matrix_lines.size(); i++) {
if (baked_matrix_lines.get(i).length != ref_length) {
System.err.println("[ERROR] Matrix lines have different length! Assuming the matrix was corrupted");
System.exit(2);
}
for (int j = 0; j < baked_matrix_lines.get(i).length; j++) {
baked_matrix[i][j] = Integer.parseInt(baked_matrix_lines.get(i)[j]);
}
}
return baked_matrix;
} catch (Exception e) {
System.err.println("[ERROR] Failed to read matrix from file " + matrix_file.getName());
System.exit(1);
return new int[1][1];
}
}
} }
+63
View File
@@ -0,0 +1,63 @@
public class Matrix {
private int[][] m;
public void init(int[][] base_m) {
this.m = base_m;
}
public int[][] getMatrix() {
return this.m;
}
public void print() {
for (int[] ml : this.m) {
for (int e : ml) {
System.out.printf("%4d ", e);
}
System.out.println();
}
}
public void transpose() {
print();
if (this.m[0].length != this.m.length) {
int new_h = this.m[0].length;
int new_w = this.m.length;
int[][] new_m = new int[new_h][new_w];
for (int i = 0; i < this.m.length; i++) {
for (int j = 0; j < this.m[i].length; j++) {
new_m[j][i] = this.m[i][j];
}
}
this.m = new_m;
} else {
// if a matrix is square, there is no need to
// make a new one
int temp_value_holder;
for (int i = 0; i < this.m.length; i++) {
for (int j = 0; j < i; j++) {
temp_value_holder = this.m[i][j];
this.m[i][j] = this.m[j][i];
this.m[j][i] = temp_value_holder;
}
}
}
}
public double getAvg() {
double total = 0;
for (int[] ml : this.m) {
for (int e : ml) {
total += e;
}
}
return total / (this.m.length * this.m[0].length);
}
}
+4 -1
View File
@@ -1 +1,4 @@
Dummy help file Usage: java Main [options] [matrix_file]
Options:
-h Output this help text
--offline Prevent any possible attempt to fetch missing files from the server
+6
View File
@@ -0,0 +1,6 @@
#!/bin/sh
sed -i 's/int/double/g;s/prdouble/print/g;s/Integer.parseInt/Double.parseDouble/g;s/for (double i/for (int i/g;s/for (double j/for (int j/g;s/matrix.py/double-matrix.py/g;s/double p/int p/g;s/double bytesRead/int bytesRead/g;s/double ref_length/int ref_length/g;s/double new/int new/g;s/%4d/%4.3f/g' Matrix.java Main.java
javac Main.java Matrix.java
rm random_matrix.txt
+2
View File
@@ -0,0 +1,2 @@
import random
print("Content-Type: text/plain\n\n" + "\n".join([" ".join(list(map(str, [round((random.random()-0.5)*200, 4) for i in range(7)]))) for i in range(7)]))