···
1
-
fn solve(input: &Vec<Vec<u32>>, digits: usize) {
1
+
// fun fact for this version, my biggest bug was integer overflow when i was using u32 because im not accustumed to this shit
3
+
fn solve(input: &Vec<Vec<u64>>, digits: usize) -> u64 {
input.iter().fold(0, |acc, bank| {
3
-
let n = (0..digits).fold((0, bank), |(number, bank), i| {
4
-
let max = bank[0..bank.len() - i]
7
-
.unwrap_or(bank.last().unwrap());
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(
9
+
|(maxi, max), (i, n)| {
10
+
if n > max { (i, n) } else { (maxi, max) }
9
-
return (number * 10 + max, bank[0..bank.len() - max_loc - 1]);
14
+
((number * 10) + max, bank_index + loc + 1)
16
-
let input: Vec<Vec<u32>> = include_str!("../../input.txt")
21
+
let input: Vec<Vec<u64>> = include_str!("../../input.txt")
19
-
.map(|bank| bank.chars().map(|s| s.to_digit(10).unwrap()).collect())
26
+
.map(|s| s.to_digit(10).unwrap() as u64)
31
+
println!("Part 1: {}", solve(&input, 2));
32
+
println!("Part 1: {}", solve(&input, 12));