WIP rust impl for multidrone solution
This commit is contained in:
parent
e34cb09125
commit
796c844c68
28 changed files with 1406 additions and 0 deletions
|
|
@ -9,6 +9,7 @@ import java.util.*;
|
|||
* outstanding questions:
|
||||
* * is a cell of (initial) value 0 equally valuable as a cell just occupied?
|
||||
* -> probably, what is the chance that you find a 'treasure' behind it, that you would have not found via an alternative path?
|
||||
* * what about a path that has to end at start position?
|
||||
*/
|
||||
public class OptimalPathFinder {
|
||||
|
||||
|
|
@ -53,6 +54,7 @@ public class OptimalPathFinder {
|
|||
|
||||
// next path to evaluate
|
||||
path = paths.peek();
|
||||
assert path != null; // priorityqueue does not allow nulls
|
||||
}
|
||||
|
||||
Point currentPos = path.getHead();
|
||||
7
solution2/Cargo.lock
generated
Normal file
7
solution2/Cargo.lock
generated
Normal file
|
|
@ -0,0 +1,7 @@
|
|||
# This file is automatically @generated by Cargo.
|
||||
# It is not intended for manual editing.
|
||||
version = 3
|
||||
|
||||
[[package]]
|
||||
name = "solution2"
|
||||
version = "0.1.0"
|
||||
6
solution2/Cargo.toml
Normal file
6
solution2/Cargo.toml
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
[package]
|
||||
name = "solution2"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
158
solution2/src/grid.rs
Normal file
158
solution2/src/grid.rs
Normal file
|
|
@ -0,0 +1,158 @@
|
|||
use std::{
|
||||
cmp::Ordering,
|
||||
collections::{BTreeSet, HashMap},
|
||||
hash::{Hash, Hasher},
|
||||
};
|
||||
|
||||
#[derive(Debug)]
|
||||
pub struct Grid {
|
||||
data: Vec<Vec<u16>>,
|
||||
// keep track of every point that has been hit at some time
|
||||
hits: HashMap<(u16, u16), BTreeSet<usize>>, // TreeSet<usize> is integer times that point has been visited.
|
||||
// Must always be sorted and could probably be a single int
|
||||
// (keep track of last time hit)
|
||||
}
|
||||
|
||||
impl Grid {
|
||||
pub fn new(N: usize) -> Self {
|
||||
let grid20 = include_str!("grids/20.txt");
|
||||
let grid100 = include_str!("grids/100.txt");
|
||||
let grid1000 = include_str!("grids/1000.txt");
|
||||
|
||||
let datafile = match N {
|
||||
20 => grid20,
|
||||
100 => grid100,
|
||||
1000 => grid1000,
|
||||
_ => panic!("only 20, 100 or 1000 are available"),
|
||||
};
|
||||
|
||||
let mut data = vec![];
|
||||
for row in datafile.split("\n") {
|
||||
let mut datarow = vec![];
|
||||
for col in row.split(" ") {
|
||||
datarow.push(u16::from_str_radix(col, 10).unwrap());
|
||||
}
|
||||
data.push(datarow);
|
||||
}
|
||||
Grid {
|
||||
data,
|
||||
hits: HashMap::new(),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn get_value(&self, x: u16, y: u16, time: usize) -> f32 {
|
||||
let hit = self.hits.get(&(x, y));
|
||||
|
||||
let initial_value = *(self.data.get(y as usize).unwrap().get(x as usize).unwrap()) as f32;
|
||||
|
||||
if let Some(hit_times) = hit {
|
||||
for t in hit_times.iter().rev() {
|
||||
if time > *t {
|
||||
let elapsed_since_hit = (time - *t) as f32;
|
||||
|
||||
return f32::min(
|
||||
elapsed_since_hit * initial_value as f32 * 0.1,
|
||||
initial_value,
|
||||
);
|
||||
}
|
||||
}
|
||||
0.0
|
||||
} else {
|
||||
initial_value
|
||||
}
|
||||
}
|
||||
|
||||
pub fn size(&self) -> u16 {
|
||||
self.data.len() as u16
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct Path {
|
||||
points: Vec<Point>,
|
||||
pub value: f32,
|
||||
}
|
||||
|
||||
impl Path {
|
||||
pub fn new(grid: &Grid, initial_x: u16, initial_y: u16) -> Self {
|
||||
let mut points = vec![];
|
||||
let value = grid.get_value(initial_x, initial_y, 0);
|
||||
|
||||
let p = Point {
|
||||
x: initial_x,
|
||||
y: initial_y,
|
||||
value,
|
||||
};
|
||||
|
||||
points.push(p);
|
||||
Self { points, value }
|
||||
}
|
||||
|
||||
pub fn length(&self) -> usize {
|
||||
self.points.len()
|
||||
}
|
||||
|
||||
pub fn head(&self) -> &Point {
|
||||
self.points.get(self.points.len() - 1).unwrap() // assert Some
|
||||
}
|
||||
|
||||
pub fn value(&self) -> f32 {
|
||||
self.points.iter().map(|p| p.value).sum()
|
||||
}
|
||||
}
|
||||
|
||||
impl PartialOrd for Path {
|
||||
fn partial_cmp(&self, other: &Path) -> Option<Ordering> {
|
||||
match self.value > other.value {
|
||||
true => Some(Ordering::Greater),
|
||||
false => {
|
||||
if self.value == other.value {
|
||||
Some(Ordering::Equal)
|
||||
} else {
|
||||
Some(Ordering::Less)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
impl Eq for Path {}
|
||||
|
||||
impl Ord for Path {
|
||||
fn cmp(&self, other: &Self) -> Ordering {
|
||||
self.partial_cmp(other).unwrap()
|
||||
}
|
||||
}
|
||||
|
||||
impl PartialEq for Path {
|
||||
fn eq(&self, other: &Path) -> bool {
|
||||
self.value == other.value
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
pub struct Point {
|
||||
pub x: u16,
|
||||
pub y: u16,
|
||||
pub value: f32,
|
||||
}
|
||||
|
||||
impl Point {
|
||||
pub fn new(x: u16, y: u16, value: f32) -> Self {
|
||||
Self { x, y, value: 0.0 }
|
||||
}
|
||||
}
|
||||
|
||||
impl PartialEq for Point {
|
||||
fn eq(&self, other: &Point) -> bool {
|
||||
self.x == other.x && self.y == other.y
|
||||
}
|
||||
}
|
||||
impl Eq for Point {}
|
||||
|
||||
impl Hash for Point {
|
||||
fn hash<H: Hasher>(&self, state: &mut H) {
|
||||
self.x.hash(state);
|
||||
self.y.hash(state);
|
||||
}
|
||||
}
|
||||
100
solution2/src/grids/100.txt
Normal file
100
solution2/src/grids/100.txt
Normal 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
|
||||
1000
solution2/src/grids/1000.txt
Normal file
1000
solution2/src/grids/1000.txt
Normal file
File diff suppressed because it is too large
Load diff
20
solution2/src/grids/20.txt
Normal file
20
solution2/src/grids/20.txt
Normal 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
|
||||
108
solution2/src/lib.rs
Normal file
108
solution2/src/lib.rs
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
use grid::{Grid, Path, Point};
|
||||
use std::collections::BTreeSet;
|
||||
use std::time::{Duration, SystemTime};
|
||||
|
||||
pub mod grid;
|
||||
|
||||
pub fn find_optimal_path(grid: &Grid, t: usize, T: u128, x: u16, y: u16) {
|
||||
let mut paths_to_consider: BTreeSet<Path> = BTreeSet::new();
|
||||
let taken_paths: Vec<u64> = vec![];
|
||||
|
||||
let path = Path::new(grid, x, y);
|
||||
|
||||
let mut max: Path = path.clone(); // sorry
|
||||
|
||||
paths_to_consider.insert(path);
|
||||
let t0 = SystemTime::now();
|
||||
let mut running = true;
|
||||
let mut discrete_elapsed = 0;
|
||||
|
||||
while running {
|
||||
let N = grid.size();
|
||||
let mut current_path = paths_to_consider.pop_last().unwrap(); // assert Some
|
||||
|
||||
if current_path.value > max.value {
|
||||
max = current_path.clone(); // sorry
|
||||
}
|
||||
while current_path.length() >= t {
|
||||
current_path = paths_to_consider.pop_last().unwrap(); // highest
|
||||
if current_path.value > max.value {
|
||||
max = current_path.clone(); // sorry
|
||||
}
|
||||
}
|
||||
|
||||
let head = current_path.head();
|
||||
let x = head.x;
|
||||
let y = head.y;
|
||||
let mut new_directions = vec![];
|
||||
|
||||
if y > 0 {
|
||||
new_directions.push(Point::new(
|
||||
x,
|
||||
y - 1,
|
||||
grid.get_value(x, y - 1, discrete_elapsed),
|
||||
));
|
||||
if x < N - 1 {
|
||||
new_directions.push(Point::new(
|
||||
x + 1,
|
||||
y - 1,
|
||||
grid.get_value(x + 1, y - 1, discrete_elapsed),
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
if x > 0 {
|
||||
new_directions.push(Point::new(
|
||||
x - 1,
|
||||
y,
|
||||
grid.get_value(x - 1, y, discrete_elapsed),
|
||||
));
|
||||
if y > 0 {
|
||||
new_directions.push(Point::new(
|
||||
x - 1,
|
||||
y - 1,
|
||||
grid.get_value(x - 1, y - 1, discrete_elapsed),
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
if x < N - 1 {
|
||||
new_directions.push(Point::new(
|
||||
x + 1,
|
||||
y,
|
||||
grid.get_value(x + 1, y, discrete_elapsed),
|
||||
));
|
||||
if y < N - 1 {
|
||||
new_directions.push(Point::new(
|
||||
x + 1,
|
||||
y + 1,
|
||||
grid.get_value(x + 1, y + 1, discrete_elapsed),
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
if y < N - 1 {
|
||||
new_directions.push(Point::new(
|
||||
x,
|
||||
y + 1,
|
||||
grid.get_value(x, y + 1, discrete_elapsed),
|
||||
));
|
||||
if x > 0 {
|
||||
new_directions.push(Point::new(
|
||||
x - 1,
|
||||
y + 1,
|
||||
grid.get_value(x - 1, y + 1, discrete_elapsed),
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
// continue?
|
||||
let t1 = SystemTime::now();
|
||||
if let Ok(elapsed) = t1.duration_since(t0) {
|
||||
if elapsed.as_millis() > T {
|
||||
running = false;
|
||||
}
|
||||
}
|
||||
discrete_elapsed += 1;
|
||||
}
|
||||
}
|
||||
5
solution2/src/main.rs
Normal file
5
solution2/src/main.rs
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
use solution2::grid::Grid;
|
||||
|
||||
fn main() {
|
||||
Grid::new(20);
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue