Skip to content

Commit 4232d38

Browse files
committed
day 10
1 parent ebc05ab commit 4232d38

File tree

3 files changed

+187
-2
lines changed

3 files changed

+187
-2
lines changed

data/day10.txt

Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
18
2+
47
3+
144
4+
147
5+
124
6+
45
7+
81
8+
56
9+
16
10+
59
11+
97
12+
83
13+
75
14+
150
15+
33
16+
165
17+
30
18+
159
19+
84
20+
141
21+
104
22+
25
23+
164
24+
90
25+
92
26+
88
27+
2
28+
8
29+
51
30+
24
31+
153
32+
63
33+
27
34+
123
35+
127
36+
58
37+
108
38+
52
39+
38
40+
15
41+
149
42+
66
43+
72
44+
21
45+
46
46+
89
47+
135
48+
55
49+
34
50+
37
51+
78
52+
65
53+
134
54+
148
55+
76
56+
138
57+
103
58+
162
59+
114
60+
109
61+
42
62+
77
63+
102
64+
163
65+
7
66+
105
67+
69
68+
39
69+
91
70+
111
71+
131
72+
130
73+
6
74+
137
75+
96
76+
82
77+
64
78+
3
79+
95
80+
136
81+
85
82+
9
83+
116
84+
17
85+
99
86+
12
87+
117
88+
62
89+
50
90+
110
91+
26
92+
115
93+
71
94+
57
95+
156
96+
120
97+
98
98+
1
99+
70

src/day10.rs

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
use super::utils;
2+
3+
fn part1(input: &Vec<i32>) -> (usize, usize) {
4+
let mut a: usize = 0;
5+
let mut b: usize = 0;
6+
for i in 1..input.len() {
7+
let diff: i32 = input[i] - input[i - 1];
8+
if diff == 1 {
9+
a += 1;
10+
} else if diff == 3 {
11+
b += 1;
12+
}
13+
}
14+
return (a, b);
15+
}
16+
17+
#[test]
18+
fn test_part1() {
19+
let input: Vec<i32> = vec![0, 1, 4, 5, 6, 7, 10, 11, 12, 15, 16, 19];
20+
let result = part1(&input);
21+
assert_eq!(7, result.0);
22+
assert_eq!(4, result.1);
23+
}
24+
25+
fn part2(input: &Vec<i32>) -> usize {
26+
println!("{:?}", input);
27+
let mut result: usize = 1;
28+
let mut n: usize = 1;
29+
for i in 1..input.len() {
30+
if input[i] - input[i - 1] == 3 {
31+
println!("{}", n);
32+
match n {
33+
3 => result *= 2,
34+
4 => result *= 4,
35+
5 => result *= 7,
36+
_ => {},
37+
}
38+
n = 1;
39+
continue;
40+
} else{
41+
// if input[i] - input[i - 1] == 1 {
42+
n += 1;
43+
}
44+
}
45+
return result;
46+
}
47+
48+
#[test]
49+
fn test_part2() {
50+
let input: Vec<i32> = vec![0, 1, 4, 5, 6, 7, 10, 11, 12, 15, 16, 19, 22];
51+
assert_eq!(8, part2(&input));
52+
let input2: Vec<i32> = vec![
53+
0, 1, 2, 3, 4, 7, 8, 9, 10, 11, 14, 17, 18, 19, 20, 23, 24, 25, 28, 31, 32, 33, 34, 35, 38,
54+
39, 42, 45, 46, 47, 48, 49, 52
55+
];
56+
assert_eq!(19208, part2(&input2));
57+
}
58+
59+
pub fn run() {
60+
println!("day10");
61+
62+
let mut input: Vec<i32> = Vec::new();
63+
64+
input.push(0);
65+
66+
if let Ok(lines) = utils::read_lines("data/day10.txt") {
67+
for line in lines {
68+
if let Ok(v) = line {
69+
if let Ok(n) = v.parse::<i32>() {
70+
input.push(n);
71+
}
72+
}
73+
}
74+
}
75+
76+
input.sort();
77+
78+
// part 1
79+
let result = part1(&input);
80+
println!("part1: {}", result.0 * (result.1 + 1));
81+
82+
input.push(input[input.len()-1]+3);
83+
println!("part2: {}", part2(&input));
84+
}

src/main.rs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
// mod day5;
66
// mod day6;
77
// mod day8;
8-
mod day9;
8+
// mod day9;
9+
mod day10;
910
mod utils;
1011

1112
fn main() {
@@ -16,5 +17,6 @@ fn main() {
1617
// day5::run();
1718
// day6::run();
1819
// day8::run();
19-
day9::run();
20+
// day9::run();
21+
day10::run();
2022
}

0 commit comments

Comments
 (0)