een heel eind gekomen

This commit is contained in:
Shautvast 2024-11-07 22:24:54 +01:00
commit e396b1ce39
11 changed files with 1435 additions and 0 deletions

35
.gitignore vendored Normal file
View file

@ -0,0 +1,35 @@
target/
!.mvn/wrapper/maven-wrapper.jar
!**/src/main/**/target/
!**/src/test/**/target/
### IntelliJ IDEA ###
.idea/
*.iws
*.iml
*.ipr
### Eclipse ###
.apt_generated
.classpath
.factorypath
.project
.settings
.springBeans
.sts4-cache
### NetBeans ###
/nbproject/private/
/nbbuild/
/dist/
/nbdist/
/.nb-gradle/
build/
!**/src/main/**/build/
!**/src/test/**/build/
### VS Code ###
.vscode/
### Mac OS ###
.DS_Store

25
pom.xml Normal file
View file

@ -0,0 +1,25 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.github.shautvast.exceptional</groupId>
<artifactId>avalor</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<maven.compiler.source>22</maven.compiler.source>
<maven.compiler.target>22</maven.compiler.target>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>

View file

@ -0,0 +1,103 @@
package assessment;
import java.util.ArrayList;
import java.util.List;
import java.util.PriorityQueue;
public class BestPathFinder {
private final static double timeDistanceFactor = .2;
private static Path max;
private final static PriorityQueue<Path> paths = new PriorityQueue<>();
private static volatile boolean running = true;
/**
* @param g het Grid (vierkant)
* @param N grootte van het Grid
* @param t totaal aantal discrete tijdstappen
* @param T maximale tijdsduur
* @param x startpositie X
* @param y startpositie Y
* @return het meest waardevole pad
*/
public static Path findMaxValPath(Grid g, int N, int t, int T, int x, int y) {
Path path = Path.newPath(g, x, y);
paths.add(path);
max = path;
// start looping until T is reached or all paths have been considered
while (running && !paths.isEmpty()) {
// take current highest ranking path
path = paths.peek();
assert path != null;
while (path.length() > t) {
// dit pad heeft lengte t bereikt
paths.poll(); // geen nieuwe paden op basis van deze, we pakken de vorige in waardering
// heeft dit pad meer waarde dan de huidige max ?
if (path.value() > max.value()) {
max = path;
}
}
// find best new directions
List<Point> newPointsFromHere = new ArrayList<>();
if (y > 0) {
newPointsFromHere.add(new Point(x, y - 1, getValueFromGrid(g, path, x, y - 1)));
if (x < N - 1)
newPointsFromHere.add(new Point(x + 1, y - 1, getValueFromGrid(g, path, x + 1, y - 1)));
}
if (x > 0) {
newPointsFromHere.add(new Point(x - 1, y, getValueFromGrid(g, path, x - 1, y)));
if (y > 0)
newPointsFromHere.add(new Point(x - 1, y - 1, getValueFromGrid(g, path, x - 1, y - 1)));
}
if (x < N - 1) {
newPointsFromHere.add(new Point(x + 1, y, getValueFromGrid(g, path, x + 1, y)));
if (y < N - 1)
newPointsFromHere.add(new Point(x + 1, y + 1, getValueFromGrid(g, path, x + 1, y + 1)));
}
if (y < N - 1) {
newPointsFromHere.add(new Point(x, y + 1, getValueFromGrid(g, path, x, y + 1)));
if (x > 0)
newPointsFromHere.add(new Point(x - 1, y + 1, getValueFromGrid(g, path, x - 1, y + 1)));
}
// sort the new points in descending order of value
newPointsFromHere.sort(Point::compareTo);
double max = newPointsFromHere.getFirst().value;
for (Point p : newPointsFromHere) {
// create a new Path based on the current
Path newPath = path.copy();
// add the new point
newPath.add(g, p);
// stop adding points once their value decreases
if (p.value < max) {
break;
}
}
}
return max;
}
/**
* de waarde van een punt x,y wordt bepaald door de beginwaarde
* tenzij we er al geweest zijn
* dan telt de tijd sinds we er geweest zijn
* = afstand in sindsdien afgelegd pad
* de waarde is rechtevenredig met de afstand
*/
private static double getValueFromGrid(Grid grid, Path path, int x, int y) {
int gridValue = grid.get(x, y);
if (path.hasPoint(x, y)) {
// been there
int distanceInPath = path.getDistanceInPath(x, y);
double increment = gridValue / timeDistanceFactor;
return Math.max((distanceInPath - 1) * increment, gridValue);
} else {
return gridValue;
}
}
}

View file

@ -0,0 +1,38 @@
package assessment;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
public record Grid(List<List<Integer>> grid) {
public static Grid fromFile(String resource) {
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(Grid.class.getClassLoader().getResourceAsStream(resource)));
String line;
List<List<Integer>> rows = new ArrayList<>();
while ((line=reader.readLine())!=null){
String[] values = line.split(" ");
List<Integer> row = new ArrayList<>(values.length);
for (int i = 0; i < values.length; i++) {
row.add(Integer.parseInt(values[i]));
}
rows.add(row);
}
return new Grid(rows);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public int get(int r, int c){
return grid.get(r).get(c);
}
//assumes square
public int getWidth(){
return grid.size();
}
}

View file

@ -0,0 +1,63 @@
package assessment;
import java.util.ArrayList;
import java.util.HashSet;
public class Path implements Comparable<Path> {
// beide bevatten de al afgelegde punten
// points is bedoeld om door de punten te lopen
private final ArrayList<Point> points = new ArrayList<>();
// trodden is bedoeld om zo snel mogelijk vast te stellen of we al op het punt geweest zijn
private final HashSet<Integer> trodden = new HashSet<>();
private Path() {
}
static Path newPath(Grid g, int x, int y) {
Path p = new Path();
newPath(g, x, y);
return p;
}
public void add(Grid g, Point point) {
points.add(point);
trodden.add(point.y * g.getWidth() + point.x);
}
public Double value() {
return points.stream().mapToDouble(point -> point.value).sum();
}
@Override
public int compareTo(Path o) {
return this.value().compareTo(o.value());
}
public int length() {
return points.size();
}
boolean hasPoint(int x, int y) {
return trodden.contains(x * y);
}
int getDistanceInPath(int x, int y) {
for (int i = points.size() - 1; i >= 0; i++) {
if (points.get(i).x == x && points.get(i).y == y) {
return points.size() - i;
}
}
return -1;
}
public Path copy(){
Path p = new Path();
p.points.addAll(points);
p.trodden.addAll(trodden);
return p;
}
}

View file

@ -0,0 +1,19 @@
package assessment;
public class Point implements Comparable<Point> {
final int x;
final int y;
final double value;
public Point(int x, int y, double value) {
this.x = x;
this.y = y;
this.value = value;
}
@Override
public int compareTo(Point that) {
return -Double.compare(this.value, that.value);
}
}

View file

@ -0,0 +1,100 @@
7 4 7 9 8 9 0 2 10 9 6 10 5 5 1 9 0 4 3 0 5 10 6 3 10 3 0 4 4 6 8 0 3 6 1 0 2 7 7 3 1 0 9 10 2 9 5 0 2 0 1 4 10 8 8 0 4 4 3 9 6 6 2 9 9 5 2 2 10 4 2 6 10 0 10 6 3 4 7 8 9 7 5 5 10 9 8 5 2 10 2 4 9 1 0 1 7 7 3 9
3 6 7 9 5 3 7 9 9 2 1 8 9 5 1 9 5 3 4 10 4 1 3 1 2 10 8 6 7 10 1 10 0 0 4 10 4 6 4 0 4 10 9 6 7 8 5 1 1 6 6 8 8 7 6 5 7 8 6 4 6 5 9 8 4 5 5 9 10 4 3 5 10 1 7 0 8 1 1 3 8 6 4 2 8 9 10 3 6 2 10 3 6 6 5 8 7 10 2 1
2 1 8 10 2 4 3 8 10 0 7 9 4 5 5 3 9 2 7 2 10 1 0 0 4 2 2 10 6 2 0 5 10 6 9 6 0 4 3 0 4 6 7 1 7 5 9 6 10 6 3 6 2 3 8 5 10 5 10 0 10 6 2 7 3 1 8 1 4 1 7 3 3 6 10 9 1 0 2 10 6 2 1 2 7 8 8 4 9 6 5 2 2 9 3 10 3 3 2 4
3 4 4 0 6 2 0 5 9 0 4 0 9 8 8 0 10 9 8 2 0 10 3 3 6 0 10 3 0 3 6 2 2 8 4 9 4 6 2 7 0 7 3 7 10 7 6 4 5 9 5 10 7 9 8 6 1 0 4 9 8 2 3 1 7 5 7 8 6 5 9 8 5 10 7 2 8 7 5 0 7 4 8 3 0 6 2 7 0 1 10 4 7 9 3 10 8 10 1 0
7 2 3 0 5 5 9 5 3 10 5 3 2 1 5 2 0 2 7 6 0 5 0 5 8 2 7 1 2 4 2 3 4 7 7 8 3 1 10 3 2 8 2 6 0 10 9 10 7 0 7 3 0 5 0 6 1 4 4 7 1 0 0 4 5 1 1 2 2 5 9 5 6 6 6 7 0 3 10 4 4 0 6 0 6 10 5 0 8 8 3 2 3 6 9 3 4 8 9 5
2 9 6 3 7 2 5 7 3 7 8 10 10 6 1 9 3 6 1 7 2 2 7 6 9 10 5 7 10 0 3 4 2 3 5 4 10 0 6 2 3 5 2 2 0 9 2 6 5 10 3 0 9 3 3 2 2 2 2 3 7 0 9 6 4 4 7 3 0 10 0 2 2 4 4 1 1 1 3 1 4 5 1 9 5 2 7 3 7 7 2 4 6 8 6 2 6 8 5 1
2 3 1 0 0 5 6 8 3 2 8 9 3 7 3 0 7 2 2 0 7 2 1 5 9 4 4 6 6 2 9 6 7 1 9 2 9 3 0 2 8 1 2 8 5 6 10 8 6 4 5 7 10 4 10 8 4 7 10 7 3 1 9 2 6 7 9 5 7 1 10 10 3 2 6 10 5 0 3 5 7 9 2 7 0 0 3 10 8 8 5 7 2 9 2 1 0 5 0 4
4 5 2 5 0 2 4 1 8 0 2 0 7 1 1 7 1 9 0 2 1 3 4 2 0 10 7 6 3 7 6 5 0 10 2 4 1 7 1 10 1 8 2 10 8 6 2 7 5 1 8 9 6 7 10 8 8 1 8 4 3 8 8 5 5 1 5 3 7 6 0 1 8 6 8 4 0 9 6 4 0 10 10 0 10 10 7 6 5 2 3 6 2 4 2 6 8 4 9 3
8 5 4 0 10 6 8 3 0 4 8 4 9 1 2 8 0 5 7 9 5 8 1 1 0 7 9 1 8 3 9 9 10 4 6 1 3 0 3 6 4 4 9 8 4 9 3 5 9 3 0 9 8 10 2 2 6 6 3 7 9 1 5 3 4 8 2 5 10 6 9 9 9 2 6 6 1 3 1 3 10 10 8 9 3 3 1 0 6 1 3 9 4 4 10 4 4 7 2 0
6 4 2 4 9 3 8 8 7 4 3 0 10 2 6 0 9 10 5 5 7 0 6 8 7 7 8 0 2 3 5 6 7 6 9 3 9 8 2 7 8 2 3 9 0 2 4 0 8 6 2 7 7 3 7 0 6 2 4 10 3 5 5 6 7 2 1 6 6 0 2 1 9 7 1 9 2 9 10 0 3 5 1 5 6 2 8 10 1 8 10 10 7 0 6 0 0 8 4 3
9 5 8 2 0 3 8 6 4 8 6 1 0 1 0 3 4 0 1 5 10 5 9 5 4 3 1 8 7 4 2 6 0 1 3 10 1 7 0 10 2 3 3 8 4 8 2 7 3 8 0 8 7 2 5 10 1 8 3 10 4 7 4 2 0 10 4 3 3 1 5 9 10 7 1 10 10 3 2 6 4 4 10 2 10 3 3 2 8 6 6 8 1 6 0 7 2 2 0 1
1 7 2 1 10 10 4 2 2 10 1 6 7 3 8 9 3 4 1 3 4 10 10 0 10 7 9 5 3 0 2 4 9 3 8 3 6 4 8 10 8 8 9 0 0 1 9 0 4 7 5 1 7 7 10 5 1 9 1 1 5 10 5 6 7 0 7 10 3 3 4 9 5 0 2 7 9 6 8 10 1 6 5 3 1 7 0 0 9 5 10 10 7 7 8 7 7 9 5 5
4 4 6 10 3 9 7 3 2 5 2 8 8 9 7 1 7 3 5 2 9 2 1 2 9 8 8 4 10 2 1 10 5 5 0 2 2 7 7 10 2 2 5 1 1 8 6 6 2 7 3 3 7 8 0 6 3 3 6 10 1 8 2 8 6 2 4 0 8 2 7 6 8 5 1 4 9 10 3 5 5 5 9 7 1 1 9 10 8 4 6 0 9 2 10 2 3 7 2 2
2 1 2 7 1 0 1 9 3 5 9 10 3 8 2 7 3 0 5 8 2 9 8 10 6 8 8 2 6 8 7 2 4 4 3 2 9 6 3 8 4 2 0 5 0 9 9 3 1 1 7 7 9 5 9 3 10 8 1 6 4 1 10 3 4 3 6 5 5 9 1 8 2 4 5 0 0 6 6 2 6 2 5 2 4 5 5 10 5 6 0 5 7 7 3 4 3 5 10 7
9 8 3 8 3 8 0 8 0 10 2 1 1 1 10 5 1 8 8 0 5 6 3 0 2 7 4 10 3 6 8 7 9 3 1 6 3 8 0 8 10 10 2 4 10 5 5 6 4 2 2 5 7 9 10 5 2 5 5 1 3 7 4 7 2 4 10 2 2 8 9 8 1 4 0 3 9 0 3 0 3 4 3 9 7 10 1 3 9 10 8 0 9 5 4 5 8 5 10 4
0 5 4 4 9 10 8 6 5 0 10 9 7 8 5 3 4 1 6 6 9 6 3 7 2 8 3 6 10 3 4 3 4 2 0 0 5 0 7 8 0 10 2 4 9 6 8 5 0 8 3 2 6 6 0 0 10 2 3 1 10 3 4 4 3 5 1 8 5 0 6 8 1 1 2 3 0 8 2 6 1 7 2 1 5 7 9 3 6 6 8 8 7 5 0 1 2 4 1 0
2 7 2 3 6 7 4 4 10 4 10 8 10 4 10 10 8 8 5 1 10 8 3 7 1 5 8 10 6 0 7 2 10 10 2 5 2 1 4 9 6 9 3 9 9 8 0 5 4 9 8 8 7 0 1 2 8 2 6 10 3 6 0 8 3 7 2 0 3 10 7 2 1 8 8 10 7 7 3 10 0 7 9 6 0 1 9 0 8 1 8 8 6 10 10 7 4 0 1 10
0 9 2 10 5 9 9 9 8 2 2 10 0 10 8 0 3 5 2 7 2 6 2 4 8 5 10 1 1 5 7 7 0 8 1 8 4 0 6 5 8 8 4 8 10 9 3 0 7 10 10 0 8 8 7 10 9 3 2 1 10 2 0 4 7 6 3 6 4 8 10 9 5 3 7 4 5 4 7 9 0 8 7 8 9 1 3 10 9 6 10 10 0 0 2 1 5 3 8 1
2 6 1 5 6 3 1 10 4 4 1 6 9 8 4 6 10 3 2 7 7 9 2 9 4 7 9 9 7 8 8 3 0 1 7 9 8 8 6 4 7 5 5 0 0 1 2 2 6 6 1 2 5 1 8 0 3 4 4 2 5 3 8 2 0 6 6 0 4 5 8 9 4 10 6 4 4 9 3 9 9 3 2 5 5 0 5 1 8 4 5 1 9 1 5 0 10 0 9 4
1 9 4 5 10 4 0 6 5 1 0 1 8 4 9 0 9 0 7 10 9 0 6 4 6 10 6 0 6 10 6 3 9 1 10 10 1 8 1 8 0 4 6 10 5 7 4 2 9 3 7 1 4 1 5 0 2 6 0 4 4 3 6 5 9 4 3 6 9 3 8 9 7 4 5 5 8 1 4 6 3 10 2 0 0 5 1 3 9 8 5 6 2 6 10 7 5 10 5 2
7 8 9 2 8 6 3 3 5 1 3 0 10 4 4 6 3 7 8 7 4 4 2 0 4 3 10 2 5 5 7 1 2 4 5 7 8 10 10 9 1 8 7 9 10 10 2 0 2 8 0 4 8 7 10 10 0 6 6 10 5 2 3 6 1 9 1 1 6 8 5 1 9 8 7 0 7 6 2 5 8 2 4 8 5 8 0 9 7 4 3 7 9 9 4 9 5 9 6 10
9 5 1 2 2 0 8 2 7 0 2 5 1 5 5 3 0 4 2 10 0 2 0 5 10 9 3 5 7 8 10 0 8 6 4 5 10 1 0 10 10 8 2 0 9 6 1 4 0 9 7 7 0 0 3 0 5 8 9 0 10 2 6 8 10 4 6 5 1 10 3 9 9 7 9 0 5 8 10 6 10 5 9 7 6 3 4 1 9 2 5 7 3 0 10 5 2 10 8 10
10 1 0 3 3 7 2 6 9 7 7 5 3 2 8 10 4 9 6 8 5 6 1 7 6 5 4 4 0 6 10 6 1 1 7 8 7 0 8 4 10 9 5 7 9 5 8 4 9 1 4 6 3 6 1 9 5 3 3 1 0 1 8 2 7 6 8 3 4 4 3 10 0 8 1 2 5 2 1 10 2 1 9 10 3 5 2 4 6 5 6 7 7 2 6 5 1 1 3 7
1 5 9 0 3 5 0 1 3 10 1 9 1 5 9 8 8 8 5 0 0 3 2 3 9 8 2 5 9 2 0 0 2 2 0 0 4 0 8 6 6 0 4 10 6 1 1 8 0 7 7 0 7 6 6 6 2 8 0 7 1 10 0 3 9 2 9 2 10 9 1 4 10 8 4 6 8 6 7 2 10 10 0 6 5 1 4 9 4 2 10 2 8 10 3 9 5 7 1 3
7 10 8 5 3 10 2 5 10 4 9 8 0 1 3 7 8 7 5 9 0 10 10 2 2 4 2 1 10 8 0 10 2 7 7 6 2 5 10 4 7 5 1 8 7 0 5 9 9 5 2 2 3 0 0 3 10 4 10 10 3 7 9 0 8 4 3 2 10 6 1 10 0 6 0 9 2 6 8 9 7 5 6 10 9 9 7 7 7 9 2 0 7 7 10 5 5 8 6 0
4 2 5 5 9 0 6 10 9 8 8 7 4 9 10 10 2 0 1 2 5 8 8 7 7 3 7 3 10 9 8 8 2 6 0 10 7 8 4 5 5 9 7 4 3 1 2 0 8 4 7 6 6 10 5 6 0 8 10 6 1 8 7 8 6 9 3 3 7 9 0 3 7 7 2 6 9 4 7 2 10 0 2 9 3 0 4 2 9 4 10 10 9 9 9 9 0 2 2 7
8 2 9 5 2 4 8 1 10 9 6 1 0 9 3 8 9 2 3 0 8 5 8 8 0 3 3 3 0 7 5 1 10 1 8 1 5 7 7 3 3 7 0 4 9 2 8 9 4 3 10 3 0 2 0 4 6 0 8 4 6 1 1 9 6 6 0 2 4 1 0 2 3 7 8 0 8 2 8 7 6 0 4 6 9 7 10 1 6 2 4 2 8 0 3 8 4 3 2 9
3 8 1 3 1 2 4 4 4 3 9 2 5 5 8 3 4 3 0 7 10 1 7 8 4 10 2 5 4 0 6 4 10 0 4 6 0 1 6 1 10 8 8 5 3 10 10 5 7 1 1 6 4 6 3 0 5 8 5 2 4 7 9 2 2 4 0 6 6 1 2 0 7 7 8 7 8 3 3 10 5 10 1 3 7 6 9 3 8 7 2 2 9 9 8 8 5 0 6 8
1 10 6 5 1 10 4 3 6 3 7 9 7 1 0 7 7 10 5 3 2 0 8 1 3 3 5 0 6 2 2 8 9 2 9 6 2 8 5 0 8 8 1 3 8 4 8 2 10 8 2 7 3 9 8 5 10 6 8 3 9 6 4 2 7 2 3 5 3 1 8 5 1 9 0 7 3 8 2 0 4 9 7 7 4 0 10 0 2 7 0 9 10 6 7 1 5 2 3 8
1 4 7 2 5 8 1 5 9 4 4 3 7 7 9 3 4 7 4 10 0 1 6 6 5 6 3 10 0 0 4 4 1 9 10 9 1 8 5 10 1 8 10 8 3 8 2 10 7 6 9 2 5 5 0 9 9 7 10 6 9 1 10 6 7 6 2 3 1 4 1 3 10 6 10 4 8 9 8 10 0 10 5 4 8 4 4 1 0 6 6 2 10 8 8 4 3 0 4 3
2 1 9 8 7 1 1 5 1 3 9 2 10 1 0 3 10 6 9 4 4 9 7 8 5 9 8 4 10 6 2 10 8 6 5 0 10 7 3 1 3 7 0 6 1 6 2 10 10 10 10 3 8 0 8 7 3 10 2 4 6 9 1 10 7 7 6 6 9 8 7 10 10 9 1 1 9 0 4 0 7 5 4 4 2 7 1 3 0 9 4 4 4 5 2 2 1 9 0 10
4 7 5 1 7 1 0 2 0 6 7 9 1 8 0 4 3 5 6 9 8 9 2 5 9 10 8 5 0 3 6 2 2 7 8 3 2 5 2 1 3 10 10 2 5 1 3 4 10 5 5 6 1 2 10 2 3 4 9 5 1 4 3 7 5 4 10 1 1 10 7 4 8 4 4 8 1 4 3 10 6 5 4 2 0 3 3 3 2 3 0 10 5 7 6 1 5 10 5 8
0 10 0 0 7 4 6 9 2 6 1 8 9 9 7 3 9 9 0 7 5 8 3 5 7 8 9 3 10 2 6 8 1 9 0 2 1 5 10 1 8 2 1 2 0 4 8 6 9 7 6 2 8 6 3 7 5 7 8 1 4 3 5 3 2 2 10 6 2 6 9 6 6 2 8 4 9 10 6 4 6 8 7 2 2 9 0 4 6 2 1 4 0 8 7 7 8 0 4 6
2 6 5 3 8 6 9 5 1 9 8 4 5 0 10 3 8 2 6 1 8 1 8 2 4 3 4 7 1 4 9 3 1 5 7 6 2 4 1 4 3 2 4 8 8 0 3 5 0 5 1 4 3 5 6 10 6 7 6 10 10 1 4 0 1 2 0 8 0 3 5 10 8 4 1 9 1 2 3 6 0 1 0 3 5 2 6 1 5 1 7 1 2 8 6 5 3 6 2 7
6 6 5 7 1 2 3 7 5 7 5 2 1 3 9 5 7 6 2 2 5 9 2 1 2 10 0 9 4 4 0 10 9 4 1 5 2 10 1 7 8 8 3 1 8 8 9 6 10 5 2 9 3 10 5 3 4 0 3 10 4 6 4 10 3 6 1 7 5 5 10 0 8 1 3 4 2 2 9 2 1 7 0 3 8 6 0 1 1 0 4 5 9 1 7 5 4 1 8 3
9 8 9 4 8 3 3 4 10 2 3 6 6 8 7 10 7 6 6 7 10 8 8 9 6 6 8 1 0 4 5 1 8 8 0 6 3 3 2 8 5 2 8 4 7 10 3 10 10 5 3 7 1 7 9 8 9 8 0 3 1 2 8 9 8 5 2 7 8 6 3 0 7 1 7 6 5 10 1 6 0 5 9 3 10 0 1 1 3 9 7 3 6 10 0 3 8 2 0 5
4 9 10 2 0 2 3 8 1 3 2 1 1 2 7 7 9 10 5 6 7 1 5 1 0 2 9 5 1 10 7 7 6 10 8 0 8 1 2 5 7 7 6 6 6 10 1 1 6 1 7 2 5 9 2 8 7 9 1 2 2 5 4 9 6 10 5 10 0 4 3 9 0 3 4 6 7 3 0 8 4 9 9 9 9 9 10 1 6 1 5 6 5 1 1 4 9 7 3 1
3 5 4 1 1 10 2 2 6 10 6 4 6 5 4 10 0 9 2 7 8 4 7 0 5 1 3 3 8 1 2 7 4 2 8 7 1 8 7 8 1 6 0 1 5 6 7 4 10 9 3 7 8 9 8 0 3 7 2 1 5 2 0 9 10 2 5 0 5 9 5 2 4 8 9 9 9 2 8 0 7 5 10 0 8 0 1 6 3 1 6 2 3 4 1 8 0 2 6 9
10 8 7 5 4 3 8 2 10 7 1 4 9 3 2 4 5 10 0 5 4 8 1 5 4 6 10 7 7 4 4 7 2 7 7 10 8 9 5 6 7 6 1 9 0 3 8 4 8 7 2 7 1 1 10 4 9 10 5 4 7 1 3 10 1 10 1 0 3 9 6 5 5 10 6 7 10 4 0 6 1 2 6 9 2 4 9 7 8 2 7 10 4 7 10 10 0 5 2 7
8 9 6 4 1 3 7 1 0 6 5 2 0 9 3 0 1 5 9 10 0 10 2 3 4 4 3 9 3 5 6 7 8 1 10 5 6 9 2 9 9 5 3 5 9 7 7 4 4 4 10 0 1 0 9 1 3 8 6 1 3 1 10 5 8 9 7 1 1 5 8 7 5 10 2 4 10 8 1 4 6 9 10 3 1 9 3 8 6 8 1 2 4 2 3 0 7 6 9 2
3 7 0 1 4 8 2 7 7 7 4 10 5 8 7 10 4 0 3 4 7 10 8 0 9 4 9 5 2 8 4 6 4 6 7 10 5 2 8 6 3 3 7 5 6 0 10 7 0 7 9 10 9 3 8 2 10 7 4 1 6 9 3 8 6 1 8 10 4 4 0 9 3 10 7 1 8 9 7 1 6 6 3 2 10 1 1 3 0 2 7 3 5 1 5 9 7 3 0 1
0 8 0 7 4 7 1 1 1 7 4 2 6 9 2 5 3 5 5 10 1 2 10 8 0 6 2 8 0 3 10 2 5 7 8 8 5 4 0 4 3 5 9 9 2 0 2 3 5 0 8 0 5 0 0 8 1 6 10 6 3 2 6 8 8 6 5 7 4 7 7 2 2 8 2 3 8 3 5 2 8 1 0 3 5 6 4 10 2 4 7 9 8 3 1 6 5 2 5 2
7 6 4 6 4 10 0 5 2 2 6 10 10 9 7 2 7 1 9 4 0 6 9 5 9 0 8 9 8 10 10 5 3 0 6 6 9 6 9 5 7 0 5 7 2 2 1 4 1 5 8 6 5 0 5 1 2 8 3 3 2 7 6 9 6 9 3 10 4 1 2 2 8 6 4 2 3 5 3 1 2 9 7 0 1 9 9 0 0 10 0 2 5 0 2 9 5 8 7 5
8 10 9 0 2 1 7 3 9 2 7 3 4 1 6 2 9 1 9 4 3 7 6 8 5 6 0 10 0 10 5 9 2 5 8 0 10 2 0 6 7 5 2 1 1 1 10 8 6 9 8 0 9 4 4 3 5 4 0 1 6 0 0 8 8 0 1 8 6 6 4 5 7 8 1 3 3 3 4 9 6 2 10 10 3 9 8 4 10 0 10 6 10 10 8 9 3 7 10 5
7 2 5 6 1 3 8 1 8 0 10 3 7 4 4 0 4 9 7 10 0 8 5 6 10 6 10 4 8 0 0 10 3 10 0 8 7 8 4 2 7 6 0 0 5 0 7 8 2 4 3 6 7 10 3 9 8 0 10 2 5 1 3 8 1 2 1 8 2 1 4 7 3 5 0 10 0 8 8 9 8 8 9 4 9 2 4 10 10 8 2 9 7 8 9 5 0 5 5 3
5 10 1 8 5 1 9 4 1 3 6 4 1 4 7 10 9 9 4 2 4 6 9 2 0 1 6 5 4 5 8 3 1 2 5 6 2 9 4 2 9 1 4 1 0 7 5 2 10 2 10 2 9 10 8 8 10 10 1 7 0 5 5 8 9 6 1 3 7 9 4 9 7 8 6 5 5 5 5 2 3 7 1 5 10 10 0 3 3 0 1 7 7 9 6 8 10 4 3 3
10 3 2 6 10 1 2 7 8 6 1 0 1 10 2 4 4 2 7 2 3 1 5 10 2 7 6 2 3 3 4 9 5 1 1 8 2 9 8 10 3 10 8 10 2 5 2 7 0 9 8 9 3 0 7 0 6 8 6 10 5 2 9 7 8 9 1 3 10 9 4 7 1 8 0 4 10 4 7 1 8 4 10 3 1 2 7 2 7 0 5 9 4 9 8 7 4 3 1 8
4 7 7 4 9 3 0 4 3 9 6 8 8 1 6 5 6 0 1 6 4 4 7 3 8 8 6 4 2 7 6 5 9 1 7 9 7 1 4 6 2 2 4 3 2 8 2 4 9 10 9 4 7 2 3 6 3 0 9 5 6 9 8 7 8 10 5 3 1 8 6 1 7 4 6 5 10 5 6 4 0 2 5 1 2 5 9 10 2 4 7 10 2 6 1 5 1 3 9 0
8 3 0 1 5 3 8 2 0 0 1 7 5 2 4 3 10 6 10 7 3 0 1 4 2 0 5 9 6 7 2 9 8 9 8 8 8 7 1 2 1 0 6 3 7 9 5 7 10 4 7 3 8 1 7 0 7 10 9 9 5 3 2 2 9 8 8 3 6 4 2 7 7 3 10 6 8 8 9 6 1 3 9 3 6 1 5 1 0 10 3 3 0 8 8 4 7 7 0 7
7 9 10 10 6 6 4 0 8 4 3 10 4 9 2 4 2 6 3 6 1 1 2 10 6 4 10 1 0 0 6 8 3 5 1 1 9 1 2 7 8 0 6 1 10 8 10 8 1 1 9 10 1 0 2 6 5 0 7 10 7 10 8 7 10 7 1 6 6 10 8 7 0 10 2 10 1 3 1 10 0 6 8 7 9 10 3 9 8 9 0 6 2 1 0 10 7 7 1 4
9 2 1 5 1 2 0 6 2 10 5 6 9 0 1 1 3 2 2 2 4 5 4 7 3 3 10 2 10 8 0 3 5 1 1 6 0 8 2 1 0 6 6 5 5 3 8 9 1 0 5 6 5 7 4 1 4 2 1 7 5 7 8 10 7 3 0 9 8 1 7 3 7 2 9 3 6 7 1 8 10 0 10 9 0 6 7 4 8 6 4 2 4 7 3 9 0 4 0 2
7 6 0 7 9 3 4 7 7 4 1 4 4 9 3 2 2 6 10 8 1 3 8 5 2 9 3 9 10 0 10 10 4 9 3 6 7 7 0 2 2 3 3 6 3 7 0 8 9 6 5 4 10 10 9 6 7 2 10 6 9 1 0 9 4 3 0 10 3 4 2 9 4 8 2 8 6 2 10 10 5 8 3 10 8 10 4 5 0 6 5 5 5 9 6 4 3 6 10 10
6 6 9 9 1 8 8 2 10 3 1 8 3 10 1 5 0 3 4 6 1 7 7 7 10 7 2 0 8 9 1 7 8 1 7 4 9 1 7 1 5 8 9 9 8 6 7 0 10 8 4 2 8 0 5 1 7 2 1 5 2 1 1 10 10 1 4 10 5 8 7 10 8 5 2 1 1 3 8 1 3 5 10 0 7 10 6 7 3 7 0 9 5 10 0 0 2 3 7 7
4 7 10 7 1 8 5 3 8 0 1 6 4 3 4 5 0 6 0 5 0 3 8 6 2 3 3 5 3 10 9 1 2 1 2 6 7 6 2 0 9 9 1 2 10 7 4 0 10 10 6 4 0 5 6 9 7 0 3 4 5 3 10 9 7 3 8 1 8 7 6 5 9 5 6 10 9 3 2 0 10 1 1 10 9 1 9 10 4 0 8 4 10 1 7 8 1 7 9 10
8 4 1 1 4 4 9 1 4 6 0 1 10 3 4 10 1 5 1 3 2 10 0 9 5 2 7 6 3 0 3 9 10 5 1 4 0 3 6 7 6 8 10 7 2 4 10 7 9 2 10 8 1 9 3 10 9 4 1 8 9 8 0 3 8 5 9 9 8 8 8 10 8 8 7 7 6 5 10 10 6 9 2 10 7 5 5 1 9 7 10 2 1 4 4 0 1 4 1 4
3 3 0 9 2 2 7 8 6 0 3 5 6 3 10 8 8 8 9 0 6 5 3 10 1 2 8 7 10 10 1 1 0 9 10 9 5 5 7 7 10 1 0 10 7 6 6 9 3 6 3 5 5 6 2 7 10 6 10 0 1 4 8 9 2 0 1 3 10 2 3 4 3 4 5 8 10 6 1 10 1 5 1 9 4 5 1 2 4 6 9 4 0 4 9 7 1 2 6 5
8 3 2 4 5 3 2 2 3 1 6 4 10 9 3 3 10 6 3 4 10 2 6 5 6 6 7 8 6 10 2 8 2 10 9 7 9 7 0 7 6 3 3 10 9 10 7 0 2 6 10 5 9 2 7 0 5 4 8 1 1 6 2 4 7 6 1 10 2 3 2 10 10 8 5 0 9 2 1 7 2 3 6 3 6 9 0 4 2 4 9 9 3 4 8 8 8 7 7 9
10 8 0 0 9 8 10 9 0 4 2 6 3 0 8 1 0 7 4 9 8 4 9 8 2 6 7 1 10 2 5 8 3 10 0 2 7 7 5 8 1 9 4 4 0 6 6 3 0 5 9 2 4 10 1 0 0 6 5 0 1 3 10 5 4 1 4 6 1 7 1 1 9 1 3 9 5 1 1 6 4 9 7 9 9 5 7 0 9 4 7 6 9 2 9 9 9 7 5 7
9 2 8 7 8 6 9 3 8 9 9 8 2 1 1 7 6 1 10 9 0 3 7 10 7 1 1 9 1 10 1 0 3 9 0 2 9 10 9 9 9 1 8 10 8 1 2 2 10 5 3 7 3 7 4 8 9 10 6 6 2 10 1 2 7 6 5 10 3 8 6 10 10 8 0 5 9 9 1 10 8 3 3 3 2 6 3 3 7 1 3 6 8 6 3 10 1 9 9 4
3 3 1 3 8 6 8 10 6 5 1 6 7 8 10 1 8 4 4 10 1 10 7 6 6 7 7 4 10 7 4 9 7 9 3 2 4 1 7 6 0 1 4 10 1 6 2 5 5 8 5 4 8 9 5 0 6 1 10 0 2 10 1 2 8 9 1 10 7 2 0 3 10 9 10 7 1 8 3 7 4 9 1 1 9 3 2 6 9 1 3 0 9 5 9 0 8 4 9 0
4 0 2 9 6 3 10 8 6 4 9 7 6 3 9 8 5 3 2 9 8 10 0 10 7 1 6 4 7 3 3 4 7 9 6 1 5 2 9 5 7 4 8 1 0 0 0 6 4 6 10 0 2 5 4 1 9 8 2 6 7 0 10 0 1 9 10 6 10 7 1 0 1 9 9 3 7 6 5 0 5 5 5 9 7 5 0 8 4 9 0 3 8 1 4 5 7 9 9 10
3 4 3 10 0 3 4 2 4 4 0 1 6 2 3 1 5 10 8 1 1 0 10 4 9 9 9 3 2 9 3 8 4 10 9 4 4 6 8 6 1 1 4 0 2 7 4 8 0 1 8 5 0 5 1 9 1 7 1 6 4 0 0 8 5 4 8 9 0 9 9 0 3 2 1 8 8 6 2 10 2 10 5 10 1 10 4 6 4 4 10 1 8 0 4 7 3 8 10 3
5 1 0 10 5 2 8 8 10 10 3 1 7 0 3 9 7 9 3 0 0 10 3 6 0 9 7 3 2 2 4 3 7 9 2 9 7 5 1 1 10 7 7 0 7 8 6 1 1 9 2 5 10 5 4 6 0 0 5 7 5 10 0 5 2 6 4 10 10 2 0 4 7 4 0 0 6 4 6 4 7 4 6 6 5 9 0 6 3 2 2 3 7 2 2 2 0 9 8 2
4 4 3 7 5 1 1 1 8 6 5 4 3 4 2 0 0 10 1 5 5 10 8 9 6 9 7 5 2 0 1 3 10 2 0 0 5 6 8 5 1 0 7 6 6 6 1 5 6 4 10 7 0 10 1 1 0 10 10 3 4 4 2 9 2 7 3 1 6 10 2 6 1 7 10 10 5 10 7 5 4 6 6 3 6 9 9 4 0 2 5 2 6 5 4 10 1 4 1 7
6 10 4 7 8 7 7 10 10 3 8 1 1 0 9 8 0 10 1 3 8 4 6 1 4 3 8 3 7 3 1 8 2 0 2 2 2 0 2 7 3 4 9 4 1 6 9 10 4 1 3 7 7 5 1 5 3 3 6 8 10 9 8 4 8 10 0 3 5 5 5 6 5 7 4 0 5 6 6 9 1 7 5 8 0 2 3 1 7 1 7 3 4 2 5 8 3 5 6 3
1 2 7 4 3 9 3 0 4 8 8 2 3 4 6 8 4 4 1 3 5 4 2 2 5 0 9 4 4 7 5 10 0 3 1 1 9 10 1 7 6 3 9 9 9 9 5 3 8 10 2 10 9 2 10 4 8 2 9 5 9 10 5 1 9 0 8 7 3 3 2 6 8 10 2 6 8 4 1 1 1 8 7 9 6 10 8 7 3 5 3 10 3 6 4 0 6 7 1 8
10 4 7 2 3 10 1 4 0 8 5 3 7 6 10 9 2 6 2 3 0 6 7 8 9 2 7 7 0 6 1 7 1 1 1 10 6 10 5 5 7 1 6 6 10 7 4 5 8 10 1 4 2 8 10 3 6 7 3 6 1 2 10 2 3 3 5 10 7 1 4 7 4 7 6 4 8 0 8 10 2 8 10 7 3 1 1 9 4 3 2 6 7 1 6 3 1 6 0 8
10 5 4 6 1 4 7 1 6 7 9 0 1 7 9 10 1 4 7 3 5 10 10 1 8 7 5 0 10 3 8 10 4 1 8 9 10 8 5 2 5 1 6 9 9 3 6 2 3 8 0 4 2 4 9 9 5 5 10 9 2 2 9 2 5 0 10 2 8 8 4 4 5 3 5 6 4 1 2 4 1 5 8 7 6 2 8 5 8 2 3 10 0 7 5 6 10 0 9 4
8 9 9 3 8 8 8 4 0 7 9 4 0 10 2 7 9 7 4 10 7 9 5 4 10 9 7 2 5 1 2 10 2 10 10 1 4 10 8 7 9 2 8 7 0 5 2 1 7 2 2 4 1 7 10 3 0 0 1 0 6 10 6 1 0 9 6 6 2 0 5 4 3 8 2 5 4 1 5 2 0 9 3 5 2 8 2 2 5 8 6 5 4 2 10 6 7 8 6 7
8 8 7 2 3 8 10 5 1 2 2 10 2 6 4 2 7 8 1 1 8 6 2 7 3 6 7 6 5 6 3 5 7 9 3 9 4 4 3 9 9 0 1 3 5 8 2 0 5 6 7 1 4 9 0 2 7 4 3 7 4 10 7 6 6 1 2 3 0 4 5 2 2 10 1 7 5 1 6 7 10 0 7 0 8 6 9 1 8 7 7 2 7 9 6 3 6 1 6 0
7 2 2 5 8 9 4 7 1 8 8 3 8 4 6 1 1 10 9 10 1 0 0 1 3 6 2 2 2 6 2 3 5 10 3 10 0 7 3 4 5 3 4 3 2 9 6 5 0 7 6 8 8 5 3 4 9 5 9 9 5 8 10 5 10 6 7 1 10 7 0 2 7 0 7 10 0 6 4 0 8 4 3 2 8 8 1 5 9 6 10 0 3 5 2 9 2 9 9 9
0 6 2 6 6 2 5 0 2 3 1 7 10 4 6 0 2 7 9 4 10 3 10 1 10 10 4 8 10 7 6 1 10 2 7 3 4 3 7 2 2 2 1 8 3 1 1 4 3 1 10 4 2 7 9 0 9 4 6 7 3 4 1 0 1 2 8 1 10 0 3 1 3 2 1 7 4 4 7 7 10 1 5 0 3 8 2 10 7 1 7 4 7 5 7 9 2 3 10 4
10 0 9 6 8 1 5 1 7 8 10 0 2 6 6 9 8 10 5 7 8 9 8 8 4 9 7 10 8 10 6 4 3 3 10 8 2 4 6 5 6 2 8 2 10 4 0 8 1 2 1 9 6 5 6 10 8 3 8 4 2 1 8 1 1 5 7 10 5 7 1 8 1 8 5 1 9 9 7 3 1 3 10 6 0 6 4 8 5 9 10 3 6 1 9 5 4 9 10 5
2 10 6 1 5 8 8 6 10 0 8 1 7 2 7 1 6 1 4 5 2 4 8 0 0 10 5 6 9 2 3 6 5 10 3 4 5 4 1 6 9 7 6 5 0 1 10 9 8 5 5 9 9 2 2 7 0 8 3 10 9 9 1 6 3 1 9 9 6 0 7 7 1 6 8 6 1 4 6 1 3 10 2 10 8 7 7 10 1 1 2 6 2 6 7 10 10 4 1 1
4 9 8 4 7 5 7 0 10 6 4 10 2 2 3 5 7 1 8 4 7 5 5 6 6 8 1 1 4 4 5 2 4 5 4 2 3 9 10 6 2 5 0 10 7 0 5 7 8 5 6 10 5 2 10 10 5 1 0 3 8 8 10 3 4 10 2 1 7 4 4 9 1 2 2 9 7 5 6 6 8 10 8 1 8 4 4 0 1 3 5 9 9 10 5 7 2 9 2 9
3 3 5 10 8 1 1 1 2 5 4 10 10 2 8 9 7 10 0 8 5 8 2 0 6 6 9 5 2 3 7 5 3 5 1 9 1 10 0 9 8 0 4 3 1 1 10 3 0 6 5 8 8 3 0 1 4 4 2 2 5 10 6 6 6 9 9 10 5 0 7 3 6 6 0 2 10 10 4 1 3 0 0 3 7 5 8 0 10 3 4 0 10 8 7 4 9 2 8 10
4 3 7 9 0 6 7 1 3 3 6 5 7 2 8 4 2 1 4 4 4 3 6 1 8 4 9 7 8 1 0 2 1 7 0 2 3 4 7 2 8 1 5 0 2 9 5 1 2 1 7 5 6 8 10 3 3 8 10 5 8 0 3 3 7 3 6 1 0 8 9 6 4 3 2 6 10 0 3 3 3 4 9 4 8 3 1 10 4 3 7 8 10 2 0 7 8 6 8 9
5 3 9 1 7 5 10 2 9 10 8 6 5 2 4 8 2 10 1 9 4 10 1 5 6 10 5 4 4 5 2 9 10 3 5 6 10 10 4 1 1 1 1 2 1 4 4 5 4 3 9 0 9 3 5 2 5 2 5 0 7 3 2 3 8 4 3 1 5 4 4 3 3 9 2 6 8 10 9 8 2 9 10 10 10 4 5 9 2 3 1 10 10 5 3 8 9 6 0 2
9 10 7 1 0 1 1 1 2 9 0 9 5 6 6 6 1 7 4 7 9 8 3 1 9 5 4 3 7 9 2 9 5 1 6 7 6 9 10 0 4 1 3 0 8 6 6 3 6 8 5 8 4 0 2 0 0 10 9 10 9 4 8 7 6 7 0 0 9 8 1 7 2 7 3 1 6 6 7 0 4 1 7 7 5 1 4 4 5 3 7 6 0 2 4 10 0 6 2 3
9 0 9 10 10 1 3 7 7 0 3 8 1 7 0 8 0 9 10 6 2 7 7 4 8 2 4 8 9 5 6 7 7 0 9 9 10 5 9 5 2 7 5 5 8 4 9 6 1 5 3 10 1 5 7 1 8 6 0 9 9 4 2 7 8 9 4 2 6 8 1 2 1 6 9 10 8 0 0 4 8 6 4 3 9 7 8 10 1 8 6 10 10 0 2 10 8 9 0 4
3 7 7 9 0 9 9 8 1 9 1 4 9 4 10 2 4 2 10 0 10 0 9 0 9 0 0 10 1 10 6 5 4 8 7 7 3 3 3 5 9 2 6 1 2 2 8 3 9 3 5 0 1 3 7 2 3 3 6 8 8 8 6 3 2 9 1 4 10 0 4 4 5 1 2 0 5 3 1 8 4 6 10 0 4 6 9 9 8 8 5 0 0 7 8 9 4 9 0 3
8 3 6 2 8 1 9 1 9 8 9 6 9 6 0 8 0 8 5 6 5 5 7 6 10 5 0 6 9 10 4 8 4 6 9 0 0 6 9 10 0 10 8 1 3 5 4 2 3 6 8 5 4 1 5 7 3 6 1 6 4 2 6 0 8 4 10 10 8 1 6 5 6 9 6 9 6 8 1 6 6 8 4 3 10 5 3 9 6 0 2 8 7 3 7 8 5 0 0 8
5 2 5 6 10 2 8 10 2 1 7 4 3 4 2 5 7 4 3 4 0 3 9 6 5 2 6 0 10 6 4 8 6 6 9 6 8 0 4 1 0 4 5 1 5 7 6 10 0 3 9 4 10 7 0 9 10 2 3 0 9 10 8 4 1 8 5 7 7 0 0 1 4 1 8 3 1 3 6 3 10 10 0 9 9 7 6 1 5 7 9 5 9 10 8 6 1 0 5 3
0 6 10 6 3 6 1 3 3 7 5 2 5 3 9 4 6 5 10 1 0 8 7 4 6 4 10 6 7 7 2 0 3 1 7 0 1 2 4 9 10 5 5 3 6 5 10 8 9 3 5 4 0 2 3 0 4 9 5 8 4 3 9 0 0 8 7 10 10 5 10 3 8 7 6 2 8 6 0 4 7 8 5 3 4 2 0 4 8 7 7 4 4 5 9 8 5 4 2 1
4 10 1 9 1 8 8 4 7 10 5 3 4 8 0 4 8 0 9 8 0 7 3 9 5 9 4 5 7 8 6 4 7 1 8 10 5 9 1 3 10 5 7 0 3 8 7 10 2 10 1 4 4 10 9 6 4 5 6 10 3 5 8 5 7 8 10 8 8 0 7 10 2 10 4 5 0 3 2 9 5 4 2 3 5 0 7 0 5 3 9 5 1 5 4 8 10 7 0 0
9 5 4 7 0 5 10 1 10 8 1 1 1 5 2 1 6 9 7 0 7 3 5 9 10 0 0 5 5 4 8 9 7 0 0 6 1 5 1 0 8 6 1 5 4 4 10 10 1 5 3 7 2 8 6 4 8 2 6 9 8 0 10 3 4 8 2 4 10 9 3 9 10 10 5 9 10 1 6 6 3 6 4 0 2 2 1 0 3 8 2 6 0 0 8 6 8 4 1 8
1 5 1 8 3 6 2 9 0 3 5 8 5 10 7 5 0 0 8 5 10 10 10 4 5 6 6 3 3 1 2 10 9 4 9 1 1 6 0 6 7 0 1 4 8 9 10 8 0 8 0 2 4 1 8 7 9 0 3 2 5 8 8 5 8 8 6 6 7 9 9 0 1 2 9 4 2 7 5 4 10 5 3 2 10 5 1 2 1 4 7 3 1 7 0 5 3 5 8 8
5 4 0 10 10 3 4 0 8 7 10 4 10 8 7 2 3 6 4 2 0 7 6 7 8 10 2 2 2 0 9 2 1 5 2 7 7 9 0 6 8 0 2 3 4 2 1 3 0 5 5 3 0 0 1 7 3 1 4 6 8 8 6 3 4 8 5 1 8 2 1 10 2 8 7 9 9 4 4 10 0 4 1 5 1 7 8 3 3 5 10 6 4 7 1 1 8 7 9 4
5 6 2 8 10 1 3 6 6 3 2 2 0 6 8 5 4 0 10 10 6 7 10 1 5 0 10 4 10 6 0 8 7 3 8 7 4 9 7 4 0 6 1 5 4 1 9 7 4 2 4 4 5 9 6 5 8 2 3 7 1 3 4 6 5 8 10 3 7 9 6 8 6 1 7 3 1 10 7 4 1 2 2 6 3 5 5 4 9 4 1 3 10 2 0 2 9 8 0 4
9 2 0 2 8 4 4 2 8 4 2 6 3 5 1 8 5 8 3 4 1 6 2 2 6 6 6 4 1 0 5 3 5 2 8 4 7 9 3 9 10 0 6 4 8 7 3 9 7 6 9 10 3 9 3 10 2 4 3 5 10 1 0 6 7 2 0 7 8 4 2 2 9 9 5 5 3 7 5 7 6 1 7 7 0 7 0 1 0 5 8 9 6 0 0 3 10 9 3 8
1 3 9 6 0 7 6 6 3 9 5 8 1 0 8 9 1 2 9 4 1 1 4 5 7 2 6 3 3 8 7 1 3 7 10 2 4 10 0 3 9 2 3 10 4 2 1 5 9 6 7 3 2 8 4 7 9 0 9 3 5 7 9 9 2 10 10 2 8 8 9 0 3 9 6 5 7 2 10 0 6 8 4 2 8 10 7 7 2 4 8 9 3 1 6 3 1 7 10 2
7 6 0 6 5 7 8 1 6 1 1 0 3 10 4 9 1 4 5 2 2 7 10 8 10 6 1 6 3 0 4 9 6 4 10 1 10 4 6 3 4 8 9 2 7 3 9 5 6 6 4 5 2 1 5 4 4 1 0 2 10 3 9 0 8 8 5 3 9 10 0 1 9 9 10 4 4 5 7 7 8 3 0 5 6 8 6 3 8 5 4 0 8 0 7 10 7 3 7 0
8 4 9 5 5 3 3 4 7 4 8 2 1 5 7 9 2 6 10 0 2 4 7 10 2 4 6 10 2 6 8 4 6 10 3 5 2 4 5 2 5 0 1 7 9 4 5 8 3 8 6 7 6 3 0 1 8 1 0 0 5 6 2 5 0 6 9 7 7 1 2 7 10 7 9 7 8 3 4 7 5 6 1 4 2 8 10 4 10 1 2 0 3 9 1 9 10 7 9 8
4 0 6 4 9 9 2 3 9 2 2 9 7 2 8 4 6 9 6 6 0 6 2 7 1 6 1 2 6 9 10 4 7 7 4 9 2 5 8 7 4 5 0 2 9 2 2 1 4 4 8 5 0 5 2 10 0 0 6 5 0 1 0 9 3 6 3 5 6 6 0 2 0 6 1 3 2 2 1 2 4 9 6 9 8 6 4 7 3 5 5 2 10 3 4 4 10 9 10 6
2 10 7 7 0 2 4 8 8 2 6 5 0 6 9 9 4 8 10 10 5 0 9 1 10 5 5 3 7 10 6 10 7 7 8 5 6 3 8 4 1 5 0 10 2 8 7 8 10 3 10 5 7 4 7 7 6 0 1 6 9 5 8 9 8 7 1 10 10 2 0 1 8 8 1 0 1 5 9 4 0 8 9 3 1 3 2 7 4 8 9 6 0 6 2 10 6 7 6 7
3 9 4 2 5 3 2 0 5 7 1 1 10 4 2 2 7 2 1 6 5 6 3 8 6 8 4 0 1 0 4 2 6 5 8 10 1 3 7 10 3 5 9 3 10 6 3 6 5 2 3 2 8 4 10 6 7 9 8 3 8 1 0 9 4 2 9 7 4 6 9 6 8 10 2 7 4 4 3 7 10 8 2 10 4 9 5 2 4 4 2 1 2 2 7 7 8 7 5 4
1 4 10 8 8 2 10 7 2 3 9 2 4 0 10 0 7 6 2 3 4 6 7 7 0 1 7 6 7 7 9 2 3 1 6 8 6 1 5 4 4 5 3 3 4 2 2 9 8 3 9 6 5 5 4 6 10 9 1 0 0 7 9 4 9 5 10 8 2 7 7 1 5 10 7 10 8 6 6 4 2 10 7 9 4 5 9 10 7 3 3 0 7 1 6 7 1 1 1 6
2 1 3 0 7 1 8 7 5 10 10 0 1 9 2 1 1 3 10 6 5 9 3 1 7 7 6 9 6 0 6 6 8 5 5 3 10 6 9 5 4 1 3 1 8 10 0 5 10 5 3 3 9 1 9 6 4 10 4 0 6 8 10 10 1 5 3 2 1 7 5 2 4 5 3 7 9 7 6 9 0 9 3 8 2 4 2 7 2 9 2 2 5 5 3 2 6 1 10 0
0 6 1 3 4 4 10 5 6 8 9 10 8 1 2 7 2 6 8 5 6 7 10 2 9 4 3 2 4 9 2 2 10 10 9 3 6 3 0 10 9 7 10 5 3 4 1 1 3 10 7 2 5 8 8 10 2 7 0 10 8 7 5 10 1 1 6 4 3 0 6 0 4 10 6 3 5 4 3 7 8 10 0 10 0 8 2 9 0 7 4 8 1 8 1 7 1 10 7 0
4 0 4 2 6 9 5 6 10 9 5 7 2 6 5 9 0 1 3 8 7 5 7 10 7 6 8 6 4 7 6 1 2 0 1 9 2 5 3 10 1 2 1 1 8 9 10 7 7 2 9 10 9 0 3 5 2 2 2 8 1 8 9 2 3 9 3 2 5 10 4 9 8 4 3 2 2 3 10 3 0 1 5 5 7 1 4 9 0 5 4 8 6 10 4 7 8 8 9 3

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,20 @@
0 0 2 1 1 2 1 0 0 1 2 0 0 2 1 0 1 1 2 1
1 0 2 1 1 0 1 1 2 1 2 0 1 2 1 1 0 2 2 0
2 2 2 0 1 0 0 2 0 0 1 2 0 0 1 2 2 2 2 0
2 2 2 1 2 1 0 1 0 2 0 1 2 2 1 0 2 1 2 1
0 1 0 0 2 1 1 0 2 1 1 2 2 2 1 0 0 2 1 1
0 1 1 0 0 0 2 0 1 2 1 2 2 0 2 0 0 2 2 0
0 2 0 1 2 0 1 1 1 2 2 0 2 0 1 1 1 2 1 2
2 0 1 2 0 2 2 0 0 2 0 1 1 2 1 0 2 0 2 2
0 0 1 2 1 2 0 2 2 0 2 0 1 1 2 1 2 0 0 2
1 1 1 2 0 0 1 1 2 2 0 2 2 2 2 1 1 2 0 2
0 0 1 0 0 1 1 1 2 0 2 2 1 0 1 0 2 0 0 2
2 0 0 0 0 2 0 0 0 1 2 0 1 0 1 0 0 2 0 2
0 0 0 1 1 0 1 1 1 2 0 2 2 0 0 1 1 2 0 2
2 0 0 0 1 1 0 0 0 1 0 1 1 1 1 1 1 2 1 1
2 1 0 0 1 0 2 1 2 2 2 1 0 0 1 0 1 1 1 0
2 1 0 2 2 1 2 2 1 2 2 2 2 2 0 2 1 0 2 0
0 0 1 2 2 0 1 1 0 1 0 2 0 0 2 1 0 1 0 1
0 1 2 1 1 1 1 1 1 2 0 1 0 2 1 0 0 0 1 0
2 0 1 2 2 2 0 0 0 0 2 1 2 1 0 0 1 0 0 1
0 1 1 2 0 0 2 2 0 2 0 2 2 1 1 0 2 2 2 0

View file

@ -0,0 +1,18 @@
import assessment.Grid;
import org.junit.jupiter.api.Test;
import java.util.List;
import java.util.stream.Collectors;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class GridReadTest {
@Test
void testGridReader() {
Grid grid = Grid.fromFile("grids/20.txt");
List<Integer> row10 = grid.grid().get(9);
String row10line = row10.stream().map(i -> "" + i).collect(Collectors.joining(" "));
assertEquals("1 1 1 2 0 0 1 1 2 2 0 2 2 2 2 1 1 2 0 2", row10line);
}
}

View file

@ -0,0 +1,14 @@
import assessment.Grid;
import assessment.Path;
import assessment.BestPathFinder;
import org.junit.jupiter.api.Test;
public class PathFinderTest {
@Test
public void testBestPath() {
Grid grid = Grid.fromFile("grids/20.txt");
Path path = BestPathFinder.findMaxValPath(grid, 20, 10, 1000, 9, 9);
System.out.println(path);
}
}