Day seven
This commit is contained in:
44
day-07-rust/src/task1.rs
Normal file
44
day-07-rust/src/task1.rs
Normal file
@@ -0,0 +1,44 @@
|
||||
use crate::common;
|
||||
use crate::common::Number;
|
||||
use std::io::{BufReader, Read};
|
||||
use std::ops::Rem;
|
||||
|
||||
pub(crate) fn run<R: Read>(read: R) {
|
||||
let mut reader = BufReader::new(read).bytes().peekable();
|
||||
|
||||
let mut total = 0;
|
||||
while let Some((result, parts)) = common::read_input_line(&mut reader) {
|
||||
if let Some(ops) = brute(result, &parts) {
|
||||
println!("{:?} & {:?} => {}", ops, parts, result);
|
||||
total += result;
|
||||
}
|
||||
}
|
||||
|
||||
println!("Result: {}", total);
|
||||
}
|
||||
|
||||
fn brute(result: Number, parts: &[Number]) -> Option<Vec<char>> {
|
||||
match parts.split_last() {
|
||||
None => None,
|
||||
Some((last, [])) => {
|
||||
if result == *last {
|
||||
Some(vec![])
|
||||
} else {
|
||||
None
|
||||
}
|
||||
}
|
||||
Some((cur, parts)) => {
|
||||
let test_result = result - cur;
|
||||
if let Some(mut ops) = brute(test_result, parts) {
|
||||
ops.push('+');
|
||||
return Some(ops);
|
||||
}
|
||||
let test_result = result / cur;
|
||||
if result.rem(cur) == 0 && let Some(mut ops) = brute(test_result, parts) {
|
||||
ops.push('*');
|
||||
return Some(ops);
|
||||
}
|
||||
None
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user