Skip to content

Commit 5d77698

Browse files
committed
[Day01] Part 2
1 parent 58591ed commit 5d77698

File tree

1 file changed

+54
-14
lines changed

1 file changed

+54
-14
lines changed

day01/src/main.rs

+54-14
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use std::io;
22
use std::io::{Read};
33
use std::fs::File;
4+
use std::collections::HashSet;
45

56
fn main() -> io::Result<()> {
67
let mut input = String::new();
@@ -9,31 +10,70 @@ fn main() -> io::Result<()> {
910
f.read_to_string(&mut input)?;
1011

1112
let p1 = part_one(&input)?;
12-
println!("Part 1: {}", p1);
13+
println!("Part 1: {:?}", p1);
14+
15+
let p2 = part_two(&input)?;
16+
println!("Part 2: {:?}", p2);
1317

1418
Ok(())
1519
}
1620

1721
fn part_one(input: &str) -> io::Result<(i32)> {
1822
let res = input
1923
.lines()
20-
.map(|l| l.parse::<i32>().unwrap()).sum();
24+
.map(|l| l.parse::<i32>().unwrap())
25+
.sum();
2126

2227
Ok(res)
2328
}
2429

30+
fn part_two(input: &str) -> io::Result<(i32)> {
31+
let mut freq = 0;
32+
let mut seen_freqs: HashSet<i32> = HashSet::new();
33+
seen_freqs.insert(freq);
34+
35+
let freq_changes = input
36+
.lines()
37+
.map(|l| l.parse::<i32>().unwrap())
38+
.cycle();
39+
40+
for change in freq_changes {
41+
freq += change;
42+
if seen_freqs.contains(&freq) {
43+
break;
44+
}
45+
seen_freqs.insert(freq);
46+
}
47+
48+
Ok(freq)
49+
}
50+
51+
2552
#[cfg(test)]
2653
mod tests {
27-
use super::*;
28-
29-
#[test]
30-
fn test_part_one() {
31-
let input1 = "+1\n+1\n+1";
32-
let input2 = "+1\n+1\n-2";
33-
let input3 = "-1\n-2\n-3";
34-
35-
assert_eq!(part_one(&input1).unwrap(), 3);
36-
assert_eq!(part_one(&input2).unwrap(), 0);
37-
assert_eq!(part_one(&input3).unwrap(), -6);
38-
}
54+
use super::*;
55+
56+
#[test]
57+
fn test_part_one() {
58+
let input1 = "+1\n+1\n+1";
59+
let input2 = "+1\n+1\n-2";
60+
let input3 = "-1\n-2\n-3";
61+
62+
assert_eq!(part_one(&input1).unwrap(), 3);
63+
assert_eq!(part_one(&input2).unwrap(), 0);
64+
assert_eq!(part_one(&input3).unwrap(), -6);
65+
}
66+
67+
#[test]
68+
fn test_part_two() {
69+
let input1 = "+1\n-1";
70+
let input2 = "+3\n+3\n+4\n-2\n-4";
71+
let input3 = "-6\n+3\n+8\n+5\n-6";
72+
let input4 = "+7\n+7\n-2\n-7\n-4";
73+
74+
assert_eq!(part_two(&input1).unwrap(), 0);
75+
assert_eq!(part_two(&input2).unwrap(), 10);
76+
assert_eq!(part_two(&input3).unwrap(), 5);
77+
assert_eq!(part_two(&input4).unwrap(), 14);
78+
}
3979
}

0 commit comments

Comments
 (0)