mod helpers; fn main() { let input = helpers::read_std_in(); part1(input.clone()); part2(input.clone()); } fn part1(input: String) { let max = input.chars().count()-1; let mut total = 0i32; for (i, c) in input.chars().enumerate() { let tst_idx = get_compare_idx(i, 1, max); total += get_compare_result(c, input.chars().nth(tst_idx).unwrap()); } println!("Part 1: {}", total); } fn part2(input: String) { let max = input.chars().count()-1; let mut total = 0i32; for (i, c) in input.chars().enumerate() { let tst_idx = get_compare_idx(i, (input.chars().count() / 2), max); total += get_compare_result(c, input.chars().nth(tst_idx).unwrap()); } println!("Part 2: {}", total); } fn get_compare_idx(curr: usize, add: usize, max: usize) -> usize { let mut ret = curr + add; if ret > max { ret -= max+1; } return ret; } fn get_compare_result(c1: char, c2: char) -> i32 { if c1 != c2 { return 0; } match c1.to_digit(10) { Some(v) => { return v as i32; }, None => 0, } }