summaryrefslogtreecommitdiffstats
path: root/src/2020/3/mod.rs
diff options
context:
space:
mode:
authorJesse Luehrs <doy@tozt.net>2021-12-16 18:28:53 -0500
committerJesse Luehrs <doy@tozt.net>2021-12-16 18:28:53 -0500
commit7e3dfa7ba2cbca4cea878618d5c0c721c10b5264 (patch)
tree95495a43fdf61ff81574d66479914b06931769d0 /src/2020/3/mod.rs
parenta88f6578fe6f6892497a0c516675abbc42e33382 (diff)
downloadadvent-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.rs34
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);