diff options
author | Jesse Luehrs <doy@tozt.net> | 2021-12-16 18:28:53 -0500 |
---|---|---|
committer | Jesse Luehrs <doy@tozt.net> | 2021-12-16 18:28:53 -0500 |
commit | 7e3dfa7ba2cbca4cea878618d5c0c721c10b5264 (patch) | |
tree | 95495a43fdf61ff81574d66479914b06931769d0 /src/2020/3/mod.rs | |
parent | a88f6578fe6f6892497a0c516675abbc42e33382 (diff) | |
download | advent-of-code-7e3dfa7ba2cbca4cea878618d5c0c721c10b5264.tar.gz advent-of-code-7e3dfa7ba2cbca4cea878618d5c0c721c10b5264.zip |
factor out some grid parsing
Diffstat (limited to 'src/2020/3/mod.rs')
-rw-r--r-- | src/2020/3/mod.rs | 34 |
1 files changed, 4 insertions, 30 deletions
diff --git a/src/2020/3/mod.rs b/src/2020/3/mod.rs index 4676a45..b702199 100644 --- a/src/2020/3/mod.rs +++ b/src/2020/3/mod.rs @@ -5,30 +5,8 @@ struct Map { } impl Map { - fn parse(s: impl Iterator<Item = u8>) -> anyhow::Result<Self> { - let mut grid = vec![]; - let mut current_row = vec![]; - for c in s { - match c { - b'#' => { - current_row.push(true); - } - b'.' => { - current_row.push(false); - } - b'\n' => { - grid.push(current_row); - current_row = vec![]; - } - _ => { - return Err(anyhow::anyhow!("invalid map char: '{}'", c)); - } - } - } - if !current_row.is_empty() { - grid.push(current_row); - } - Ok(Self { grid }) + fn new(grid: Vec<Vec<bool>>) -> Self { + Self { grid } } fn rows(&self) -> usize { @@ -65,12 +43,12 @@ impl Map { } pub fn part1() -> anyhow::Result<i64> { - let map = read_map()?; + let map = Map::new(data_bool_map!(b'#', b'.')); map.trees_for_slope(3, 1) } pub fn part2() -> anyhow::Result<i64> { - let map = read_map()?; + let map = Map::new(data_bool_map!(b'#', b'.')); Ok(map.trees_for_slope(1, 1)? * map.trees_for_slope(3, 1)? * map.trees_for_slope(5, 1)? @@ -78,10 +56,6 @@ pub fn part2() -> anyhow::Result<i64> { * map.trees_for_slope(1, 2)?) } -fn read_map() -> anyhow::Result<Map> { - Map::parse(data_bytes!()?) -} - #[test] fn test() { assert_eq!(part1().unwrap(), 292); |