mirror of
https://github.com/Noratrieb/advent-of-code.git
synced 2026-01-15 18:15:01 +01:00
43 lines
1.5 KiB
Rust
43 lines
1.5 KiB
Rust
pub fn part2(input: &str) -> u64 {
|
|
let sum = input
|
|
.lines()
|
|
.map(|line| {
|
|
let bytes = line.as_bytes();
|
|
|
|
let mut i = 0;
|
|
let mut first = None;
|
|
let mut last = b'_';
|
|
|
|
let mut insert = |byte| {
|
|
if first.is_none() {
|
|
first = Some(byte);
|
|
}
|
|
last = byte;
|
|
};
|
|
|
|
while i < bytes.len() {
|
|
match bytes[i] {
|
|
b @ b'0'..=b'9' => insert(b),
|
|
b'o' if bytes.get(i..(i + 3)) == Some(b"one") => insert(b'1'),
|
|
b't' if bytes.get(i..(i + 3)) == Some(b"two") => insert(b'2'),
|
|
b't' if bytes.get(i..(i + 5)) == Some(b"three") => insert(b'3'),
|
|
b'f' if bytes.get(i..(i + 4)) == Some(b"four") => insert(b'4'),
|
|
b'f' if bytes.get(i..(i + 4)) == Some(b"five") => insert(b'5'),
|
|
b's' if bytes.get(i..(i + 3)) == Some(b"six") => insert(b'6'),
|
|
b's' if bytes.get(i..(i + 5)) == Some(b"seven") => insert(b'7'),
|
|
b'e' if bytes.get(i..(i + 5)) == Some(b"eight") => insert(b'8'),
|
|
b'n' if bytes.get(i..(i + 4)) == Some(b"nine") => insert(b'9'),
|
|
_ => {}
|
|
}
|
|
i += 1;
|
|
}
|
|
|
|
let first = (first.unwrap() - b'0') as u64;
|
|
let last = (last - b'0') as u64;
|
|
|
|
first * 10 + last
|
|
})
|
|
.sum::<u64>();
|
|
|
|
sum
|
|
}
|