parse 2022/12
This commit is contained in:
parent
77f1559f9f
commit
00f656fa07
|
@ -0,0 +1,41 @@
|
||||||
|
abcccaaaaacccacccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaacaccccccaaacccccccccccccccccccccccccccccccccccaaaaaaaaccccccccccccccccccccccccccccccccaaaaaa
|
||||||
|
abcccaaaaacccaaacaaacccccccccccccccccaaccccccacccaacccccccccccaacccccaaaaaaaaaaaccaaaaaaccccccccccccccccccccccccccccccccccaaaaaccccccccccccccccccccccccccccccccccaaaaaa
|
||||||
|
abccccaaaaaccaaaaaaaccccccccccccccaaaacccccccaacaaacccccccccaaaaaacccaaaaaaaaaaaccaaaaaacccccccccccccccccccccccccccccccccccaaaaaccccccccccccccaaacccccccccccccccccaaaaa
|
||||||
|
abccccaacccccaaaaaacccccccccccccccaaaaaacccccaaaaaccccccccccaaaaaacaaaaaaaaaaaaaccaaaaaacccccccccccccccccccccccccccccccccccaacaaccccccccccccccaaaaccccccccccccccccccaaa
|
||||||
|
abccccccccccaaaaaaaacccccccccccaaccaaaaaccccccaaaaaacccccccccaaaaacaaaaaaaaccccccccaaaaacccccccccccccccccccccccccccccccccccaacccccccccccccccccaaaaccaaacccccccccccccaac
|
||||||
|
abaaaaaccccaaaaaaaaaaccccccaaccaacaaaaacccccaaaaaaaaaaacccccaaaaacaaaacaaaaacccccccaacaacccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaaaaaaacccccccccccaaac
|
||||||
|
abaaaaaccccaaaaaaaaaacaacccaaaaaacaccaacccccaaaaaaaaaaacccccaaaaaccccccaaaaaccccccccccaacccccccccccccccccccccccccccccccccccccccccccccccccccccccaaaakkkllccccccccccccccc
|
||||||
|
abaaaaacccccccaaacaaaaaaccccaaaaaaaccccccaaacccaacccaaaaaaacccccccccccccaaaaacccccccccaaaaaaccccccccccccccccccccccccccaaccccccccccccccccccccccackkkkkklllccccaaaccccccc
|
||||||
|
abaaaaacccccccaaacaaaaaaacccaaaaaaaccccccaaaacaaacaaaaaaaacccccccccccccaaaaaacccccccccaaaaaaccaacaacccccccccccccccaaaaaacccccccccccccccccccaaakkkkkkkkllllcccaaacaccccc
|
||||||
|
abaaaaaccccccccaacaaaaaaaacaaaaaaccccccccaaaaaaacaaaaaaaaacccccccccccccaaaacccccccccaaaaaaacccaaaaacccccccccccccccaaaaaaccccccccccccccccjjjjjkkkkkkpppplllcccaaaaaacccc
|
||||||
|
abaaaccccccccccccccaaaaaaacaaaaaacccccccccaaaaaaccaaaaaaaccccccccccccccccaaaccccccccaaaaaaaccccaaaaacccccccccccccccaaaaaaaccccaaccccccjjjjjjjkkkkppppppplllcccaaaaacccc
|
||||||
|
abccccccccccccccccaaaaaacccccccaaccccccaaaaaaaacccccaaaaaaccccccccccccccccccccccccccccaaaaaaccaaaaaacccccccccccccccaaaaaaaaaacaacccccjjjjjjjjjkooppppppplllcccaaacccccc
|
||||||
|
abccccccccccccccccaaaaaacccccccccccccccaaaaaaaaacccaaacaaacccccccccccccccccccccccaaaccaaccaaccaaaaccccccccccccccccaaaaaaaccaaaaaccccjjjjooooooooopuuuupppllccccaaaccccc
|
||||||
|
abccccccccccccccccccccaaccccccccccccccccaaaaaaaacccaaaccaacccccccccccccccccccccccaaaaaaacccccccaaaccccccccccccccccaaaaaaccccaaaaaaccjjjoooooooooouuuuuupplllccccaaccccc
|
||||||
|
abccaaaaccccaaacccccccccccccccccccccccccccaaaaaaaccaaccccccccccccaacccccccccccccccaaaaacccaaccaaaccccccccccccccccccccaaacccaaaaaaaccjjjoootuuuuuuuuuuuuppllllccccaccccc
|
||||||
|
abccaaaaaccaaaacccccccccccccccccccccccccccaacccacccccccccccccccacaaaacccccccccccaaaaaaacccaaaaaaacccccccccccccccccccccccccaaaaaacccciijnoottuuuuuuxxyuvpqqlmmcccccccccc
|
||||||
|
abcaaaaaaccaaaacccccccaaaaccccccccccacccccaaccccaaaccccccccccccaaaaaacccccccccccaaaaaaaaccaaaaaacccccccccccccccccaacccccccaacaaacccciiinntttxxxxuxxyyvvqqqqmmmmddddcccc
|
||||||
|
abcaaaaaacccaaacccccccaaaaccccaaaaaaaaccaaaaccccaacaacccccccccccaaaaccccccccccccaaaaaaaacccaaaaaaaacccccccccccccaaaaccccccccccaacccciiinntttxxxxxxxyyvvqqqqqmmmmdddcccc
|
||||||
|
abcaaaaaacccccccccccccaaaacccccaaaaaacccaaaaaaaaaaaaacccccccccccaaaaccccccccccccccaaacacccaaaaaaaaacccccccccccccaaaacccccccccccccccciiinnnttxxxxxxxyyvvvvqqqqmmmdddcccc
|
||||||
|
abcccaaccccccccccccccccaaccccccaaaaaacccaaaaaaaaaaaaaaccccccccccaacaccccccccccccccaaaccccaaaaaaaaaacccccccccccccaaaacccccccccccccccciiinnntttxxxxxyyyyyvvvqqqqmmmdddccc
|
||||||
|
SbccccccccccccccccccccccccccccaaaaaaaaccaaaccaaaaaaaaacccccccccccccccccccccccccccccccccccaaaaaaacccccccccaacccccccccccccccccccccccccciiinntttxxxxEzyyyyyvvvqqqmmmdddccc
|
||||||
|
abcccccccccccccccccccccccccccaaaaaaaaaacccccccaaaaaacccccccccccccaaacccccaacaacccccccccccccccaaaaaaccccccaacaaacccccccccccccccccccccciiinntttxxxyyyyyyyvvvvqqqmmmdddccc
|
||||||
|
abcccccccccccccccccccccccccccaaaaaaaaaaccccccaaaaaaaaccccccccccccaaaccccccaaaacccccccccccccccaaaaaaccccccaaaaacccccccccccccccccccccciiinnnttxxyyyyyyyvvvvvqqqqmmmdddccc
|
||||||
|
abcccccccccccccccccccccccccccacacaaacccccccccaaaaaaacccccccccccaaaaaaaacccaaaaacccccccccccccccaaaaaaaacaaaaaaccccccccccccccccccccccciiinntttxxwyyyyywwvvrrrqqmmmdddcccc
|
||||||
|
abaccccccccccccccccccccccccccccccaaacccccccccaaacaaaaacccccccccaaaaaaaaccaaaaaacccccccccccccccaaaaaaaacaaaaaaacccccccccccccccccccccchhnnnttwwwwwwwyyywvrrrrnnnnmdddcccc
|
||||||
|
abaccccccccccccccccccccccccccccccaaccccccccccccccaaaaaacccccccccaaaaaccccaaaacaccccccccccccccccaaaaacccccaaaaaaccccccaaaccccccaaaccchhnmmttswwwwwwywwwrrrrnnnnneeeccccc
|
||||||
|
abaccccccccccccccccccccccccccccccccccccccccccccccaaaaaacccccaaccaaaaaacccccaaccccccccccccccccccaaaaaaccccaaccaaccccaaaaaacccccaaacahhhmmmsssssssswwwwwrrrnnnneeeecccccc
|
||||||
|
abaaaccccccccccccccccccccccccccccaaaccccccccccccccaaaaaccccaaaccaaaaaacccccccccccccccccccccccccaaaaaaccccaaccccccccaaaaaacccaaaaaaahhhmmmmsssssssswwwwrrnnnneeeeacccccc
|
||||||
|
abaaaccccccccccccccccccccccccccccaaaaaaccccccccccaaaaacaaaaaaaccaaaccaccccccccaaaaaccccccccccccaaaacacccccccccccccccaaaaacccaaaaaaahhhhmmmmssssssswwwwrrnnneeeeaacccccc
|
||||||
|
abaaacccccccccccccccccccccccccccaaaaaaaccccccccccaaaaacaaaaaaaaaacccaaaaacccccaaaaacccccccccacaaaaaccacccccccccccccaaaaacccccaaaaaachhhmmmmmmmmmsssrrrrrnnneeeaaaaacccc
|
||||||
|
abaccccccccccccccaaaaccccccccccaaaaaaaacccccccccccccccccaaaaaaaaacccaaaaaccccaaaaaacccccccccaaaaaaaaaacccccccccccccaaaaaccccccaaaaachhhhmmmmmmmooossrrronneeeaaaaaacccc
|
||||||
|
abaccccccccccccccaaaaccccccccccaaaaaaacccccccccccccccccccaaaaaaaccccaaaaaacccaaaaaaccccaaaccaaaaaaaaaacccccccccccaaccccccccccaaaaaacchhhhhggggooooorrroonnfeeaaaaaccccc
|
||||||
|
abcccccccccccccccaaaaccccccccccccaaaaaacccccccccccccccccaaaaaaccccccaaaaaacccaaaaaaccccaaaaaacaaaaaacccccccccaaccaacccccccccccaacccccchhhhggggggoooooooooffeaaaaacccccc
|
||||||
|
abccccccccccccccccaacccccccccccccaaaaaacccccccaaccacccccaaaaaaacccccaaaaaaccccaaaccccccaaaaaacaaaaaacccccccccaaaaacccccccccccccccccccccccgggggggggooooooffffaaaaaaccccc
|
||||||
|
abccccccccccccccccccccccccccaaaccaacccccccccccaaaaacccccaaccaaacccccccaaacccccccccccccaaaaaaacaaaaaacccccccccaaaaaaaaccccccccccccccccccccccaaaggggfooooffffccccaacccccc
|
||||||
|
abaaccccccccccccccccccccccccaaacaccccccccccccaaaaacccccccccccaacccccccaaaacccaacccccccaaaaaaaaaaaaaaaccccccccccaaaaacccccccccccccaaaccccccccccccggfffffffffcccccccccccc
|
||||||
|
abaaccccccccccccccccccccccaacaaaaacccccccccccaaaaaacccccccccccccccccccaaaacaaaacccccccaaaaaaaaaccccaccccccccccaaaaaccccccccccccccaaaccccccccccccagfffffffccccccccccccca
|
||||||
|
abaacccccccaacccccccccccccaaaaaaaaccccccaacccccaaaacccccccccccccccccccaaaaaaaaacccccccccaaacaacaaacccccccccccaaacaaccccaaccaaccaaaaaaaaccccccccaaaccffffcccccccccccccaa
|
||||||
|
abaaaaaaaccaaccccccccccccccaaaaacccccccaaaacccaaccccccccccccccccccacaaaaaaaaaaccccccccccaaacaaaaaacccccccccccccccaaccccaaaaaaccaaaaaaaacccccccccaacccccccccccccccaaacaa
|
||||||
|
abaaaaaaaaaaccccccccccccccccaaaaaccccccaaaacccccccccccccccccccccccaaaaaaaaaaaaccccccccccccccaaaaaacccccccccccccccccccccaaaaaacccaaaaaacccccccccaaacccccccccccccccaaaaaa
|
||||||
|
abaaaacaaaaaaaacccccccccccccaacaaccccccaaaaccccccccccccccccccccccccaaaaaaaaaaacccccccccccccaaaaaaaacccccccccccccccccccaaaaaaaaccaaaaaaccccccccccccccccccccccccccccaaaaa
|
|
@ -0,0 +1,61 @@
|
||||||
|
#![feature(test)]
|
||||||
|
extern crate test;
|
||||||
|
use aoc2022::{
|
||||||
|
boilerplate,
|
||||||
|
common::*,
|
||||||
|
grid::{Grid, Position2D, VecGrid},
|
||||||
|
};
|
||||||
|
|
||||||
|
const DAY: usize = 12;
|
||||||
|
type Parsed = (Position2D, Position2D, VecGrid<u8>);
|
||||||
|
|
||||||
|
fn find_and_modify(grid: &mut Vec<Vec<u8>>, needle: u8, replacement: u8) -> (usize, usize) {
|
||||||
|
grid.iter_mut()
|
||||||
|
.enumerate()
|
||||||
|
.find_map(|(x, line)| {
|
||||||
|
line.iter_mut()
|
||||||
|
.enumerate()
|
||||||
|
.find_map(|(y, b)| {
|
||||||
|
(b == &needle).then(|| {
|
||||||
|
*b = replacement;
|
||||||
|
y
|
||||||
|
})
|
||||||
|
})
|
||||||
|
.map(|y| (x, y))
|
||||||
|
})
|
||||||
|
.unwrap()
|
||||||
|
}
|
||||||
|
|
||||||
|
fn parse_input(raw: &str) -> Parsed {
|
||||||
|
let mut grid = VecGrid::from_bytes_2d(raw, |b| b);
|
||||||
|
let start = find_and_modify(&mut grid.fields, b'S', b'a');
|
||||||
|
let start = Position2D::from([start.0, start.1]);
|
||||||
|
let end = find_and_modify(&mut grid.fields, b'E', b'z');
|
||||||
|
let end = Position2D::from([end.0, end.1]);
|
||||||
|
(start, end, grid)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part1((start, end, grid): &Parsed) -> usize {
|
||||||
|
let mut distances = VecGrid { fields: vec![vec![usize::MAX; grid.fields[0].len()]; grid.len()] };
|
||||||
|
distances[*start] = 0;
|
||||||
|
0
|
||||||
|
}
|
||||||
|
|
||||||
|
fn part2(parsed: &Parsed) -> usize {
|
||||||
|
unimplemented!()
|
||||||
|
}
|
||||||
|
|
||||||
|
boilerplate! {
|
||||||
|
TEST_INPUT == "Sabqponm
|
||||||
|
abcryxxl
|
||||||
|
accszExk
|
||||||
|
acctuvwj
|
||||||
|
abdefghi",
|
||||||
|
tests: {
|
||||||
|
part1: { TEST_INPUT => 31 },
|
||||||
|
part2: { TEST_INPUT => 0 },
|
||||||
|
},
|
||||||
|
bench1 == 0,
|
||||||
|
bench2 == 0,
|
||||||
|
bench_parse: |&((sx, sy), (ex, ey), _)| ((sx, sy), (ex, ey)) => ((20, 0), (20, 145)),
|
||||||
|
}
|
|
@ -3,10 +3,15 @@ pub mod position;
|
||||||
pub use direction::*;
|
pub use direction::*;
|
||||||
use itertools::{join, Itertools, MinMaxResult};
|
use itertools::{join, Itertools, MinMaxResult};
|
||||||
pub use position::*;
|
pub use position::*;
|
||||||
use std::{collections::HashMap, fmt::Display, hash::BuildHasher};
|
use std::{
|
||||||
|
collections::HashMap,
|
||||||
|
fmt::Display,
|
||||||
|
hash::BuildHasher,
|
||||||
|
ops::{Index, IndexMut},
|
||||||
|
};
|
||||||
|
|
||||||
#[allow(clippy::len_without_is_empty)] // I mainly have this for assertions in benchmarks
|
#[allow(clippy::len_without_is_empty)] // I mainly have this for assertions in benchmarks
|
||||||
pub trait Grid<T, const D: usize> {
|
pub trait Grid<T, const D: usize>: Index<PositionND<D>, Output = T> + IndexMut<PositionND<D>> {
|
||||||
fn get(&self, pos: &PositionND<D>) -> Option<&T>;
|
fn get(&self, pos: &PositionND<D>) -> Option<&T>;
|
||||||
|
|
||||||
fn insert<Pos: Into<PositionND<D>>>(&mut self, pos: Pos, element: T);
|
fn insert<Pos: Into<PositionND<D>>>(&mut self, pos: Pos, element: T);
|
||||||
|
@ -19,6 +24,19 @@ pub struct HashGrid<T: Default, const D: usize> {
|
||||||
pub fields: HashMap<PositionND<D>, T>,
|
pub fields: HashMap<PositionND<D>, T>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<T: Default, const D: usize> Index<PositionND<D>> for HashGrid<T, D> {
|
||||||
|
type Output = T;
|
||||||
|
fn index(&self, index: PositionND<D>) -> &Self::Output {
|
||||||
|
&self.fields[&index]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T: Default, const D: usize> IndexMut<PositionND<D>> for HashGrid<T, D> {
|
||||||
|
fn index_mut(&mut self, index: PositionND<D>) -> &mut Self::Output {
|
||||||
|
self.fields.get_mut(&index).expect("Key not in map")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<T: Default, const D: usize> Grid<T, D> for HashGrid<T, D> {
|
impl<T: Default, const D: usize> Grid<T, D> for HashGrid<T, D> {
|
||||||
fn get(&self, pos: &PositionND<D>) -> Option<&T> {
|
fn get(&self, pos: &PositionND<D>) -> Option<&T> {
|
||||||
self.fields.get(pos)
|
self.fields.get(pos)
|
||||||
|
@ -68,6 +86,19 @@ impl<T> Grid<T, 2> for VecGrid<T> {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<T> Index<Position2D> for VecGrid<T> {
|
||||||
|
type Output = T;
|
||||||
|
fn index(&self, index: Position2D) -> &Self::Output {
|
||||||
|
&self.fields[index.0[0] as usize][index.0[1] as usize]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T> IndexMut<Position2D> for VecGrid<T> {
|
||||||
|
fn index_mut(&mut self, index: Position2D) -> &mut Self::Output {
|
||||||
|
&mut self.fields[index.0[0] as usize][index.0[1] as usize]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl<T: Copy> VecGrid<T> {
|
impl<T: Copy> VecGrid<T> {
|
||||||
pub fn from_bytes_2d<F: FnMut(u8) -> T + Copy>(raw: &str, f: F) -> VecGrid<T> {
|
pub fn from_bytes_2d<F: FnMut(u8) -> T + Copy>(raw: &str, f: F) -> VecGrid<T> {
|
||||||
VecGrid { fields: raw.lines().map(|l| l.bytes().map(f).collect()).collect() }
|
VecGrid { fields: raw.lines().map(|l| l.bytes().map(f).collect()).collect() }
|
||||||
|
|
Loading…
Reference in New Issue
Block a user