this repo has no description
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}