Made everything a bit more rustic
This commit is contained in:
parent
7f5b6e03f9
commit
a5f19ecae1
22 changed files with 376 additions and 274 deletions
|
|
@ -5,6 +5,8 @@ use std::iter::Sum;
|
|||
use std::ops::{Add, Deref, Mul, Sub};
|
||||
use std::{collections::BinaryHeap, num::ParseIntError};
|
||||
|
||||
use crate::common::file::split_lines;
|
||||
|
||||
use super::template::{DayTrait, ResultType};
|
||||
use const_format::concatcp;
|
||||
use itertools::Itertools;
|
||||
|
|
@ -21,13 +23,13 @@ impl DayTrait for Day {
|
|||
DAY_NUMBER
|
||||
}
|
||||
|
||||
fn part1(&self, lines: &[String]) -> anyhow::Result<ResultType> {
|
||||
fn part1(&self, lines: &str) -> anyhow::Result<ResultType> {
|
||||
let system = ValveSystem::build(lines, "AA")?;
|
||||
let result = system.maximum_flow(system.single_actor(Time(30)))?;
|
||||
Ok(ResultType::Integer(*result))
|
||||
}
|
||||
|
||||
fn part2(&self, lines: &[String]) -> anyhow::Result<ResultType> {
|
||||
fn part2(&self, lines: &str) -> anyhow::Result<ResultType> {
|
||||
let system = ValveSystem::build(lines, "AA")?;
|
||||
let result = system.maximum_flow(system.double_actor(Time(26)))?;
|
||||
Ok(ResultType::Integer(*result))
|
||||
|
|
@ -264,10 +266,9 @@ struct ValveSystem {
|
|||
}
|
||||
|
||||
impl ValveSystem {
|
||||
fn build(lines: &[String], start: &str) -> Result<ValveSystem, ValveError> {
|
||||
let mut raw = lines
|
||||
.iter()
|
||||
.map(|line| RawValve::try_from(line.as_str()))
|
||||
fn build(lines: &str, start: &str) -> Result<ValveSystem, ValveError> {
|
||||
let mut raw = split_lines(lines)
|
||||
.map(|line| RawValve::try_from(line))
|
||||
.collect::<Result<Vec<_>, _>>()?;
|
||||
raw.sort_unstable_by_key(|valve| valve.id);
|
||||
|
||||
|
|
@ -912,13 +913,13 @@ impl Hash for HashableState {
|
|||
#[cfg(test)]
|
||||
mod test {
|
||||
use super::*;
|
||||
use crate::common::file::read_lines;
|
||||
use crate::common::file::read_string;
|
||||
use anyhow::Result;
|
||||
|
||||
#[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(1651);
|
||||
let result = day.part1(&lines)?;
|
||||
assert_eq!(result, expected);
|
||||
|
|
@ -949,7 +950,7 @@ mod test {
|
|||
#[test]
|
||||
fn parse_system() -> 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 system = ValveSystem::build(&lines, "AA")?;
|
||||
|
||||
assert_eq!(10, system.len());
|
||||
|
|
@ -966,7 +967,7 @@ mod test {
|
|||
#[test]
|
||||
fn single_state_init() -> 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 system = ValveSystem::build(&lines, "AA")?;
|
||||
let actor = system.single_actor(Time(5));
|
||||
|
||||
|
|
@ -980,7 +981,7 @@ mod test {
|
|||
#[test]
|
||||
fn next_single_actor_states() -> 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 system = ValveSystem::build(&lines, "AA")?;
|
||||
let actor = system.single_actor(Time(5));
|
||||
let state = ValveState::init(&system, actor);
|
||||
|
|
@ -1002,7 +1003,7 @@ mod test {
|
|||
#[test]
|
||||
fn next_single_states() -> 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 system = ValveSystem::build(&lines, "AA")?;
|
||||
let actor = system.single_actor(Time(6));
|
||||
let state = ValveState::init(&system, actor);
|
||||
|
|
@ -1023,7 +1024,7 @@ mod test {
|
|||
#[test]
|
||||
fn double_state_init() -> 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 system = ValveSystem::build(&lines, "AA")?;
|
||||
let actor = system.double_actor(Time(5));
|
||||
let state = ValveState::init(&system, actor);
|
||||
|
|
@ -1037,7 +1038,7 @@ mod test {
|
|||
#[test]
|
||||
fn next_double_actor_states() -> 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 system = ValveSystem::build(&lines, "AA")?;
|
||||
let actor = system.double_actor(Time(5));
|
||||
let state = ValveState::init(&system, actor);
|
||||
|
|
@ -1068,7 +1069,7 @@ mod test {
|
|||
#[test]
|
||||
fn next_double_states() -> 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 system = ValveSystem::build(&lines, "AA")?;
|
||||
let actor = system.double_actor(Time(5));
|
||||
let state = ValveState::init(&system, actor);
|
||||
|
|
@ -1090,7 +1091,7 @@ mod test {
|
|||
#[test]
|
||||
fn special_double_stats() -> 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 system = ValveSystem::build(&lines, "AA")?;
|
||||
let actor = DoubleActor(DoubleWork::Simultaneous(Index(1), Index(7), Time(19)));
|
||||
let state = ValveState {
|
||||
|
|
@ -1132,7 +1133,7 @@ mod test {
|
|||
#[test]
|
||||
fn double_long_run() -> 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 system = ValveSystem::build(&lines, "AA")?;
|
||||
let actor = DoubleActor(DoubleWork::Sequential(Index(3), Time(5), Index(7), Time(2)));
|
||||
let state = ValveState {
|
||||
|
|
@ -1158,7 +1159,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(1707);
|
||||
let result = day.part2(&lines)?;
|
||||
assert_eq!(result, expected);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue