Day 7 part 1
This commit is contained in:
parent
e5669fac3b
commit
81337c405b
66
2024/rust/src/day7.rs
Normal file
66
2024/rust/src/day7.rs
Normal file
|
@ -0,0 +1,66 @@
|
|||
mod prelude;
|
||||
use std::slice::Windows;
|
||||
|
||||
pub use crate::prelude::*;
|
||||
|
||||
fn main() {
|
||||
let input = day_input(7);
|
||||
show_answers(sum_possibly_valid_tests(&input), 0);
|
||||
}
|
||||
|
||||
fn sum_possibly_valid_tests(input: &str) -> usize {
|
||||
let mut sum = 0;
|
||||
for l in input.lines() {
|
||||
let (target, operands) = l.split_once(':').unwrap();
|
||||
let target: usize = target.parse().unwrap();
|
||||
println!("{target}");
|
||||
let operands: Vec<usize> = operands
|
||||
.trim()
|
||||
.split(" ")
|
||||
.map(|s| s.parse().unwrap())
|
||||
.collect();
|
||||
println!("{operands:?}");
|
||||
if operands
|
||||
.iter()
|
||||
.skip(1)
|
||||
.fold(vec![operands[0]], add_and_mul)
|
||||
.iter()
|
||||
.any(|n| *n == target)
|
||||
{
|
||||
sum += target;
|
||||
}
|
||||
}
|
||||
sum
|
||||
}
|
||||
|
||||
fn add_and_mul(lefts: Vec<usize>, right: &usize) -> Vec<usize> {
|
||||
let mut result = vec![];
|
||||
for left in lefts {
|
||||
result.push(left + right);
|
||||
result.push(left * right);
|
||||
}
|
||||
result
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
#[test]
|
||||
fn test() {
|
||||
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"
|
||||
),
|
||||
3749
|
||||
)
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue