this repo has no description
at main 61 lines 1.7 kB view raw
1use super::Day; 2use crate::day; 3 4day!(Day1, 1, Vec<&'static str>); 5 6struct Result { 7 sum: i64, 8 times_crossed: i64, 9} 10 11impl Day for Day1 { 12 type Parsed = Vec<&'static str>; 13 14 fn parse(input: &'static str) -> Self::Parsed { 15 input.lines().collect() 16 } 17 18 fn part1(&self) -> i64 { 19 self.data 20 .iter() 21 .fold( 22 Result { 23 sum: 50, 24 times_crossed: 0, 25 }, 26 |mut acc, line| { 27 let n = line[1..].parse::<i64>().unwrap(); 28 acc.sum += if &line[..1] == "L" { -n } else { n }; 29 acc.sum = acc.sum.rem_euclid(100); 30 acc.times_crossed += if acc.sum == 0 { 1 } else { 0 }; 31 acc 32 }, 33 ) 34 .times_crossed 35 } 36 37 fn part2(&self) -> i64 { 38 self.data 39 .iter() 40 .fold( 41 Result { 42 sum: 50, 43 times_crossed: 0, 44 }, 45 |mut acc, line| { 46 let n = line[1..].parse::<i64>().unwrap(); 47 let old = acc.sum; 48 acc.sum += if &line[..1] == "L" { -n } else { n }; 49 acc.times_crossed += (old > 0 && acc.sum < 0) as i64; 50 acc.times_crossed += if acc.sum == 0 { 51 1 52 } else { 53 (acc.sum / 100).abs() 54 }; 55 acc.sum = acc.sum.rem_euclid(100); 56 acc 57 }, 58 ) 59 .times_crossed 60 } 61}