From 0cdb274daa9d079725e5c5d67078a459aa241b69 Mon Sep 17 00:00:00 2001 From: HS-157 Date: Tue, 26 Dec 2023 09:52:57 +0100 Subject: [PATCH] 2023 - Day 5 : v3 --- 2023/day5/src/main.rs | 25 +++++++++---------------- 1 file changed, 9 insertions(+), 16 deletions(-) diff --git a/2023/day5/src/main.rs b/2023/day5/src/main.rs index b7b7493..c726dd3 100644 --- a/2023/day5/src/main.rs +++ b/2023/day5/src/main.rs @@ -1,11 +1,6 @@ use std::collections::HashMap; use std::fs; -enum ParseError { - InvalidInput, - ParseFailed, -} - #[derive(Debug)] struct Range { input: usize, @@ -15,7 +10,6 @@ struct Range { #[derive(Debug)] struct Map { - name: String, ranges: Vec, next: String, } @@ -30,7 +24,7 @@ fn parse() -> Option<(Vec, HashMap)> { let segments: Vec<&str> = contents.split("\n\n").collect(); match segments[..] { [s, ..] => { - let segments: Vec<&str> = s.split(":").collect(); + let segments: Vec<&str> = s.split(':').collect(); match segments[..] { [_, s] => { s.split_whitespace() @@ -52,14 +46,14 @@ fn parse() -> Option<(Vec, HashMap)> { for seg in &segments[1..] { let mut ranges: Vec = vec![]; - let segments: Vec<&str> = seg.split("\n").collect(); + let segments: Vec<&str> = seg.split('\n').collect(); let Some((names, r)) = segments.split_first() else { return None; }; - let names = names.replace(" ", "-"); - let split = names.split("-").collect::>(); + let names = names.replace(' ', "-"); + let split = names.split('-').collect::>(); let [name, _, next, _] = &split[..] else { return None; }; @@ -84,8 +78,7 @@ fn parse() -> Option<(Vec, HashMap)> { maps.insert( name.to_string(), Map { - name: name.to_string(), - ranges: ranges, + ranges, next: next.to_string(), }, ); @@ -115,7 +108,7 @@ fn check_range(seed: usize, map: &Map, maps: &HashMap) -> usize { let Some(m) = maps.get(&map.next) else { return seed; }; - return check_range(seed, m, maps); + check_range(seed, m, maps) } fn puzzle1(seeds: &Vec, maps: &HashMap) { @@ -123,7 +116,7 @@ fn puzzle1(seeds: &Vec, maps: &HashMap) { let map = maps.get("seed").unwrap(); for seed in seeds { - s.push(check_range(*seed, map, &maps)); + s.push(check_range(*seed, map, maps)); } // println!(" Seeds → : {:?}", s); @@ -132,7 +125,6 @@ fn puzzle1(seeds: &Vec, maps: &HashMap) { } fn puzzle2(seeds: Vec, maps: HashMap) { - let mut s: Vec = vec![]; let map = maps.get("seed").unwrap(); let ranges: Vec<_> = seeds @@ -146,7 +138,8 @@ fn puzzle2(seeds: Vec, maps: HashMap) { let min: Vec<_> = ranges .iter() .map(|range| { - range.clone() + range + .clone() .map(|r| check_range(r, map, &maps)) .min() .unwrap()