d16
This commit is contained in:
parent
595f4ba264
commit
663fd765a7
13 changed files with 220 additions and 24 deletions
|
@ -0,0 +1,10 @@
|
||||||
|
.|...\....
|
||||||
|
|.-.\.....
|
||||||
|
.....|-...
|
||||||
|
........|.
|
||||||
|
..........
|
||||||
|
.........\
|
||||||
|
..../.\\..
|
||||||
|
.-.-/..|..
|
||||||
|
.|....-|.\
|
||||||
|
..//.|....
|
110
res/16/input
Normal file
110
res/16/input
Normal file
|
@ -0,0 +1,110 @@
|
||||||
|
\./....\../......................|............../-.......|....................|....../|\..../.............\...
|
||||||
|
...........|.-.............|.././........../........................./...........||.....................-....\
|
||||||
|
...............\.............-...................-............/.|...|.......-...............................-.
|
||||||
|
.......................................\..|-.../\....../.........|............/...|.....-.|...........\...|...
|
||||||
|
............/.-..|...\........|...........-......................\.........-........\....../....|.........|...
|
||||||
|
................-...........-|....\.................-........\........\...|.././......./......................
|
||||||
|
......................-....../.-........../........\....../..../.............-..........|.|.................|.
|
||||||
|
...|....................|.|../.......\.......|.......-...............|.......\......\....................|\...
|
||||||
|
.........\.............|.......-.....................|....................|..................-.......\-...\...
|
||||||
|
.../............-........../.||..../........-...../-.........-......./......\........|........................
|
||||||
|
....|..../.../../.....\..............-.-................../........|...../....\....\...................|......
|
||||||
|
.......\..-..................|..../..........|....................-............/...................\|../......
|
||||||
|
..-.\................../................../....\........./...\.\/.............................\|..............
|
||||||
|
.......-...............................-.......|....................|......................../...........|/...
|
||||||
|
................|...\-....-.......|/......./.......................|../.\-...-....../...\........\......\.|...
|
||||||
|
.....................-.......-....-................|.............-........-....................\....../....-..
|
||||||
|
\..|.|....-......../......../.../...................|.....................\..--...............-.......||......
|
||||||
|
.....-.\.....................-...\............../....\.......-/../|...|......../..\..................../......
|
||||||
|
....|...\......................|...|.../...|...............\...........-........................|.......--.-..
|
||||||
|
......\....|.-...........\................................|.................\..............\..|...............
|
||||||
|
...................||..................\|...................|....\............-....../........\.../.....-...-.
|
||||||
|
....................................|....|......./.\..................../..............|../.............\.....
|
||||||
|
......|...\./......../......|....\..././.......|...............................-.........../.-..\.............
|
||||||
|
.|.../....|.................-..............|..................\....../..........-..........|...|......|./.....
|
||||||
|
.........|.........../..\...|....../...................................................-......................
|
||||||
|
../....|/.............|.........../....................\.......\............./.........../.......-.........\-.
|
||||||
|
................\....................\.....-..|............-......-|...............\......\...-...............
|
||||||
|
..........|..........|...........|.../.............................-......\.....|\.........\.\.............../
|
||||||
|
.........................../...........\.............|................../.-.......-....././\.........-........
|
||||||
|
\....\................../..../.............-../......|.\.........-./..\........./.............................
|
||||||
|
.\..../..............|........../.......\........|.-.-........//\.......|.....-.../..-.....-...........-......
|
||||||
|
.......|................\.....................\.............-........./..................-...-...........\....
|
||||||
|
....../.......-......././.-.....|..........|.........|..........\............................/................
|
||||||
|
................\......\................\\.\..\........\.................................\......-/.....-......
|
||||||
|
..-...../......-.......................................|.................|......-.-...-.....\....../...-......
|
||||||
|
........................\....|.....\....|............................\..............\.......................\.
|
||||||
|
............................/|...|........\.\....\......-|......................|.....|.\-...-......-.........
|
||||||
|
\..|...........................\.................\.-................../................./..../.\..............
|
||||||
|
|.../.............\...............................|..|..-......-.......-.......|..\../.........-...........|..
|
||||||
|
...........|................\............................../.......................|..../-|...................
|
||||||
|
...\.|.\..................|.\-/....../-/..|/............\......../\.\...........\\.......-....-\..............
|
||||||
|
.................................-......./..-............|..\../..................................|/./|..../..
|
||||||
|
.../..../........|-.........|.....|..............-.................../.....|-.......|.....|...............\...
|
||||||
|
-..-...................//............................./.........-...............-.........|.../...........\...
|
||||||
|
.............././\......|..............\..................|...............-............................-......
|
||||||
|
/.........|/.....-../|......-.........|..-.-...........-........|..........-..................................
|
||||||
|
.............\.......|/........../.....|.......-....-....../......-...................-....|........\.........
|
||||||
|
\...|.|.../..|....../....-.........................-..............|.....\.......-........\........-....|......
|
||||||
|
-.-..\..........|........................./..........|..-./...........................|...........-........-..
|
||||||
|
....\./..............-.........|......./.-..............-.-../\........|..|.........-..............\...\.../..
|
||||||
|
..|...........\...../......../.../.........\....../....-..................................|/............-...|.
|
||||||
|
.../.........|..-................|..........|....\/..........|..|\.......|...........|........................
|
||||||
|
........../.............\...\.............................-...................|................-...-..........
|
||||||
|
.....................-.................................../../.............................-../................
|
||||||
|
.-........./......|........-...../...................\..|-........-...\..........././||.......................
|
||||||
|
.........|../../.....-...........-....-..-...|.............................\..................................
|
||||||
|
...................-.....\......../............./...............-.......\.........../........|............../.
|
||||||
|
.|\.............................................-.........-....|.....\..................-..-.......\..........
|
||||||
|
/................/....\.........\|...............-.............|......./...........-.....\........-.......--..
|
||||||
|
..........-........\........\-...\....\\........../...|./.........................\.....|.................\../
|
||||||
|
............................-.|............................\...\../..........................\......./...../..
|
||||||
|
.....//.......|..\.........-..\.........-....\..-..\.....-.....//.../.........................................
|
||||||
|
................................|....|..\............/|./.\....|.............-..\|................./..........
|
||||||
|
.....|.......-.............-../...../.........|../.....................|........................./.....|......
|
||||||
|
.-...\...../................\.-........|..|...|...|.........\|......|...../...../..........\................|.
|
||||||
|
.../../............-.........|................\.....\....-...................../.../...........-...|...../|...
|
||||||
|
..-..........-.......-.............\..............-..............\.......|....................................
|
||||||
|
..|................/........................-...................../.................................|......../
|
||||||
|
...../........\......./....../......||.......|-...............-.....-............../../.......................
|
||||||
|
...\..../...................-........\.........\............................/....|.........-..........-.......
|
||||||
|
.../................\....\..|-...........................\.-..-......|.|.-/.....-............./...............
|
||||||
|
../............\...........................-../....|....................-..............|........./......|...\\
|
||||||
|
.........................\..................|..\........................./....................\...............
|
||||||
|
/.............|.....................-.....\.....-..|............/..........|./...|....-...-....|-....../......
|
||||||
|
.\.-.....\............././.........................\..........-......................|........\...............
|
||||||
|
........\../............../......\.....\..-............|............\............../..|.......................
|
||||||
|
....-../....\..................................-......../...|................................................-
|
||||||
|
.......................\............-...................../.........\............-../.........\/..|../....-/|.
|
||||||
|
..../.............|....../............-.|......../.....................|...../..|.....-.............../.......
|
||||||
|
....................|\...........-...................................../.......................-...-..|..\.|/.
|
||||||
|
......................-....-\........../..............\.......-....\.....|...............\.........-..........
|
||||||
|
.|......../.....|.........||.................../.....\...|.........\........../........\............../.......
|
||||||
|
.-............/-..........-...........\..........\.......-....................................................
|
||||||
|
.....|/....-.../......-......................../.|./...\.......\/......./......../..\...../...|...|.........\-
|
||||||
|
.............../..\.../-......|\\......../............../............|/......................./.......\.......
|
||||||
|
.....\.-./....../............/..-................../....\..................-.................|.......-/..-....
|
||||||
|
.-................-..-...........................-..|............-.................../...........-...........|
|
||||||
|
-......\......|......\............../.............../...-/.../....\.........................-.....|.....-.....
|
||||||
|
.......\.....--.-............................\..........-./........||......|..\...../..../................|...
|
||||||
|
.............-.....|..../.......|............|....................-......\.............../|...............|...
|
||||||
|
............|........../........|....................-....|....../.........\..........-........-..-...........
|
||||||
|
..............|.................-....|...........\.|.../.........../..........-......\|.............\..-......
|
||||||
|
......-............\.......\....................................................|\..\.......................-.
|
||||||
|
................||...........\...-\/..|..............\.........................../.......\.|.............|...|
|
||||||
|
....-...................-...../....|............\.../.........-..../....\........../..../.|..........\........
|
||||||
|
........-.....\........../....|.........\......./...........\.......-..|............../...........-..|........
|
||||||
|
.................../.....-...........|....-...\......\...|...|...........................\.......||......\|...
|
||||||
|
......-.........|.....\....-..........|.......\....\..................................../........|...|./......
|
||||||
|
..................\.........../.............../.................../.........-.......-..../............/\.../..
|
||||||
|
........\...\...\....../.......\\........../............../.-.................../........|..............-.....
|
||||||
|
....../........................|................-.-......-....|......\\.-...-.|..........|..../...............
|
||||||
|
/.......-.....|.....\...................|...../..............|......|.../....................\.....|..........
|
||||||
|
|.\....-...............|/....|........../....................................\.-............................/.
|
||||||
|
.......................-...............-.|...................|......\.....-\..|.......-......./\.....-......-.
|
||||||
|
................................|../.................................-........-...................|...........
|
||||||
|
.....-.........\..-................./...........|...............|....................\/../../........|.-......
|
||||||
|
............................../......./.\/........./..|..............|.......................\................
|
||||||
|
......./.-.......\...........-...............|............|.............|..........|.|..........|.........--..
|
||||||
|
............-..............-.............\./...|.....|................|..........|/.............\.............
|
||||||
|
.../....................-........-.................../.....\.............-...................\................
|
104
src/days/d16.rs
104
src/days/d16.rs
|
@ -1,18 +1,112 @@
|
||||||
use std::fs;
|
use std::{collections::HashMap, fs};
|
||||||
|
|
||||||
|
use rayon::prelude::*;
|
||||||
|
|
||||||
pub fn solve() {
|
pub fn solve() {
|
||||||
let path = "res/16/example";
|
let path = "res/16/input";
|
||||||
|
|
||||||
let mut _contents = fs::read_to_string(path).expect("I/O error, wrong path?");
|
let contents = fs::read_to_string(path).expect("I/O error, wrong path?");
|
||||||
//let contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?"));
|
//let contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?"));
|
||||||
|
|
||||||
|
let grid: Vec<Vec<char>> = contents
|
||||||
|
.lines()
|
||||||
|
.map(|line| line.chars().collect::<Vec<_>>())
|
||||||
|
.collect();
|
||||||
|
|
||||||
let result: usize = 0;
|
let result: usize = solve_starts(&vec![(0usize, 0usize, 0u8)], &grid);
|
||||||
|
|
||||||
println!("Result 1: {result}");
|
println!("Result 1: {result}");
|
||||||
|
|
||||||
|
let possible_starts: Vec<(usize, usize, u8)> = (0..grid.len())
|
||||||
|
.map(|x| (x, 0, 0))
|
||||||
|
.chain((0..grid.len()).map(|x| (x, grid[0].len() - 1, 2)))
|
||||||
|
.chain((0..grid[0].len()).map(|y| (0, y, 1)))
|
||||||
|
.chain((0..grid[0].len()).map(|y| (grid.len() - 1, y, 3)))
|
||||||
|
.collect();
|
||||||
|
|
||||||
let result: usize = 0;
|
let result: usize = solve_starts(&possible_starts, &grid);
|
||||||
|
|
||||||
println!("Result 2: {result}");
|
println!("Result 2: {result}");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn solve_starts(possible_starts: &Vec<(usize, usize, u8)>, grid: &Vec<Vec<char>>) -> usize {
|
||||||
|
possible_starts
|
||||||
|
.par_iter()
|
||||||
|
.map(|start| {
|
||||||
|
// (x,y,dir) - dir=0 -> east, dir=1 -> south, ...
|
||||||
|
let mut starts: Vec<(usize, usize, u8)> = vec![*start];
|
||||||
|
let mut visited: HashMap<(usize, usize), u8> = HashMap::new();
|
||||||
|
|
||||||
|
while !starts.is_empty() {
|
||||||
|
let (mut x, mut y, mut dir) = starts.pop().unwrap();
|
||||||
|
|
||||||
|
'mov: loop {
|
||||||
|
if visited.contains_key(&(x, y)) && *visited.get(&(x, y)).unwrap() == dir {
|
||||||
|
break 'mov; // already been here
|
||||||
|
}
|
||||||
|
visited.insert((x, y), dir);
|
||||||
|
|
||||||
|
match grid[x][y] {
|
||||||
|
'/' => {
|
||||||
|
dir = match dir {
|
||||||
|
2 => 1,
|
||||||
|
1 => 2,
|
||||||
|
0 => 3,
|
||||||
|
3 => 0,
|
||||||
|
_ => panic!(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
'\\' => {
|
||||||
|
dir = match dir {
|
||||||
|
0 => 1,
|
||||||
|
1 => 0,
|
||||||
|
2 => 3,
|
||||||
|
3 => 2,
|
||||||
|
_ => panic!(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
'|' => {
|
||||||
|
if dir % 2 == 0 {
|
||||||
|
starts.push((x, y, 1));
|
||||||
|
starts.push((x, y, 3));
|
||||||
|
break 'mov;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
'-' => {
|
||||||
|
if dir % 2 == 1 {
|
||||||
|
starts.push((x, y, 0));
|
||||||
|
starts.push((x, y, 2));
|
||||||
|
break 'mov;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_ => {}
|
||||||
|
}
|
||||||
|
|
||||||
|
(x, y) = match dir {
|
||||||
|
0 => (x, y + 1),
|
||||||
|
1 => (x + 1, y),
|
||||||
|
2 => {
|
||||||
|
if y == 0 {
|
||||||
|
break 'mov;
|
||||||
|
}
|
||||||
|
(x, y - 1)
|
||||||
|
}
|
||||||
|
3 => {
|
||||||
|
if x == 0 {
|
||||||
|
break 'mov;
|
||||||
|
}
|
||||||
|
(x - 1, y)
|
||||||
|
}
|
||||||
|
_ => panic!(),
|
||||||
|
};
|
||||||
|
|
||||||
|
if x >= grid.len() || y >= grid[0].len() {
|
||||||
|
break 'mov;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
visited.len()
|
||||||
|
})
|
||||||
|
.max()
|
||||||
|
.unwrap()
|
||||||
|
}
|
||||||
|
|
|
@ -6,12 +6,10 @@ pub fn solve() {
|
||||||
let mut _contents = fs::read_to_string(path).expect("I/O error, wrong path?");
|
let mut _contents = fs::read_to_string(path).expect("I/O error, wrong path?");
|
||||||
//let contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?"));
|
//let contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?"));
|
||||||
|
|
||||||
|
|
||||||
let result: usize = 0;
|
let result: usize = 0;
|
||||||
|
|
||||||
println!("Result 1: {result}");
|
println!("Result 1: {result}");
|
||||||
|
|
||||||
|
|
||||||
let result: usize = 0;
|
let result: usize = 0;
|
||||||
|
|
||||||
println!("Result 2: {result}");
|
println!("Result 2: {result}");
|
||||||
|
|
|
@ -6,12 +6,10 @@ pub fn solve() {
|
||||||
let mut _contents = fs::read_to_string(path).expect("I/O error, wrong path?");
|
let mut _contents = fs::read_to_string(path).expect("I/O error, wrong path?");
|
||||||
//let contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?"));
|
//let contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?"));
|
||||||
|
|
||||||
|
|
||||||
let result: usize = 0;
|
let result: usize = 0;
|
||||||
|
|
||||||
println!("Result 1: {result}");
|
println!("Result 1: {result}");
|
||||||
|
|
||||||
|
|
||||||
let result: usize = 0;
|
let result: usize = 0;
|
||||||
|
|
||||||
println!("Result 2: {result}");
|
println!("Result 2: {result}");
|
||||||
|
|
|
@ -6,12 +6,10 @@ pub fn solve() {
|
||||||
let mut _contents = fs::read_to_string(path).expect("I/O error, wrong path?");
|
let mut _contents = fs::read_to_string(path).expect("I/O error, wrong path?");
|
||||||
//let contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?"));
|
//let contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?"));
|
||||||
|
|
||||||
|
|
||||||
let result: usize = 0;
|
let result: usize = 0;
|
||||||
|
|
||||||
println!("Result 1: {result}");
|
println!("Result 1: {result}");
|
||||||
|
|
||||||
|
|
||||||
let result: usize = 0;
|
let result: usize = 0;
|
||||||
|
|
||||||
println!("Result 2: {result}");
|
println!("Result 2: {result}");
|
||||||
|
|
|
@ -6,12 +6,10 @@ pub fn solve() {
|
||||||
let mut _contents = fs::read_to_string(path).expect("I/O error, wrong path?");
|
let mut _contents = fs::read_to_string(path).expect("I/O error, wrong path?");
|
||||||
//let contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?"));
|
//let contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?"));
|
||||||
|
|
||||||
|
|
||||||
let result: usize = 0;
|
let result: usize = 0;
|
||||||
|
|
||||||
println!("Result 1: {result}");
|
println!("Result 1: {result}");
|
||||||
|
|
||||||
|
|
||||||
let result: usize = 0;
|
let result: usize = 0;
|
||||||
|
|
||||||
println!("Result 2: {result}");
|
println!("Result 2: {result}");
|
||||||
|
|
|
@ -6,12 +6,10 @@ pub fn solve() {
|
||||||
let mut _contents = fs::read_to_string(path).expect("I/O error, wrong path?");
|
let mut _contents = fs::read_to_string(path).expect("I/O error, wrong path?");
|
||||||
//let contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?"));
|
//let contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?"));
|
||||||
|
|
||||||
|
|
||||||
let result: usize = 0;
|
let result: usize = 0;
|
||||||
|
|
||||||
println!("Result 1: {result}");
|
println!("Result 1: {result}");
|
||||||
|
|
||||||
|
|
||||||
let result: usize = 0;
|
let result: usize = 0;
|
||||||
|
|
||||||
println!("Result 2: {result}");
|
println!("Result 2: {result}");
|
||||||
|
|
|
@ -6,12 +6,10 @@ pub fn solve() {
|
||||||
let mut _contents = fs::read_to_string(path).expect("I/O error, wrong path?");
|
let mut _contents = fs::read_to_string(path).expect("I/O error, wrong path?");
|
||||||
//let contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?"));
|
//let contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?"));
|
||||||
|
|
||||||
|
|
||||||
let result: usize = 0;
|
let result: usize = 0;
|
||||||
|
|
||||||
println!("Result 1: {result}");
|
println!("Result 1: {result}");
|
||||||
|
|
||||||
|
|
||||||
let result: usize = 0;
|
let result: usize = 0;
|
||||||
|
|
||||||
println!("Result 2: {result}");
|
println!("Result 2: {result}");
|
||||||
|
|
|
@ -6,12 +6,10 @@ pub fn solve() {
|
||||||
let mut _contents = fs::read_to_string(path).expect("I/O error, wrong path?");
|
let mut _contents = fs::read_to_string(path).expect("I/O error, wrong path?");
|
||||||
//let contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?"));
|
//let contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?"));
|
||||||
|
|
||||||
|
|
||||||
let result: usize = 0;
|
let result: usize = 0;
|
||||||
|
|
||||||
println!("Result 1: {result}");
|
println!("Result 1: {result}");
|
||||||
|
|
||||||
|
|
||||||
let result: usize = 0;
|
let result: usize = 0;
|
||||||
|
|
||||||
println!("Result 2: {result}");
|
println!("Result 2: {result}");
|
||||||
|
|
|
@ -6,12 +6,10 @@ pub fn solve() {
|
||||||
let mut _contents = fs::read_to_string(path).expect("I/O error, wrong path?");
|
let mut _contents = fs::read_to_string(path).expect("I/O error, wrong path?");
|
||||||
//let contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?"));
|
//let contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?"));
|
||||||
|
|
||||||
|
|
||||||
let result: usize = 0;
|
let result: usize = 0;
|
||||||
|
|
||||||
println!("Result 1: {result}");
|
println!("Result 1: {result}");
|
||||||
|
|
||||||
|
|
||||||
let result: usize = 0;
|
let result: usize = 0;
|
||||||
|
|
||||||
println!("Result 2: {result}");
|
println!("Result 2: {result}");
|
||||||
|
|
|
@ -6,12 +6,10 @@ pub fn solve() {
|
||||||
let mut _contents = fs::read_to_string(path).expect("I/O error, wrong path?");
|
let mut _contents = fs::read_to_string(path).expect("I/O error, wrong path?");
|
||||||
//let contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?"));
|
//let contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?"));
|
||||||
|
|
||||||
|
|
||||||
let result: usize = 0;
|
let result: usize = 0;
|
||||||
|
|
||||||
println!("Result 1: {result}");
|
println!("Result 1: {result}");
|
||||||
|
|
||||||
|
|
||||||
let result: usize = 0;
|
let result: usize = 0;
|
||||||
|
|
||||||
println!("Result 2: {result}");
|
println!("Result 2: {result}");
|
||||||
|
|
|
@ -5,7 +5,7 @@ extern crate scan_fmt;
|
||||||
use std::time::Instant;
|
use std::time::Instant;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
days::d15::solve()
|
days::d16::solve()
|
||||||
//_all_days()
|
//_all_days()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue