Dag 6 aoc, duurt een minuut dus kan wrs slimmer
This commit is contained in:
7
advent_of_code/2024/6/Cargo.toml
Normal file
7
advent_of_code/2024/6/Cargo.toml
Normal file
@@ -0,0 +1,7 @@
|
||||
[package]
|
||||
name = "main"
|
||||
version = "0.1.0"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
nom = "7.1.3"
|
||||
130
advent_of_code/2024/6/input.txt
Normal file
130
advent_of_code/2024/6/input.txt
Normal file
@@ -0,0 +1,130 @@
|
||||
........#...#..................#.#............#....#....##.........#.............................................#................
|
||||
.#...............#...........................#..........#..........#....#........................................#............#...
|
||||
............#...........................................##.................#.......#............................................#.
|
||||
...#.......................##.........................................#..............................................#....#.......
|
||||
.......#....#......#...................................#............#............#.......#.......#.................#..............
|
||||
#......#........#..................................#..##........#...........#.....................#......#..................#.....
|
||||
......................#........#.....#.....................#.......##........#............#.#....#..#.......#.....................
|
||||
#.........................#.................#.............................................................#.......................
|
||||
.....#....#.................................#........#..#.........................#............#...#.........#...#..............##
|
||||
......................................................................................#...#......................#...#...#..#.....
|
||||
.................#........#.............................#........................#.....#..................#.......................
|
||||
...#.........................#.#..........#.....#..............................#..#...#...#.........#.............................
|
||||
.#............#.................#.....#..............#................#...........................................#...............
|
||||
...........#...#......#.........##................#...................................................#....#.#....................
|
||||
.................................#..................................................#..............................#...#..........
|
||||
.#...............#............#....................................#.....................#............#....................#.....#
|
||||
.#....#.....................#.....#.......................#......#......#...................................#.....#.........#...#.
|
||||
.............#...#...............................#...#...........#...............#....#....#..............................#.......
|
||||
...#......................................................................#.........................................#.............
|
||||
...#..................................#........#........#...................#.............#.......................................
|
||||
......................................................................................................................#........#..
|
||||
......................#.....................................#.....#.................#.........#..............#............#.......
|
||||
..........................#...................#....................................................................#........#.....
|
||||
...........#.....................................................#............#.....................#....................#........
|
||||
..............................#.....#......................................#..........#...#........#........................#.....
|
||||
.......................................#..................#.........#..#....................................................#..#..
|
||||
........................................................................#.................##..#...................................
|
||||
................#.#.....................#.......#..#..................#.........#.................................................
|
||||
........#......#......................#.........#..........................................#..........#....#..##....#.......#.....
|
||||
......................................#..........#...........................#..................................#......#..........
|
||||
..##...#..#......................#............................#...................#........#......................................
|
||||
.......#........#............#..................#....#...##.......................................................................
|
||||
....#......................#......#.............#................................#...#........#.........#.....................#..#
|
||||
......................#...#.........................#..................................###..............................#........#
|
||||
.....................................................................................#.....#...............#.......#..............
|
||||
............#.................................#..................#..........................................#.................#...
|
||||
..........#...................................#.............................#..........#................................#.........
|
||||
............................#..........................................................................#....#.............#.......
|
||||
...............#..#.........#.................................................................##........................#.......#.
|
||||
.............#..........................................................................#.........................................
|
||||
........................................#...#...#....................#...........#...........#....................................
|
||||
............................#................#..............#............................#.......#..#.............................
|
||||
................#...#.........#.............#.........#.......#...........................................#..#.....#..............
|
||||
.......#......#.#.............................................#.....#...#...........#.............................................
|
||||
.#....#...............#.........................#....................#........#..................................................#
|
||||
..........................................................#.................#.................................#...........##......
|
||||
....#.....................................#..........................#........#.....#........................#....................
|
||||
...##................................#........................................#..............#.....................#...#..#....#..
|
||||
..............#.......#..................................#..................#.....................#....#.....................#....
|
||||
.......................#......................................##..........#......#..............#.............................#...
|
||||
....#....................#............#.........................................................................................#.
|
||||
..........#..#.......#.....................#................#.#.....#.....#...........................#...........................
|
||||
.......................#..#.#.............................................#......#..........#.....................................
|
||||
...........#.........................................................................#..............#..............#..............
|
||||
............................................................#.....................................................................
|
||||
...................#....#..#..............#...........................................................#.......#.#.................
|
||||
..............#...#.#....#......#...........................................................................................#....#
|
||||
....................#.................................................................................#..#...#....................
|
||||
.......#...#...................#.............................................#..............###..........#........................
|
||||
...................................#................#.........................................................................#...
|
||||
..............#.......................#...................................#................................#......................
|
||||
...........................##........................#...............................#.........#..................................
|
||||
....................................................#..........##.......................................................#.........
|
||||
........................#................................##.................##.#...........................#.....................#
|
||||
..............................................................................................................#...................
|
||||
.............................#........#..........................#................................................................
|
||||
..........#..........#...............................................#...#................#......................................#
|
||||
................#...........#...............................................................................#................#....
|
||||
.....................#.............................................................................#..#................#.....#....
|
||||
#.................#....#.......................................#..........................#...###.......#..#.....#.#..#..........#
|
||||
............................................................^.............................#.#............................##....#..
|
||||
.#............#.................#......#..................................#....................##.................................
|
||||
......................................................................#.......#...............#..................#..........#.....
|
||||
.........................................#............................................#.....#.#.#..#..........................#...
|
||||
....................#.........................................................#.......#...#..#.....#..............................
|
||||
..........#......................................................##......#................#.....................#.................
|
||||
..........#.............................#..........................#...........#..#...............................................
|
||||
.................................#......#.............##...............................................................#..........
|
||||
........................................................................#.....#.....................##...##...........#...........
|
||||
..#..#.................................#......................#.........#.................#.......................##..............
|
||||
.....................................#..........................................................#.................................
|
||||
...................#...........#..........#............................#.........#................................................
|
||||
................#.................................................................................................................
|
||||
........................................#.....................##.......#........#................#....#................#..........
|
||||
.................#.............#........................#..................................#......................................
|
||||
......#............................#.......................................................#.....#........#.....#..............#..
|
||||
..........#..................................#.......................#............................................................
|
||||
...#..................................................#...........#....#....#.......................#.........................#...
|
||||
............................................#..#............................#..................#......#........#...........#..#...
|
||||
#........................#........................................................#...............................................
|
||||
.....#.#.#................................................##.#...................................#.....................#.#........
|
||||
....#................#..............#.....................................................#........#................#.............
|
||||
..........#........#...................................................#...........................#..............................
|
||||
....................#..#.........................#....#.......#....##.............#...............................................
|
||||
.................#...........................#...........#................................#...........................#...........
|
||||
......#...#....................................................................................................................#..
|
||||
......#.......#......................................#.........#.................#.#..........#.................................#.
|
||||
.......#........................###.........................#...................#................#.................#..............
|
||||
.##.........#.........#..............................................#...........................................#..#.#.........#.
|
||||
..........#..................#..........................................................#.....#..................#...............#
|
||||
......................#..............#.....................##................#..#.....#..........................#.#..............
|
||||
....#.#..#..............................#........#........................................................................#.......
|
||||
.........................#.....................#....#.....................#..........................................#............
|
||||
..#..#........#........................#................................#..................................#.#..................#.
|
||||
........#...#.....................##.........#.............................................................................#......
|
||||
....#...........#............................#.............................#...........#........#..............#..#...............
|
||||
......#...................#................#..................................................##.......#....................#.....
|
||||
.........#.##.....................................................................................................................
|
||||
........................................#......................#................#....#......................#...........#.........
|
||||
.#......#.#......#................#....#...#..............#...........#........................................#..................
|
||||
#...#......................................##.................................................................................#...
|
||||
.................#.........#...............................#......#.................#.......................................#...#.
|
||||
...#..#......#.........#...........#..............#...................................................................#.........#.
|
||||
...........#.#........................................#..............#............................................................
|
||||
...........................#.................................................................................#............#.......
|
||||
.............#......................................................#.................#..#..............#.........................
|
||||
...........#.....................................................#...............................#................#....#..........
|
||||
..........#....#........................#...........................................................................#.............
|
||||
.......................................................#..........................................#...................#...........
|
||||
..............#...........................................#.............................#..................#......................
|
||||
.................#....................................................#.....................................#...............#.....
|
||||
.......................................#........................#.........#................#........#............##.....#.........
|
||||
....#...#..............#........................#....................#........#...................................#...............
|
||||
......##.#......................................................................#.............#...................................
|
||||
....#.......................#..........#..#..............#..............#.#..........................#...............#....#.......
|
||||
.........................#......................#...........................#...............#......#.............#................
|
||||
.......#.........................#.......................................................................#........................
|
||||
.......................#........................................#...............##...........#...................#.....##...#.....
|
||||
.....#........................#.............#.........#.....#................#..............#..........................#..........
|
||||
.................#...................#....#...........#....#........................##.....#...#..................................
|
||||
188
advent_of_code/2024/6/src/main.rs
Normal file
188
advent_of_code/2024/6/src/main.rs
Normal file
@@ -0,0 +1,188 @@
|
||||
use std::{collections::HashSet, time::Instant};
|
||||
|
||||
use nom::{
|
||||
branch::alt,
|
||||
character::complete::{char, multispace1},
|
||||
multi::{many1, separated_list1},
|
||||
IResult, Parser,
|
||||
};
|
||||
|
||||
#[derive(Debug, PartialEq, Eq)]
|
||||
enum Tile {
|
||||
Start,
|
||||
Empty,
|
||||
Wall,
|
||||
Passed,
|
||||
}
|
||||
|
||||
fn parse(input: &str) -> IResult<&str, Vec<Vec<Tile>>> {
|
||||
let (input, result) = separated_list1(
|
||||
multispace1,
|
||||
many1(alt((char('.'), char('#'), char('^'))).map(|c| match c {
|
||||
'.' => Tile::Empty,
|
||||
'#' => Tile::Wall,
|
||||
'^' => Tile::Start,
|
||||
_ => unreachable!(),
|
||||
})),
|
||||
)(input)?;
|
||||
|
||||
Ok((input, result))
|
||||
}
|
||||
|
||||
fn proc(
|
||||
height: usize,
|
||||
width: usize,
|
||||
dir: &(i32, i32),
|
||||
pos: &(usize, usize),
|
||||
) -> Option<(usize, usize)> {
|
||||
let x = pos.0 as i32 + dir.0;
|
||||
let y = pos.1 as i32 + dir.1;
|
||||
|
||||
if x < 0 || y < 0 || x >= width as i32 || y >= height as i32 {
|
||||
None
|
||||
} else {
|
||||
Some((x as usize, y as usize))
|
||||
}
|
||||
}
|
||||
|
||||
fn turn(dir: (i32, i32)) -> (i32, i32) {
|
||||
match dir {
|
||||
(0, -1) => (1, 0),
|
||||
(1, 0) => (0, 1),
|
||||
(0, 1) => (-1, 0),
|
||||
(-1, 0) => (0, -1),
|
||||
_ => unreachable!(),
|
||||
}
|
||||
}
|
||||
|
||||
fn solve_1(input: &str) -> usize {
|
||||
use Tile::*;
|
||||
|
||||
let (_, mut tiles) = parse(input).unwrap();
|
||||
|
||||
let mut pos = (0, 0);
|
||||
for (y, row_of_tiles) in tiles.iter().enumerate() {
|
||||
for (x, tile) in row_of_tiles.iter().enumerate() {
|
||||
if let Start = tile {
|
||||
pos = (x, y);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
let h = tiles.len();
|
||||
let w = tiles[0].len();
|
||||
let mut dir = (0, -1);
|
||||
|
||||
loop {
|
||||
tiles[pos.1][pos.0] = Passed;
|
||||
|
||||
match proc(h, w, &dir, &pos) {
|
||||
None => break,
|
||||
Some(mut p) => {
|
||||
while tiles[p.1][p.0] == Wall {
|
||||
dir = turn(dir);
|
||||
p = proc(h, w, &dir, &pos).unwrap();
|
||||
}
|
||||
pos = p;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tiles.into_iter().fold(0, |sum, row_of_tiles| {
|
||||
sum + row_of_tiles
|
||||
.into_iter()
|
||||
.filter(|tile| *tile == Passed)
|
||||
.count()
|
||||
})
|
||||
}
|
||||
|
||||
fn solve_2(input: &str) -> usize {
|
||||
use Tile::*;
|
||||
|
||||
let (_, mut tiles) = parse(input).unwrap();
|
||||
|
||||
let mut pos = (0, 0);
|
||||
for (y, row_of_tiles) in tiles.iter().enumerate() {
|
||||
for (x, tile) in row_of_tiles.iter().enumerate() {
|
||||
if let Start = tile {
|
||||
pos = (x, y);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
let start = pos;
|
||||
|
||||
let h = tiles.len();
|
||||
let w = tiles[0].len();
|
||||
let mut result = 0;
|
||||
|
||||
for y in 0..h {
|
||||
for x in 0..w {
|
||||
match tiles[y][x] {
|
||||
Wall => continue,
|
||||
Start => continue,
|
||||
_ => tiles[y][x] = Wall,
|
||||
}
|
||||
pos = start;
|
||||
let mut visited = HashSet::new();
|
||||
let mut dir = (0, -1);
|
||||
|
||||
loop {
|
||||
if visited.contains(&(pos, dir)) {
|
||||
result += 1;
|
||||
break;
|
||||
}
|
||||
visited.insert((pos, dir));
|
||||
|
||||
match proc(h, w, &dir, &pos) {
|
||||
None => break,
|
||||
Some(mut p) => {
|
||||
while tiles[p.1][p.0] == Wall {
|
||||
dir = turn(dir);
|
||||
p = proc(h, w, &dir, &pos).unwrap();
|
||||
}
|
||||
pos = p;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tiles[y][x] = Empty;
|
||||
}
|
||||
}
|
||||
|
||||
result
|
||||
}
|
||||
|
||||
fn main() {
|
||||
println!("Hello, this is Patrick!");
|
||||
let now = Instant::now();
|
||||
|
||||
let input = include_str!("../input.txt");
|
||||
|
||||
let result_1 = solve_1(input);
|
||||
println!("The number of walked tiles is {}", result_1);
|
||||
|
||||
let result_2 = solve_2(input);
|
||||
println!("The number of possible obstructions is {}", result_2);
|
||||
|
||||
println!("Time passed: {:?}", Instant::now() - now);
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test_1() {
|
||||
let test_input = include_str!("../test.txt");
|
||||
assert_eq!(solve_1(test_input), 41);
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_2() {
|
||||
let test_input = include_str!("../test.txt");
|
||||
assert_eq!(solve_2(test_input), 6);
|
||||
}
|
||||
}
|
||||
10
advent_of_code/2024/6/test.txt
Normal file
10
advent_of_code/2024/6/test.txt
Normal file
@@ -0,0 +1,10 @@
|
||||
....#.....
|
||||
.........#
|
||||
..........
|
||||
..#.......
|
||||
.......#..
|
||||
..........
|
||||
.#..^.....
|
||||
........#.
|
||||
#.........
|
||||
......#...
|
||||
Reference in New Issue
Block a user