mirror of
https://github.com/Noratrieb/advent-of-code.git
synced 2026-01-16 02:25:02 +01:00
part 1
This commit is contained in:
parent
f4dbebba6b
commit
314ef2ca61
8 changed files with 132 additions and 3 deletions
92
2024/day03/src/lib.rs
Normal file
92
2024/day03/src/lib.rs
Normal file
|
|
@ -0,0 +1,92 @@
|
|||
use helper::{Day, Variants};
|
||||
use nom::FindSubstring;
|
||||
|
||||
pub fn main() {
|
||||
helper::main::<Day03>(include_str!("../input.txt"));
|
||||
}
|
||||
|
||||
struct Day03;
|
||||
|
||||
helper::define_variants! {
|
||||
day => crate::Day03;
|
||||
part1 {
|
||||
basic => crate::part1;
|
||||
}
|
||||
part2 {
|
||||
basic => crate::part2;
|
||||
}
|
||||
}
|
||||
|
||||
impl Day for Day03 {
|
||||
fn part1() -> Variants {
|
||||
part1_variants!(construct_variants)
|
||||
}
|
||||
|
||||
fn part2() -> Variants {
|
||||
part2_variants!(construct_variants)
|
||||
}
|
||||
}
|
||||
|
||||
fn part1(input: &str) -> u64 {
|
||||
let mut input = input.as_bytes();
|
||||
let mut total = 0;
|
||||
|
||||
fn parse_digit(input: &[u8]) -> Option<(u64, &[u8])> {
|
||||
let mut result = 0;
|
||||
let mut i = 0;
|
||||
while input.len() > i && input[i].is_ascii_digit() {
|
||||
result *= 10;
|
||||
result += (input[i] - b'0') as u64;
|
||||
i += 1;
|
||||
}
|
||||
if i == 0 {
|
||||
return None;
|
||||
}
|
||||
Some((result, &input[i..]))
|
||||
}
|
||||
|
||||
fn try_parse_mul(mut input: &[u8]) -> Option<(&[u8], u64)> {
|
||||
input = &input.get(4..)?;
|
||||
let (a, b);
|
||||
(a, input) = parse_digit(input)?;
|
||||
if input.get(0) != Some(&b',') {
|
||||
return None;
|
||||
}
|
||||
input = &input[1..];
|
||||
(b, input) = parse_digit(input)?;
|
||||
if input.get(0) != Some(&b')') {
|
||||
return None;
|
||||
}
|
||||
input = &input[1..];
|
||||
Some((input, a * b))
|
||||
}
|
||||
|
||||
while let Some(next) = input.find_substring("mul(") {
|
||||
match try_parse_mul(&input[next..]) {
|
||||
Some((new_input, val)) => {
|
||||
total += val;
|
||||
input = new_input;
|
||||
}
|
||||
None => input = &input[(next+4)..]
|
||||
}
|
||||
}
|
||||
|
||||
total
|
||||
}
|
||||
|
||||
fn part2(_input: &str) -> u64 {
|
||||
0
|
||||
}
|
||||
|
||||
helper::tests! {
|
||||
day03 Day03;
|
||||
part1 {
|
||||
small => 161;
|
||||
default => 187833789;
|
||||
}
|
||||
part2 {
|
||||
small => 0;
|
||||
default => 0;
|
||||
}
|
||||
}
|
||||
helper::benchmarks! {}
|
||||
Loading…
Add table
Add a link
Reference in a new issue