2024-07-08 19:51:29 +02:00
|
|
|
import java.util.Arrays;
|
|
|
|
|
2024-06-23 20:31:59 +02:00
|
|
|
public class EscapeJava {
|
|
|
|
|
2024-07-08 19:51:29 +02:00
|
|
|
public static final int TIMES = 100;
|
|
|
|
public static final int SAMPLES = 100;
|
|
|
|
|
|
|
|
|
2024-06-23 20:31:59 +02:00
|
|
|
public static void main(String[] args) {
|
|
|
|
|
2024-07-08 19:51:29 +02:00
|
|
|
double[] collectedTimes = new double[TIMES];
|
2024-06-23 20:31:59 +02:00
|
|
|
|
2024-07-08 19:51:29 +02:00
|
|
|
for (int i = 0; i < TIMES; i++) {
|
|
|
|
long[] samples = new long[SAMPLES];
|
|
|
|
for (int j = 0; j < SAMPLES; j++) {
|
|
|
|
long start = System.nanoTime();
|
2024-06-23 20:31:59 +02:00
|
|
|
|
2024-07-08 19:51:29 +02:00
|
|
|
int[][] a = calculate(generateGrid(i), i);
|
|
|
|
|
|
|
|
long end = System.nanoTime();
|
|
|
|
|
|
|
|
long elapsed = end - start;
|
|
|
|
samples[j] = elapsed;
|
|
|
|
}
|
|
|
|
collectedTimes[i] = Arrays.stream(samples).mapToDouble(v -> v/10e9).min().orElse(-1);
|
|
|
|
}
|
|
|
|
Arrays.stream(collectedTimes).forEach(System.out::print);
|
2024-06-23 20:31:59 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
public static int escape(double cx, double cy, int maximum, double bounds) {
|
|
|
|
int i = 0;
|
|
|
|
double x = 0;
|
|
|
|
double y = 0;
|
|
|
|
|
|
|
|
while (Math.sqrt(x * x + y * y) < bounds && i < maximum) {
|
|
|
|
y = 2 * x * y + cy;
|
|
|
|
x = x * x - y * y + cx;
|
|
|
|
i++;
|
|
|
|
}
|
|
|
|
return i;
|
|
|
|
}
|
|
|
|
|
|
|
|
static class Complex {
|
|
|
|
public double real;
|
|
|
|
public double imag;
|
|
|
|
|
|
|
|
Complex(double real, double imag) {
|
|
|
|
this.real = real;
|
|
|
|
this.imag = imag;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
public static Complex[][] generateGrid(int n) {
|
|
|
|
Complex[][] grid = new Complex[n][n];
|
|
|
|
for (int yi = 0; yi < n; yi++) {
|
|
|
|
for (int xi = 0; xi < n; xi++) {
|
|
|
|
double cx = -2.0 + (4.0/n) * xi;
|
|
|
|
double cy = -2.0 + (4.0/n) * yi;
|
|
|
|
|
|
|
|
grid[yi][xi] = new Complex(cx, cy);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return grid;
|
|
|
|
}
|
|
|
|
|
|
|
|
public static int[][] calculate(Complex[][] grid, int n) {
|
|
|
|
int[][] results = new int[n][n];
|
|
|
|
for (int yi = 0; yi < n; yi++) {
|
|
|
|
for (int xi = 0; xi < n; xi++) {
|
|
|
|
Complex c = grid[yi][xi];
|
|
|
|
results[yi][xi] = escape(c.real, c.imag, 10, 2);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return results;
|
|
|
|
}
|
|
|
|
}
|