Skip to content

Commit e9b10fa

Browse files
committed
Add day2 part2
1 parent 2eedbbf commit e9b10fa

File tree

1 file changed

+54
-17
lines changed

1 file changed

+54
-17
lines changed

src/day2.rs

Lines changed: 54 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -9,33 +9,70 @@ pub fn input_generator(input: &str) -> Vec<Vec<usize>> {
99
}
1010

1111
#[aoc(day2, part1)]
12-
pub fn part1(input: &Vec<Vec<usize>>) -> usize {
12+
pub fn part1(input: &[Vec<usize>]) -> usize {
1313
input
1414
.iter()
15-
.filter(|report| {
16-
let increasing = if report[0] < report[1] { true } else { false };
17-
let mut first = true;
15+
.filter(|&report| {
16+
let increasing = report[0] < report[1];
1817
let mut last = 0;
19-
for val in report.iter() {
20-
if first {
21-
last = *val;
22-
first = false;
18+
for i in 0..report.len() {
19+
if i == 0 {
20+
last = report[i];
2321
continue;
2422
}
25-
if val.abs_diff(last) < 1 || val.abs_diff(last) > 3 {
23+
if report[i].abs_diff(last) < 1 || report[i].abs_diff(last) > 3 {
2624
return false;
2725
}
28-
if increasing && *val < last {
26+
if increasing && report[i] < last {
2927
return false;
3028
}
31-
if !increasing && *val > last {
29+
if !increasing && report[i] > last {
3230
return false;
3331
}
34-
last = *val;
32+
last = report[i];
3533
}
3634
true
3735
})
38-
.fold(0, |acc, _| acc + 1)
36+
.count()
37+
}
38+
39+
#[aoc(day2, part2)]
40+
pub fn part2(input: &[Vec<usize>]) -> usize {
41+
input
42+
.iter()
43+
.filter(|&report| {
44+
for i in 0..report.len() {
45+
let mut new_report = report.clone();
46+
new_report.remove(i);
47+
let increasing = new_report[0] < new_report[1];
48+
let mut last = 0;
49+
let mut bad = false;
50+
for j in 0..new_report.len() {
51+
if j == 0 {
52+
last = new_report[j];
53+
continue;
54+
}
55+
if new_report[j].abs_diff(last) < 1 || new_report[j].abs_diff(last) > 3 {
56+
bad = true;
57+
break;
58+
}
59+
if increasing && new_report[j] < last {
60+
bad = true;
61+
break;
62+
}
63+
if !increasing && new_report[j] > last {
64+
bad = true;
65+
break;
66+
}
67+
last = new_report[j];
68+
}
69+
if !bad {
70+
return true;
71+
}
72+
}
73+
false
74+
})
75+
.count()
3976
}
4077

4178
#[cfg(test)]
@@ -54,8 +91,8 @@ mod tests {
5491
assert_eq!(2, part1(&input_generator(INPUT)))
5592
}
5693

57-
// #[test]
58-
// fn test_part2() {
59-
// assert_eq!(31, part2(&input_generator(INPUT)))
60-
// }
94+
#[test]
95+
fn test_part2() {
96+
assert_eq!(4, part2(&input_generator(INPUT)))
97+
}
6198
}

0 commit comments

Comments
 (0)