Made everything a bit more rustic
This commit is contained in:
parent
7f5b6e03f9
commit
a5f19ecae1
22 changed files with 376 additions and 274 deletions
|
|
@ -1,6 +1,6 @@
|
|||
use std::collections::{BinaryHeap, HashSet};
|
||||
|
||||
use crate::common::pos::Pos;
|
||||
use crate::common::{file::split_lines, pos::Pos};
|
||||
|
||||
use super::template::{DayTrait, ResultType};
|
||||
use thiserror::Error;
|
||||
|
|
@ -14,13 +14,13 @@ impl DayTrait for Day {
|
|||
DAY_NUMBER
|
||||
}
|
||||
|
||||
fn part1(&self, lines: &[String]) -> anyhow::Result<ResultType> {
|
||||
let valley = Valley::parse(lines)?;
|
||||
fn part1(&self, lines: &str) -> anyhow::Result<ResultType> {
|
||||
let valley = Valley::try_from(lines)?;
|
||||
Ok(ResultType::Integer(valley.walk()? as i64))
|
||||
}
|
||||
|
||||
fn part2(&self, lines: &[String]) -> anyhow::Result<ResultType> {
|
||||
let valley = Valley::parse(lines)?;
|
||||
fn part2(&self, lines: &str) -> anyhow::Result<ResultType> {
|
||||
let valley = Valley::try_from(lines)?;
|
||||
Ok(ResultType::Integer(valley.walk_short()? as i64))
|
||||
}
|
||||
}
|
||||
|
|
@ -158,13 +158,16 @@ struct Valley {
|
|||
width: usize,
|
||||
}
|
||||
|
||||
impl Valley {
|
||||
pub fn parse(lines: &[String]) -> Result<Valley, ValleyError> {
|
||||
impl TryFrom<&str> for Valley {
|
||||
type Error = ValleyError;
|
||||
|
||||
fn try_from(lines: &str) -> Result<Self, Self::Error> {
|
||||
let lines = split_lines(lines);
|
||||
let mut map = Vec::new();
|
||||
let mut start = None;
|
||||
let mut exit = None;
|
||||
let mut valley_width = None;
|
||||
for (y, row) in lines.iter().enumerate() {
|
||||
for (y, row) in lines.enumerate() {
|
||||
let mut height_row = Vec::new();
|
||||
for (x, height_char) in row.chars().enumerate() {
|
||||
match height_char {
|
||||
|
|
@ -205,7 +208,9 @@ impl Valley {
|
|||
width,
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
impl Valley {
|
||||
fn get_height(&self, pos: Pos<usize>) -> char {
|
||||
self.map[pos.y()][pos.x()]
|
||||
}
|
||||
|
|
@ -255,14 +260,14 @@ impl Valley {
|
|||
#[cfg(test)]
|
||||
mod test {
|
||||
use super::*;
|
||||
use crate::common::file::read_lines;
|
||||
use crate::common::file::read_string;
|
||||
use anyhow::Result;
|
||||
|
||||
#[test]
|
||||
fn test_parse() -> Result<()> {
|
||||
let day = Day {};
|
||||
let lines = read_lines(day.get_day_number(), "example01.txt")?;
|
||||
let valley = Valley::parse(&lines)?;
|
||||
let lines = read_string(day.get_day_number(), "example01.txt")?;
|
||||
let valley = Valley::try_from(lines.as_str())?;
|
||||
assert_eq!(valley.width, 8);
|
||||
assert_eq!(valley.start, Pos::new(0, 0));
|
||||
assert_eq!(valley.exit, Pos::new(5, 2));
|
||||
|
|
@ -273,7 +278,7 @@ mod test {
|
|||
#[test]
|
||||
fn test_part1() -> Result<()> {
|
||||
let day = Day {};
|
||||
let lines = read_lines(day.get_day_number(), "example01.txt")?;
|
||||
let lines = read_string(day.get_day_number(), "example01.txt")?;
|
||||
let expected = ResultType::Integer(31);
|
||||
let result = day.part1(&lines)?;
|
||||
assert_eq!(result, expected);
|
||||
|
|
@ -284,7 +289,7 @@ mod test {
|
|||
#[test]
|
||||
fn test_part2() -> Result<()> {
|
||||
let day = Day {};
|
||||
let lines = read_lines(day.get_day_number(), "example01.txt")?;
|
||||
let lines = read_string(day.get_day_number(), "example01.txt")?;
|
||||
let expected = ResultType::Integer(29);
|
||||
let result = day.part2(&lines)?;
|
||||
assert_eq!(result, expected);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue