use aoc_runner_derive::{aoc, aoc_generator}; type Data = Vec; #[aoc_generator(day07)] pub fn input_generator(input: &str) -> Data { let mut input: Vec<_> = input.split(',').map(|v| v.parse().unwrap()).collect(); input.sort_unstable(); input } #[aoc(day07, part1)] // 336040 pub fn solve_part1(input: &Data) -> i64 { let start = *input.first().unwrap(); let end = *input.last().unwrap(); (start..=end).map(|n| { input.iter().map(|v| { (v-n).abs() }).sum() }).min().unwrap() } #[aoc(day07, part2)] // 94813675 pub fn solve_part2(input: &Data) -> i64 { let start = *input.first().unwrap(); let end = *input.last().unwrap(); (start..=end).map(|n| { input.iter().map(|v| { let diff=(v-n).abs(); (diff*(diff+1))>>1 // Gauss }).sum() }).min().unwrap() }