Made everything a bit more rustic
This commit is contained in:
parent
7f5b6e03f9
commit
a5f19ecae1
22 changed files with 376 additions and 274 deletions
|
|
@ -4,6 +4,8 @@ use std::{
|
|||
rc::{Rc, Weak},
|
||||
};
|
||||
|
||||
use crate::common::file::split_lines;
|
||||
|
||||
use super::template::{DayTrait, ResultType};
|
||||
use thiserror::Error;
|
||||
|
||||
|
|
@ -16,7 +18,8 @@ impl DayTrait for Day {
|
|||
DAY_NUMBER
|
||||
}
|
||||
|
||||
fn part1(&self, lines: &[String]) -> anyhow::Result<ResultType> {
|
||||
fn part1(&self, lines: &str) -> anyhow::Result<ResultType> {
|
||||
let lines = split_lines(lines);
|
||||
let root = Directory::parse(lines)?;
|
||||
let result = root
|
||||
.iter()
|
||||
|
|
@ -32,9 +35,10 @@ impl DayTrait for Day {
|
|||
Ok(ResultType::Integer(result))
|
||||
}
|
||||
|
||||
fn part2(&self, lines: &[String]) -> anyhow::Result<ResultType> {
|
||||
fn part2(&self, lines: &str) -> anyhow::Result<ResultType> {
|
||||
const AVAIL: i64 = 70_000_000;
|
||||
const REQUIRED: i64 = 30_000_000;
|
||||
let lines = split_lines(lines);
|
||||
let root = Directory::parse(lines)?;
|
||||
let to_free = REQUIRED - (AVAIL - root.size());
|
||||
let result = root
|
||||
|
|
@ -167,7 +171,7 @@ impl Directory {
|
|||
sub_node.map(|node| Directory::create(node.clone()))
|
||||
}
|
||||
|
||||
pub fn parse(lines: &[String]) -> Result<Directory, DirectoryError> {
|
||||
pub fn parse<'a>(lines: impl Iterator<Item = &'a str>) -> Result<Directory, DirectoryError> {
|
||||
let root = Directory::root();
|
||||
let mut current = root.clone();
|
||||
for line in lines {
|
||||
|
|
@ -269,7 +273,7 @@ impl Iterator for DirectoryIterator {
|
|||
#[cfg(test)]
|
||||
mod test {
|
||||
use super::*;
|
||||
use crate::common::file::read_lines;
|
||||
use crate::common::file::read_string;
|
||||
use anyhow::Result;
|
||||
|
||||
#[test]
|
||||
|
|
@ -298,8 +302,9 @@ mod test {
|
|||
#[test]
|
||||
fn test_total_size() -> Result<()> {
|
||||
let day = Day {};
|
||||
let lines = read_lines(day.get_day_number(), "example01.txt")?;
|
||||
let dir = Directory::parse(&lines)?;
|
||||
let lines = read_string(day.get_day_number(), "example01.txt")?;
|
||||
let lines = split_lines(&lines);
|
||||
let dir = Directory::parse(lines)?;
|
||||
assert_eq!(dir.size(), 48381165);
|
||||
|
||||
Ok(())
|
||||
|
|
@ -308,9 +313,10 @@ mod test {
|
|||
#[test]
|
||||
fn test_iterator() -> 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 lines = split_lines(&lines);
|
||||
let expected = vec!["/", "a", "e", "d"];
|
||||
let dir = Directory::parse(&lines)?;
|
||||
let dir = Directory::parse(lines)?;
|
||||
let result: Vec<_> = dir.iter().map(|dir| dir.name()).collect();
|
||||
assert_eq!(result, expected);
|
||||
|
||||
|
|
@ -320,7 +326,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(95437);
|
||||
let result = day.part1(&lines)?;
|
||||
assert_eq!(result, expected);
|
||||
|
|
@ -331,7 +337,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(24933642);
|
||||
let result = day.part2(&lines)?;
|
||||
assert_eq!(result, expected);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue