From a840565b98add4091033cd7fa2266aa350d6fc94 Mon Sep 17 00:00:00 2001 From: BoolPurist Date: Thu, 29 Aug 2024 17:24:55 +0200 Subject: [PATCH] Tidied up day 7 --- .gitignore | 1 + output.txt | 451 ------------------------- src/iterations.rs | 24 +- src/solutions/day7.rs | 30 +- src/solutions/day7/categorized_hand.rs | 18 +- src/solutions/day7/dealt_hand.rs | 1 - src/solutions/day7/hello.rs | 0 7 files changed, 34 insertions(+), 491 deletions(-) delete mode 100644 output.txt create mode 100644 src/solutions/day7/hello.rs diff --git a/.gitignore b/.gitignore index 5c7a807..3de9eae 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /target /real_puzzel_input/* !/real_puzzel_input/.gitkeep +_input.txt diff --git a/output.txt b/output.txt deleted file mode 100644 index 28d8fa0..0000000 --- a/output.txt +++ /dev/null @@ -1,451 +0,0 @@ - Compiling advent_of_code_2023 v0.1.0 (/home/nice_graphic/Code/AdventOfCode/advent_of_code_2023_in_rust) - Finished `dev` profile [unoptimized + debuginfo] target(s) in 0.74s - Running `target/debug/advent_of_code_2023 -d 5 -t 2 -r real_puzzel_input/day5_real.txt` -[src/solutions/day5/task2.rs:42:5] ¤t_branches = [ - SeedRange { - start: 1742065688, - end: 1750102221, - }, - SeedRange { - start: 2567370277, - end: 2599723683, - }, -] -[src/solutions/day5/task2.rs:42:5] ¤t_branches = [ - SeedRange { - start: 0, - end: 8416624, - }, - SeedRange { - start: 266989853, - end: 274550609, - }, - SeedRange { - start: 300866774, - end: 317512630, - }, - SeedRange { - start: 358218184, - end: 372723591, - }, - SeedRange { - start: 380891048, - end: 442413628, - }, - SeedRange { - start: 515244023, - end: 557308930, - }, - SeedRange { - start: 683066098, - end: 684855124, - }, - SeedRange { - start: 807721029, - end: 832371103, - }, - SeedRange { - start: 1194459751, - end: 1203805997, - }, - SeedRange { - start: 1468004524, - end: 1485692688, - }, - SeedRange { - start: 1543990204, - end: 1544270679, - }, - SeedRange { - start: 2018290756, - end: 2019801469, - }, - SeedRange { - start: 2019801470, - end: 2042706893, - }, - SeedRange { - start: 2115385660, - end: 2129003835, - }, - SeedRange { - start: 2129003836, - end: 2211102547, - }, - SeedRange { - start: 2392979056, - end: 2408003322, - }, - SeedRange { - start: 2607311497, - end: 2674349508, - }, - SeedRange { - start: 2746561268, - end: 2747062564, - }, -] -[src/solutions/day5/task2.rs:42:5] ¤t_branches = [ - SeedRange { - start: 58753428, - end: 65411093, - }, - SeedRange { - start: 100997493, - end: 137201535, - }, - SeedRange { - start: 157986927, - end: 199863499, - }, - SeedRange { - start: 204313376, - end: 218545188, - }, - SeedRange { - start: 332621358, - end: 372723591, - }, - SeedRange { - start: 426571448, - end: 467405784, - }, - SeedRange { - start: 495575122, - end: 511974002, - }, - SeedRange { - start: 743910440, - end: 759938333, - }, - SeedRange { - start: 759938334, - end: 760087643, - }, - SeedRange { - start: 793045073, - end: 807721028, - }, - SeedRange { - start: 867655257, - end: 896123052, - }, - SeedRange { - start: 896123053, - end: 973947275, - }, - SeedRange { - start: 973947276, - end: 993981548, - }, - SeedRange { - start: 993981549, - end: 1002343672, - }, - SeedRange { - start: 1055927934, - end: 1095728907, - }, - SeedRange { - start: 1095728908, - end: 1119175102, - }, - SeedRange { - start: 1154854138, - end: 1180635906, - }, - SeedRange { - start: 1238423661, - end: 1248511724, - }, - SeedRange { - start: 1512990961, - end: 1523584140, - }, - SeedRange { - start: 1534040686, - end: 1546302601, - }, - SeedRange { - start: 1803258673, - end: 1809841397, - }, - SeedRange { - start: 1809841398, - end: 1841935458, - }, - SeedRange { - start: 1856531115, - end: 1913738155, - }, - SeedRange { - start: 2018290756, - end: 2028995369, - }, - SeedRange { - start: 2674349509, - end: 2681453545, - }, - SeedRange { - start: 2738910873, - end: 2744209881, - }, - SeedRange { - start: 2747062565, - end: 2783941215, - }, -] -[src/solutions/day5/task2.rs:42:5] ¤t_branches = [ - SeedRange { - start: 475181169, - end: 490368072, - }, - SeedRange { - start: 836186785, - end: 843842518, - }, - SeedRange { - start: 2734840928, - end: 2738910872, - }, -] -[src/solutions/day5/task2.rs:42:5] ¤t_branches = [ - SeedRange { - start: 244009039, - end: 254933582, - }, - SeedRange { - start: 305477485, - end: 329774690, - }, - SeedRange { - start: 442413629, - end: 458180769, - }, - SeedRange { - start: 1260160771, - end: 1272797031, - }, - SeedRange { - start: 1272797032, - end: 1286745099, - }, - SeedRange { - start: 1769136092, - end: 1817580770, - }, - SeedRange { - start: 1941952815, - end: 1959258660, - }, - SeedRange { - start: 2941559481, - end: 2963703887, - }, - SeedRange { - start: 3338671715, - end: 3392340230, - }, -] -[src/solutions/day5/task2.rs:42:5] ¤t_branches = [ - SeedRange { - start: 332621358, - end: 351714897, - }, - SeedRange { - start: 372723592, - end: 390393835, - }, - SeedRange { - start: 426571448, - end: 467405784, - }, - SeedRange { - start: 1203805998, - end: 1248511724, - }, - SeedRange { - start: 1512990961, - end: 1523584140, - }, - SeedRange { - start: 1628354042, - end: 1634087664, - }, - SeedRange { - start: 2089724509, - end: 2193360445, - }, - SeedRange { - start: 2333003205, - end: 2348927163, - }, - SeedRange { - start: 2919622420, - end: 2941559480, - }, - SeedRange { - start: 3241659967, - end: 3257744758, - }, -] -[src/solutions/day5/task2.rs:42:5] ¤t_branches = [ - SeedRange { - start: 137201536, - end: 157986926, - }, - SeedRange { - start: 218545189, - end: 220477638, - }, - SeedRange { - start: 600713965, - end: 665397099, - }, - SeedRange { - start: 832371104, - end: 836186784, - }, - SeedRange { - start: 843842519, - end: 867655256, - }, - SeedRange { - start: 1119175103, - end: 1138382174, - }, - SeedRange { - start: 1491903136, - end: 1499334672, - }, - SeedRange { - start: 1523584141, - end: 1543990203, - }, - SeedRange { - start: 2281428417, - end: 2289569154, - }, - SeedRange { - start: 2492935748, - end: 2514211768, - }, - SeedRange { - start: 2562030648, - end: 2567370276, - }, - SeedRange { - start: 2744209882, - end: 2758197105, - }, - SeedRange { - start: 2961556571, - end: 2970025309, - }, - SeedRange { - start: 2970025310, - end: 2975037528, - }, - SeedRange { - start: 3055485859, - end: 3060533366, - }, - SeedRange { - start: 3336845004, - end: 3337449016, - }, -] -[src/solutions/day5/task2.rs:42:5] ¤t_branches = [ - SeedRange { - start: 372723592, - end: 390393835, - }, - SeedRange { - start: 1203805998, - end: 1230926691, - }, - SeedRange { - start: 1230926692, - end: 1234898502, - }, - SeedRange { - start: 1450460003, - end: 1468004523, - }, - SeedRange { - start: 1546302602, - end: 1600730425, - }, - SeedRange { - start: 1628354042, - end: 1634087664, - }, - SeedRange { - start: 1644303246, - end: 1684446508, - }, - SeedRange { - start: 1702371352, - end: 1750102221, - }, - SeedRange { - start: 1899676495, - end: 1926978899, - }, - SeedRange { - start: 1950759356, - end: 1994459585, - }, - SeedRange { - start: 2089724509, - end: 2193360445, - }, - SeedRange { - start: 2172619534, - end: 2188333609, - }, - SeedRange { - start: 2333003205, - end: 2348927163, - }, - SeedRange { - start: 2567370277, - end: 2607311496, - }, - SeedRange { - start: 2885502549, - end: 2941559480, - }, - SeedRange { - start: 3241659967, - end: 3257744758, - }, -] -[src/solutions/day5/task2.rs:42:5] ¤t_branches = [ - SeedRange { - start: 1672236638, - end: 1707764533, - }, - SeedRange { - start: 2064249380, - end: 2073429343, - }, -] -[src/solutions/day5/task2.rs:42:5] ¤t_branches = [ - SeedRange { - start: 688038520, - end: 693497941, - }, - SeedRange { - start: 1485692689, - end: 1491903135, - }, - SeedRange { - start: 1750102222, - end: 1755861445, - }, - SeedRange { - start: 1775334238, - end: 1803258672, - }, -] diff --git a/src/iterations.rs b/src/iterations.rs index acd508c..d255b0d 100644 --- a/src/iterations.rs +++ b/src/iterations.rs @@ -1,5 +1,5 @@ pub trait AdventIterator: Iterator { - fn into_chunks(self) -> impl Iterator> + fn into_chunks(self) -> impl Iterator> where Self: Sized, { @@ -10,14 +10,14 @@ pub trait AdventIterator: Iterator { impl AdventIterator for I where I: Iterator {} #[derive(Debug, PartialEq, Eq)] -pub enum Chunck { +pub enum Chunk { Next([T; N]), Rest(Vec), } pub fn in_chunks( mut iterator: impl Iterator, -) -> impl Iterator> { +) -> impl Iterator> { let mut buffer = Vec::new(); let mut done = false; std::iter::from_fn(move || { @@ -32,7 +32,7 @@ pub fn in_chunks( return if buffer.is_empty() { None } else { - Some(Chunck::Rest(std::mem::take(&mut buffer))) + Some(Chunk::Rest(std::mem::take(&mut buffer))) }; } } @@ -40,31 +40,31 @@ pub fn in_chunks( let array: [T; N] = std::mem::take(&mut buffer) .try_into() .unwrap_or_else(|_| panic!("Buffer must have the same size as the N ({})", N)); - Some(Chunck::Next(array)) + Some(Chunk::Next(array)) }) } #[cfg(test)] mod testing { - use crate::iterations::{in_chunks, Chunck}; + use crate::iterations::{in_chunks, Chunk}; #[test] fn should_split_chunks() { - fn assert_case(input: Vec, expected: Vec>) { - let actual: Vec> = in_chunks::(input.into_iter()).collect(); + fn assert_case(input: Vec, expected: Vec>) { + let actual: Vec> = in_chunks::(input.into_iter()).collect(); assert_eq!(expected, actual); } - assert_case::<2>(vec![2], vec![Chunck::Rest(vec![2])]); + assert_case::<2>(vec![2], vec![Chunk::Rest(vec![2])]); assert_case::<2>(vec![], vec![]); - assert_case::<2>(vec![2, 2], vec![Chunck::Next([2, 2])]); + assert_case::<2>(vec![2, 2], vec![Chunk::Next([2, 2])]); assert_case::<2>( vec![1, 2, 3], - vec![Chunck::Next([1, 2]), Chunck::Rest(vec![3])], + vec![Chunk::Next([1, 2]), Chunk::Rest(vec![3])], ); assert_case::<1>( vec![1, 2, 3], - vec![Chunck::Next([1]), Chunck::Next([2]), Chunck::Next([3])], + vec![Chunk::Next([1]), Chunk::Next([2]), Chunk::Next([3])], ); } } diff --git a/src/solutions/day7.rs b/src/solutions/day7.rs index fc48af6..429dfda 100644 --- a/src/solutions/day7.rs +++ b/src/solutions/day7.rs @@ -1,10 +1,12 @@ use categorized_hand::{CategorizedHand, JokerOrdered}; +use crate::solutions::day7::dealt_hand::DealtHand; mod categorized_hand; mod dealt_hand; mod hand_kind; mod parsing; mod second_ordering; +mod hello; pub fn solve_task_1(input: &str) -> String { let parsed = parsing::parse_input(input); @@ -20,23 +22,25 @@ pub fn solve_task_1(input: &str) -> String { pub fn solve_task_2(input: &str) -> String { const JOKER: char = 'J'; let parsed = parsing::parse_input(input); - let sorted_and_categorized: Vec = { - let mut categorized: Vec = parsed - .into_iter() - .map(|not_categorized| (not_categorized, JOKER).into()) - .map(JokerOrdered::new) - .collect(); - categorized.sort(); - - categorized - .into_iter() - .map(|to_unwrap| to_unwrap.into()) - .collect() - }; + let sorted_and_categorized= categorize_and_sort_with_a_joker(parsed, JOKER); let total_winning = calc_total_winning(&sorted_and_categorized); total_winning.to_string() } +fn categorize_and_sort_with_a_joker(parsed: Vec, joker: char) -> Vec { + let mut categorized: Vec = parsed + .into_iter() + .map(|not_categorized| (not_categorized, joker).into()) + .map(JokerOrdered::new) + .collect(); + categorized.sort(); + + categorized + .into_iter() + .map(|to_unwrap| to_unwrap.into()) + .collect() +} + fn calc_total_winning(sorted: &[CategorizedHand]) -> usize { sorted .into_iter() diff --git a/src/solutions/day7/categorized_hand.rs b/src/solutions/day7/categorized_hand.rs index 74ddcb4..c9d378a 100644 --- a/src/solutions/day7/categorized_hand.rs +++ b/src/solutions/day7/categorized_hand.rs @@ -39,13 +39,8 @@ fn hand_cmp( ) -> std::cmp::Ordering { match left.kind.cmp(&right.kind) { std::cmp::Ordering::Equal => { - assert!( - left.kind == right.kind, - "If ordering is equal then the hand kind must be the same too\n\ - left kind: ({:?}) and right kind: ({:?})", - left.kind, - right.kind - ); + assert_eq!(left.kind, right.kind, "If ordering is equal then the hand kind must be the same too\n\ + left kind: ({:?}) and right kind: ({:?})", left.kind, right.kind); second_ordering::compare_along_str( left.rest().hand(), right.rest().hand(), @@ -53,13 +48,8 @@ fn hand_cmp( ) } not_equal_ordering => { - assert!( - left.kind != right.kind, - "If ordering is not equal then the hand kind must not be the same either\n\ - left kind: ({:?}) and right kind: ({:?})", - left.kind, - right.kind - ); + assert_ne!(left.kind, right.kind, "If ordering is not equal then the hand kind must not be the same either\n\ + left kind: ({:?}) and right kind: ({:?})", left.kind, right.kind); not_equal_ordering } } diff --git a/src/solutions/day7/dealt_hand.rs b/src/solutions/day7/dealt_hand.rs index 8ad9cf2..904a913 100644 --- a/src/solutions/day7/dealt_hand.rs +++ b/src/solutions/day7/dealt_hand.rs @@ -1,6 +1,5 @@ use std::{str::FromStr, usize}; -use derive_more::derive::Debug; use thiserror::Error; #[derive(Debug, PartialEq, Eq, Clone)] diff --git a/src/solutions/day7/hello.rs b/src/solutions/day7/hello.rs new file mode 100644 index 0000000..e69de29