Made everything a bit more rustic

This commit is contained in:
Rüdiger Ludwig 2023-07-29 17:02:25 +02:00
parent 7f5b6e03f9
commit a5f19ecae1
22 changed files with 376 additions and 274 deletions

View file

@ -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);