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() {
 | 
			
		||||
    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 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}");
 | 
			
		||||
 | 
			
		||||
    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}");
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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 contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?"));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    let result: usize = 0;
 | 
			
		||||
 | 
			
		||||
    println!("Result 1: {result}");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    let result: usize = 0;
 | 
			
		||||
 | 
			
		||||
    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 contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?"));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    let result: usize = 0;
 | 
			
		||||
 | 
			
		||||
    println!("Result 1: {result}");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    let result: usize = 0;
 | 
			
		||||
 | 
			
		||||
    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 contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?"));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    let result: usize = 0;
 | 
			
		||||
 | 
			
		||||
    println!("Result 1: {result}");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    let result: usize = 0;
 | 
			
		||||
 | 
			
		||||
    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 contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?"));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    let result: usize = 0;
 | 
			
		||||
 | 
			
		||||
    println!("Result 1: {result}");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    let result: usize = 0;
 | 
			
		||||
 | 
			
		||||
    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 contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?"));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    let result: usize = 0;
 | 
			
		||||
 | 
			
		||||
    println!("Result 1: {result}");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    let result: usize = 0;
 | 
			
		||||
 | 
			
		||||
    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 contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?"));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    let result: usize = 0;
 | 
			
		||||
 | 
			
		||||
    println!("Result 1: {result}");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    let result: usize = 0;
 | 
			
		||||
 | 
			
		||||
    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 contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?"));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    let result: usize = 0;
 | 
			
		||||
 | 
			
		||||
    println!("Result 1: {result}");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    let result: usize = 0;
 | 
			
		||||
 | 
			
		||||
    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 contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?"));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    let result: usize = 0;
 | 
			
		||||
 | 
			
		||||
    println!("Result 1: {result}");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    let result: usize = 0;
 | 
			
		||||
 | 
			
		||||
    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 contents = BufReader::new(fs::File::open(path).expect("I/O error, wrong path?"));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    let result: usize = 0;
 | 
			
		||||
 | 
			
		||||
    println!("Result 1: {result}");
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    let result: usize = 0;
 | 
			
		||||
 | 
			
		||||
    println!("Result 2: {result}");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,7 +5,7 @@ extern crate scan_fmt;
 | 
			
		|||
use std::time::Instant;
 | 
			
		||||
 | 
			
		||||
fn main() {
 | 
			
		||||
    days::d15::solve()
 | 
			
		||||
    days::d16::solve()
 | 
			
		||||
    //_all_days()
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue