my solutions to advent of code
aoc
advent-of-code
1// fun fact for this version, my biggest bug was integer overflow when i was using u32 because im not accustumed to this shit
2
3fn solve(input: &Vec<Vec<u64>>, digits: usize) -> u64 {
4 input.iter().fold(0, |acc, bank| {
5 let bank_len = bank.len();
6 let (n, _) = (0..digits).rfold((0, 0), |(number, bank_index), i| {
7 let (loc, max) = bank[bank_index..bank_len - i].iter().enumerate().fold(
8 (0_usize, &0_u64),
9 |(maxi, max), (i, n)| {
10 if n > max { (i, n) } else { (maxi, max) }
11 },
12 );
13
14 ((number * 10) + max, bank_index + loc + 1)
15 });
16 acc + n
17 })
18}
19
20fn main() {
21 let input: Vec<Vec<u64>> = include_str!("../../input.txt")
22 .trim()
23 .split("\n")
24 .map(|bank| {
25 bank.chars()
26 .map(|s| s.to_digit(10).unwrap() as u64)
27 .collect()
28 })
29 .collect();
30
31 println!("Part 1: {}", solve(&input, 2));
32 println!("Part 2: {}", solve(&input, 12));
33}