/ Rust / 2021 / 07.rs
07.rs
 1  #![feature(test)]
 2  
 3  type Input = Vec<i32>;
 4  
 5  fn setup(input: &str) -> Input {
 6      input
 7          .trim()
 8          .split(',')
 9          .map(|x| x.parse().unwrap())
10          .collect()
11  }
12  
13  fn part1(input: &Input) -> String {
14      (0..=input.len())
15          .map(|pos| input.iter().map(|n| (pos as i32 - *n).abs()).sum::<i32>())
16          .min()
17          .unwrap()
18          .to_string()
19  }
20  
21  fn part2(input: &Input) -> String {
22      (0..=input.len())
23          .map(|pos| {
24              input
25                  .iter()
26                  .map(|n| {
27                      let x = (pos as i32 - *n).abs();
28                      (x * (x + 1)) >> 1
29                  })
30                  .sum::<i32>()
31          })
32          .min()
33          .unwrap()
34          .to_string()
35  }
36  
37  aoc::main!(2021, 7, ex: 1);