day21/p1: added
This commit is contained in:
parent
85cc09aecc
commit
5dd5dc53d5
|
@ -1 +1,96 @@
|
||||||
const INPUTS: [&'static str; 2] = [include_str!("./sample.txt"), include_str!("./input.txt")];
|
#![feature(iter_intersperse)]
|
||||||
|
#![feature(test)]
|
||||||
|
|
||||||
|
extern crate test;
|
||||||
|
|
||||||
|
const INPUTS: [&str; 2] = [include_str!("./sample.txt"), include_str!("./input.txt")];
|
||||||
|
|
||||||
|
fn process(data: &str) -> i64 {
|
||||||
|
const N: i32 = 64;
|
||||||
|
|
||||||
|
let mut grid: Vec<Vec<char>> = data.lines().map(|x| x.chars().collect()).collect();
|
||||||
|
|
||||||
|
let m = grid.len();
|
||||||
|
let n = grid[0].len();
|
||||||
|
|
||||||
|
let mut sx = 0;
|
||||||
|
let mut sy = 0;
|
||||||
|
|
||||||
|
for i in 0..m {
|
||||||
|
for j in 0..n {
|
||||||
|
if grid[i][j] == 'S' {
|
||||||
|
sx = i;
|
||||||
|
sy = j;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
grid[sx][sy] = '.';
|
||||||
|
|
||||||
|
let mut visited = vec![vec![-1; n]; m];
|
||||||
|
|
||||||
|
for i in 0..m {
|
||||||
|
for j in 0..m {
|
||||||
|
if grid[i][j] == '#' {
|
||||||
|
visited[i][j] = std::i32::MIN;
|
||||||
|
} else {
|
||||||
|
visited[i][j] = -1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
visited[sx][sy] = 0;
|
||||||
|
|
||||||
|
for step in 1..=64 {
|
||||||
|
let mut next_visited = visited.clone();
|
||||||
|
|
||||||
|
for i in 0..m {
|
||||||
|
for j in 0..n {
|
||||||
|
if visited[i][j] == std::i32::MIN {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if step - visited[i][j] > 1 {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (x, y) in [(0i32, 1i32), (1, 0), (0, -1), (-1, 0)].iter() {
|
||||||
|
let p = x + i as i32;
|
||||||
|
let q = y + j as i32;
|
||||||
|
|
||||||
|
if p < 0 || q < 0 || p >= m as i32 || q >= n as i32 {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if grid[p as usize][q as usize] == '#' {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if step - visited[p as usize][q as usize] == 1 {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
next_visited[p as usize][q as usize] = step;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
visited = next_visited;
|
||||||
|
}
|
||||||
|
|
||||||
|
visited
|
||||||
|
.into_iter()
|
||||||
|
.fold(0, |a, x| a + x.into_iter().filter(|&x| x == N).count()) as i64
|
||||||
|
}
|
||||||
|
|
||||||
|
fn main() {
|
||||||
|
for input in INPUTS.iter() {
|
||||||
|
println!("answer = {}", process(input));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[bench]
|
||||||
|
fn part1(b: &mut test::Bencher) {
|
||||||
|
b.iter(|| {
|
||||||
|
let v = process(INPUTS[INPUTS.len() - 1]);
|
||||||
|
test::black_box(v);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
const INPUTS: [&'static str; 2] = [include_str!("./sample.txt"), include_str!("./input.txt")];
|
|
131
src/day21/input.txt
Normal file
131
src/day21/input.txt
Normal file
|
@ -0,0 +1,131 @@
|
||||||
|
...................................................................................................................................
|
||||||
|
.......#.#.#.#.....#.#...##..........#........##....#......#...............##........#..#...##.......###....#.##........#.#....#...
|
||||||
|
.###............#........#......#.....#...................................#............#..........#.....#..##.#.......#.....#......
|
||||||
|
.......#....#...##......#..............##.###....##......#..................#.....#..#.....#...#.#....#................#....#.##...
|
||||||
|
..............#................#..#.#...#......#.#..#....................##....#..#.#.....#.#..........#...#.#......#...#..#.......
|
||||||
|
.....#.....#............##.#.....#......#..#...................................#......##..#.#..........#.#..##..#................#.
|
||||||
|
.#....#......##.#...#..#.....#................##.#....#.............................##...#...#........#....#.......................
|
||||||
|
....#.....#................#.....##...............#...............#...........#..#...........#.........#.............#........#....
|
||||||
|
.........#.................#...........#......#...#...............#...........#....#....#..........#...#.#.##.................#....
|
||||||
|
.........#....#..#.....#..#..#.#....#...#......................#................####...#.....#..........#.......#..#........#......
|
||||||
|
..............#.##...............#.#.#..........#..#............#.........................................#.#.#............#.#.....
|
||||||
|
..............#...#.....#...#....##.............##............##..#.................###........#....#.#.......................#..#.
|
||||||
|
......#.....##..#....#.#......#.#....#..#.#.....#............................................##.#.....#.#.......#......#.#.#.......
|
||||||
|
........#.............#.............#.....#................#.......#.....................#...#.........#..#...##..##...##..###.....
|
||||||
|
.......#..........................#........................................#........###..##......#.#.....#....#....#....#.......#..
|
||||||
|
...#......#.#..........#..#..........#..#.....#..........#........#.......................#....#.......#...##.............#.#......
|
||||||
|
..#..##...#...........#.#.#.##........##..#...................#....##..##..##...............#....#...........#......##..#.......#..
|
||||||
|
....................#.#...#.........##....................#.....#.....#..#....................................#.#.#........#.#.....
|
||||||
|
............##.#..#.#..#............#..#..#...........#.........#...#...............................#...............#...#........#.
|
||||||
|
.......##......#..............###......#............#.....#..........#..#.#.....#............#.#.......#..#...............#.....#..
|
||||||
|
.......###.......#......#..#..#...#...#...........#......#.........#...........#...................#.....##..........#....#........
|
||||||
|
..#...#.#..................##........................#..............##.....#.#.......................#...#..#...#..................
|
||||||
|
.........#.......#...#...#.....#......#..............##.......##....#.............##..............##.....#....................#....
|
||||||
|
..#....#.....#.....#............................#.#.......#.............#.....................#.........#.......#....##.#..........
|
||||||
|
...#.#...#........#....#........#.#...............#..##......#........#.........#...................#...#.......#...#......#...#...
|
||||||
|
.......................#..#..#.....#............#.#...#..#...........#.......##....#.#................#...................#....#...
|
||||||
|
.........#....#.#..........#.#....#..................#..............#...#...#..........#..........#.............##..#.......#..#...
|
||||||
|
...#......#.#......#.....#.##.#...#.....................#....##............#......#...#.........##...............#...............#.
|
||||||
|
........#.......#...................................#....#...............#....#.##..#............#...#........................#....
|
||||||
|
.......................#.......#..............#........#.#............#............................#...#......#..#..#.##.#.........
|
||||||
|
......#...#.##.............................##.#...................#..#......#.#...#...##..#.........##......#..#....#........#..#..
|
||||||
|
.........#.#............#................#...#.##......#..#.....#.##....##.#...........#....................#.............#........
|
||||||
|
.....#...#.........#...#.#...#.........#...#....#......#......##...#..#........#.....#.....#.............##.........#..........#...
|
||||||
|
.....#.......#............#.#............###..#..#.#.....#.##.......#.#.............##..##.....................#.#.......#..##.....
|
||||||
|
.#...#.....#...#.......................#...#.##...#....#........#.....#...#..................#............##..#...#....#.##.#...#..
|
||||||
|
......##.............#...#.........#.....#.....#..#........#......#..#......#..##...#..##.....#.#.................#..#.........#...
|
||||||
|
.........#..........#.#............###.................#..#.....#.....#..#...#..........#........#..........#.................#....
|
||||||
|
..#..........#....................#.....#..#...#....#.....#..#............#....#..#.........##..##..........#....#......#..........
|
||||||
|
.........#..........#..#.......#............#...........#.......#..#...........#.......##.....................#.......#............
|
||||||
|
...#...........................#..#.........#.#.....#.........#..........#........##.......#...#...............#....##.#.#....#....
|
||||||
|
....##.....#...#.......................#..#...#......#....#.#.....#..##.......#.........##.....................................#...
|
||||||
|
.#......#....##...#............#.....#..#........#......#...##.......#...#...#.#...#.#.....##..........................#..#........
|
||||||
|
.#.......##...................#..#......#..#..................##....#..#....#..##.......#..#.....###................#.#............
|
||||||
|
..............#.............#..#....#.....#.......#..#....##.........#..#.#.....###.......#.....##...##..........#..........#......
|
||||||
|
..#.#..#.................#......#...#.#...#......#...#.............#...#..##...............#........#............##.#.....#........
|
||||||
|
........#.....#.................#.....##.....#.#...#..#...........#..............#...#........#........##..............#...........
|
||||||
|
.#......#........................#..##.#........##......##....#...#........#..#...#..##.........#....#...............#.............
|
||||||
|
....#.....##..#............##.........#...#......#.#.....#.........#.#.#....###......................#...#.........................
|
||||||
|
.........###............##..........#.#.#.....#.....#..###.....................##.....#.....#....#.#...............................
|
||||||
|
...#.#.#............#..#.........###.....####.......#.....#...................#..##..##.......#....................................
|
||||||
|
.#.#.....#.#...............................#..#.......##........................#...#....#...##.#...#....................##........
|
||||||
|
...#.....................#...#...............#...#..#...#....#......##....#.#..#.#......#...#........#.....##.................##...
|
||||||
|
.........#.........#..#...#.#.#...#...#..........#......####.#.......#................#.........###...#..#.........................
|
||||||
|
....##..........#.........#..................#....#....#........#...#.........#..##...#....##.....#.#..........#..#..........#.....
|
||||||
|
...#............#...#..#.#.#.....#..##.#..#.......................#..#.....#....#...#.....#.....#..........#...#...#...............
|
||||||
|
.#..................................#..#..#..............#...#.....#...#................#.....#...#...........##..#................
|
||||||
|
....##................#....#.......#..#....#....#............##..........##...#.......#.......#...........#....#...................
|
||||||
|
....#..........#..........#..##......#.......###...........#............#..........#...#.#.#........#.#.#.#.#.#......#..........#..
|
||||||
|
............#...........................................#.......#.##.#.....................#..#..#..#.............#..............#.
|
||||||
|
...........#...#.........#.#....#................#.....#........#..#...#.#.....#..........#....................#...#..#............
|
||||||
|
...........#.#...#....#.....#..#..........#...#.#..#..#.#.........#.#.##........#......#................#...........#..............
|
||||||
|
................................................#..#..#....#.........#.............#....###..#...............#...#.......#.........
|
||||||
|
............................#...#..#......##......#...#........#....#.....#.....#...#..#...#..........................###.#........
|
||||||
|
..............#............#...#.#...##.......##.....#.##..........#....#............#.......#......##.#....#.......#..............
|
||||||
|
...........#.##.##..#.#.#.........###........#...#...#................#.#...............#..#.#........##........#.##.......#.......
|
||||||
|
.................................................................S.................................................................
|
||||||
|
.............#.#......#..##..#.............#...........#..........#..##.#...............#..###..............#...#.##.##....#.......
|
||||||
|
......#......##..#...............#..#............##.......#.#.......##..#...#.....##........#.................#....#......#........
|
||||||
|
..........#..........#.#........#....#......#........#.....#.............#....#..............#.#..#...#.............#..............
|
||||||
|
...........#........##.#.......#...#....#........#.#.....#........#..#..........#......##.....#...............#....#....#..........
|
||||||
|
...........#............#.....#..#.............#..#....#.#.....##............#.......#.......#............#.#..##..................
|
||||||
|
...........##..#...#.....##.........##.......#.......#.............#...#......#...##........#..#....#.......##..........#..........
|
||||||
|
.............#.......#......#..#...##..#.................................####...#......#.............#..#..#.......#...............
|
||||||
|
................#............#........#...##......##...................#..#...#.........#..#.........................#.............
|
||||||
|
.........................#...##.#......#...........#........#........#...............###....#.#........#............#..............
|
||||||
|
...#...........##........#..##.....#.....#.##......#....#..#........#.................#.#.........#........##..#..#................
|
||||||
|
..#.............#.##....#......#...#.#.......#.......#.................#.....#.....#.............###......#...#............##......
|
||||||
|
........................#.....#..##.........#.....#.....#..#........#...#.....#.....#....#......#...##..#...#.............#..#.....
|
||||||
|
......#........................#.....#..#...#....#......#....#..#.#.#...#.....#..#......#..#..#...#...#..#..#...............#......
|
||||||
|
..........#...........#......##.#.#............#...................##.....#..#...##....#..........#........#.............#.........
|
||||||
|
.#.......................#.....#..........#..##....#....#...............##......#.#..#.###..............................#..#..#....
|
||||||
|
.......................#........##......#.#......#......####..........#..#........#.#...........#..#.#..#.....#....................
|
||||||
|
....##.....................#..#.......###.................##.......#...#..#.###..#...#..###........#....#.#.............##....#....
|
||||||
|
........#..#............#...#.........#........#....#.##.......#...#.......#..#.#.......................................###........
|
||||||
|
.......##.....#..............#..#....#..#...............#......#................#................##......#.............#.#.........
|
||||||
|
....#......##...........###.....##................#...#....##.#......#....................#...##.#.......#............###...#......
|
||||||
|
.#...#.........#..........#..#.##.#.#...........#.#.........##....#.#......#........#.....#..#..........##.............#...#....##.
|
||||||
|
.........#.#.#....#..........#.....#...#..#.#...............#..........#....................##........................#.##....#..#.
|
||||||
|
........###..#..................#...#.....#.................#.#....#........#................#...#...........................#...#.
|
||||||
|
.....#.#..#........#.............#.........#.............#..###......#..#.#....#................##.....................##..........
|
||||||
|
.#......###....#....#........#.#..#...#.#..#.#...#........................#.........#...#.........#..........#.......#.........#...
|
||||||
|
..#.....#...........###........#.............#......#......#..........##.......#.#.#....#...#.................#...........#........
|
||||||
|
.....#........#..#..#................#......#....#.........#.##.......#...........#...........#.#............#.#....#......##......
|
||||||
|
.....#...##.#.....................#......................................#.#..#.#.....#.......#.#............####.#................
|
||||||
|
.......#...#......................####..#..#.............#..#.................#.....#...........#............#..#..........#.......
|
||||||
|
.##.............#...#.#...........................#..........##............#.......#.#......#............#........#................
|
||||||
|
.......#.......#.......#................#......#.#.#...#.............#........#........#.....#.#..............#....................
|
||||||
|
.#....#......#.#....#.................#.................##..............................#...............#.....###....#......#....#.
|
||||||
|
........##...............................#........#.............................#.....#..####.............#...#..#.........##.##...
|
||||||
|
.#.#............#..#..........#.......#......##.#.#..........#.........##.....#...........#..................#......##.......#.....
|
||||||
|
.................##.....#.#..............#.#.#.###...#.............#.#....#.....##...#.##..#...........#.#.#....#..................
|
||||||
|
..#.#..#..#................................#.#.......##.............#.#..........###................#.....##....#..................
|
||||||
|
........#........#.##..#.....##.#........#.#...#..#..#.....#...#....#.#.......#...#.....#..............#.........#.#...#...........
|
||||||
|
........#.....##..#..#......................#................#...............#...#.#.#..........#.#.##......................#......
|
||||||
|
........#......#.....#.#.......#............#...........##...............#............#...........#..........#.#..........#.#......
|
||||||
|
......###.....#.................###................#......#........#...#.#.#...#....#.#.........#...#...##........#...#............
|
||||||
|
..#.##..#..#....#.....##..........#............#................#.#..#.........................#.##..##..........##....#...#.....#.
|
||||||
|
....#............#.#..#...#......#..............#..#....##...#..#.....#.........#...#...........#..........#.#......#.#...##.###...
|
||||||
|
....#................#.........#...............##..#...........#.......#.#..#.......................#....#...##........#...........
|
||||||
|
....#....................##......#...#...........#.......#.#..#..............##.#....................#....#...................#....
|
||||||
|
...#..............##......#..............#...........#.......#......#........##.............#.........#...#.#..##..................
|
||||||
|
....#........#.#....#....#.#.....#........#..........................#..#.#.#.#.........#..........#.##...#.##..###.....#..........
|
||||||
|
.#.......#.#............#..#....#.......#.#............#..........#.#........##.............#...#..#....#..........#..........#....
|
||||||
|
...#...#......#..............#...##.......#..........#.....#......##...#..............#................#..............#...##..##...
|
||||||
|
....#......#.##..##....#.....................#..........#....##......#................#.......#.#..................#......#.#......
|
||||||
|
...#...............#..#..........#..#.....#..##............#.......###...........................##................#...#...........
|
||||||
|
........#....#........#.......#....#..#.#..................#.............##.............#..#.......##..........................#...
|
||||||
|
.#....................#......#.#........#..................#.##.#..#.....#.........##................................#.............
|
||||||
|
.......#....................#..#................#......................................##..........#.....#..##..#..........#.#..#..
|
||||||
|
..#.....#..#....#.....#......#..##...#.........#.........................................#...#....#.........#...##.......#.#.....#.
|
||||||
|
...........#..........#..#.#...#...##..#.........#.#...........#....#..............#.............#.......##..#...#....##.......#...
|
||||||
|
..#.........#.#..#...#.....#......................#..........#........#.......#....................#...##......#.................#.
|
||||||
|
.#......#...#.#.#......#.#........#.#......#....#....#............................#......####............#.......#..#..........##..
|
||||||
|
.#......##..........#...#...........#....#...#.#.................................#.##...#......................#..#..........#.#...
|
||||||
|
.....#...#.......#...................##.#....#...##............#..##.........#..................#..#......#..........#....#.....##.
|
||||||
|
.#..................#..........#.....................#.#.........................#...........#...##...#...#...##.#.................
|
||||||
|
.#..#..#..#..#......#........#........#.......#.#...#.#..................#.......#.......#..#.#......#...#...............#.....#...
|
||||||
|
.#........#......................#...##.......#..##......................###......#.....##....#..#................#................
|
||||||
|
.#...........#.............#..#.....##.........#.##........#.............#....#.#...........#...............#.........#........#...
|
||||||
|
......#....#.#...###................#....#......#..#........#.........................##.##...#..#..#.#......#.....................
|
||||||
|
...................................................................................................................................
|
11
src/day21/sample.txt
Normal file
11
src/day21/sample.txt
Normal file
|
@ -0,0 +1,11 @@
|
||||||
|
...........
|
||||||
|
.....###.#.
|
||||||
|
.###.##..#.
|
||||||
|
..#.#...#..
|
||||||
|
....#.#....
|
||||||
|
.##..S####.
|
||||||
|
.##..#...#.
|
||||||
|
.......##..
|
||||||
|
.##.#.####.
|
||||||
|
.##..##.##.
|
||||||
|
...........
|
Loading…
Reference in New Issue
Block a user