From 28e2a563c017cd3a7b55ae69884adfa3adc2a175 Mon Sep 17 00:00:00 2001 From: LeMoonStar Date: Sun, 8 Dec 2024 00:15:18 +0100 Subject: [PATCH] =?UTF-8?q?=E2=9C=A8=20Day=207:=20Part=202?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 4 ++-- src/days/d07.rs | 25 ++++++++++++------------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/README.md b/README.md index 5b5a82b..696c406 100644 --- a/README.md +++ b/README.md @@ -3,8 +3,8 @@ [![About](https://img.shields.io/badge/Advent%20of%20Code-2024-brightgreen?style=flat-square)](https://adventofcode.com/2024/about) [![Language: Rust](https://img.shields.io/badge/Language-Rust-orange.svg?style=flat-square)](https://en.wikipedia.org/wiki/Rust_(programming_language)) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg?style=flat-square)](https://mit-license.org/) -![Days completed](https://img.shields.io/badge/Days%20completed-4.5-red?style=flat-square) -![Stars](https://img.shields.io/badge/Stars-9-yellow?style=flat-square) +![Days completed](https://img.shields.io/badge/Days%20completed-5%20%2B%202%20half-red?style=flat-square) +![Stars](https://img.shields.io/badge/Stars-12-yellow?style=flat-square) > ⚠️ This README is copied from my previous years solution. It is not fully adopted to 2024 yet. diff --git a/src/days/d07.rs b/src/days/d07.rs index 531bd25..21257b8 100644 --- a/src/days/d07.rs +++ b/src/days/d07.rs @@ -6,6 +6,7 @@ const CURRENT_DAY: u8 = 7; enum Operator { Add, Multiply, + Concat, } impl Operator { @@ -13,6 +14,7 @@ impl Operator { match self { Operator::Multiply => a * b, Operator::Add => a + b, + Operator::Concat => format!("{}{}", a, b).parse().unwrap(), } } } @@ -84,14 +86,11 @@ impl CalibrationEquation { value } - fn can_be_valid(&self) -> bool { - CombinationIterator::new( - &[Operator::Add, Operator::Multiply], - (self.parts.len() - 1) as u32, - ) - .map(|o| self.calculate(o)) - .collect::>() - .contains(&self.result) + fn can_be_valid(&self, operations: &[Operator]) -> bool { + CombinationIterator::new(operations, (self.parts.len() - 1) as u32) + .map(|o| self.calculate(o)) + .collect::>() + .contains(&self.result) } } @@ -116,10 +115,10 @@ pub struct Calibrator { } impl Calibrator { - pub fn get_valid_sum(&self) -> u64 { + fn get_valid_sum(&self, operators: &[Operator]) -> u64 { self.equations .iter() - .filter(|v| v.can_be_valid()) + .filter(|v| v.can_be_valid(operators)) .map(|v| v.result) .sum() } @@ -140,7 +139,7 @@ impl DayImpl for Day { } fn expected_results() -> (Answer, Answer) { - (Answer::Number(3749), Answer::Number(0)) + (Answer::Number(3749), Answer::Number(11387)) } fn init(input: &str) -> (Self, Data) { @@ -148,10 +147,10 @@ impl DayImpl for Day { } fn one(&self, data: &mut Data) -> Answer { - Answer::Number(data.get_valid_sum()) + Answer::Number(data.get_valid_sum(&[Operator::Add, Operator::Multiply])) } fn two(&self, data: &mut Data) -> Answer { - Answer::Number(0) + Answer::Number(data.get_valid_sum(&[Operator::Add, Operator::Multiply, Operator::Concat])) } }