Day 7 done
This commit is contained in:
parent
81337c405b
commit
f954cdad24
|
@ -5,25 +5,26 @@ pub use crate::prelude::*;
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let input = day_input(7);
|
let input = day_input(7);
|
||||||
show_answers(sum_possibly_valid_tests(&input), 0);
|
show_answers(
|
||||||
|
sum_possibly_valid_tests(&input, &add_and_mul),
|
||||||
|
sum_possibly_valid_tests(&input, &add_and_mul_and_concat),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn sum_possibly_valid_tests(input: &str) -> usize {
|
fn sum_possibly_valid_tests(input: &str, f: &dyn Fn(Vec<usize>, &usize) -> Vec<usize>) -> usize {
|
||||||
let mut sum = 0;
|
let mut sum = 0;
|
||||||
for l in input.lines() {
|
for l in input.lines() {
|
||||||
let (target, operands) = l.split_once(':').unwrap();
|
let (target, operands) = l.split_once(':').unwrap();
|
||||||
let target: usize = target.parse().unwrap();
|
let target: usize = target.parse().unwrap();
|
||||||
println!("{target}");
|
|
||||||
let operands: Vec<usize> = operands
|
let operands: Vec<usize> = operands
|
||||||
.trim()
|
.trim()
|
||||||
.split(" ")
|
.split(" ")
|
||||||
.map(|s| s.parse().unwrap())
|
.map(|s| s.parse().unwrap())
|
||||||
.collect();
|
.collect();
|
||||||
println!("{operands:?}");
|
|
||||||
if operands
|
if operands
|
||||||
.iter()
|
.iter()
|
||||||
.skip(1)
|
.skip(1)
|
||||||
.fold(vec![operands[0]], add_and_mul)
|
.fold(vec![operands[0]], f)
|
||||||
.iter()
|
.iter()
|
||||||
.any(|n| *n == target)
|
.any(|n| *n == target)
|
||||||
{
|
{
|
||||||
|
@ -42,6 +43,16 @@ fn add_and_mul(lefts: Vec<usize>, right: &usize) -> Vec<usize> {
|
||||||
result
|
result
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn add_and_mul_and_concat(lefts: Vec<usize>, right: &usize) -> Vec<usize> {
|
||||||
|
let mut result = vec![];
|
||||||
|
for left in lefts {
|
||||||
|
result.push(left + right);
|
||||||
|
result.push(left * right);
|
||||||
|
result.push(format!("{}{}", left, right).parse().unwrap());
|
||||||
|
}
|
||||||
|
result
|
||||||
|
}
|
||||||
|
|
||||||
#[cfg(test)]
|
#[cfg(test)]
|
||||||
mod tests {
|
mod tests {
|
||||||
use super::*;
|
use super::*;
|
||||||
|
@ -58,9 +69,25 @@ mod tests {
|
||||||
161011: 16 10 13
|
161011: 16 10 13
|
||||||
192: 17 8 14
|
192: 17 8 14
|
||||||
21037: 9 7 18 13
|
21037: 9 7 18 13
|
||||||
292: 11 6 16 20"
|
292: 11 6 16 20",
|
||||||
|
&add_and_mul
|
||||||
),
|
),
|
||||||
3749
|
3749
|
||||||
)
|
);
|
||||||
|
assert_eq!(
|
||||||
|
sum_possibly_valid_tests(
|
||||||
|
"190: 10 19
|
||||||
|
3267: 81 40 27
|
||||||
|
83: 17 5
|
||||||
|
156: 15 6
|
||||||
|
7290: 6 8 6 15
|
||||||
|
161011: 16 10 13
|
||||||
|
192: 17 8 14
|
||||||
|
21037: 9 7 18 13
|
||||||
|
292: 11 6 16 20",
|
||||||
|
&add_and_mul_and_concat
|
||||||
|
),
|
||||||
|
11387
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue