Skip to content

Commit 75bef6d

Browse files
committed
day 02
1 parent 27fb4ab commit 75bef6d

File tree

2 files changed

+120
-4
lines changed

2 files changed

+120
-4
lines changed

data/examples/02.txt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
7 6 4 2 1
2+
1 2 7 8 9
3+
9 7 6 2 1
4+
1 3 2 4 5
5+
8 6 4 4 1
6+
1 3 6 7 9

src/bin/02.rs

Lines changed: 114 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,121 @@
11
advent_of_code::solution!(2);
22

33
pub fn part_one(input: &str) -> Option<u32> {
4-
None
4+
//increasing , decs
5+
let mut safe_count = 0;
6+
let mut unsafe_count = 0;
7+
for line in input.lines() {
8+
println!("{}", line);
9+
10+
let numbers: Vec<i32> = line.split_whitespace().map(|item| {
11+
item.parse::<i32>().unwrap()
12+
}).collect();
13+
14+
if checking_level(&numbers) {
15+
safe_count += 1;
16+
} else {
17+
unsafe_count += 1;
18+
}
19+
}
20+
21+
println!("{}",safe_count);
22+
// if let Some(value) = checking_level(numbers) {
23+
// return value;
24+
// }
25+
26+
// if numbers.iter().max().unwrap() - numbers.iter().min().unwrap() > 3 {
27+
// // unsafe
28+
// unsafe_count+=1;
29+
// } else {
30+
// safe_count+=1;
31+
// }
32+
33+
// if let (Some(max), Some(min)) = (numbers.iter().max(), numbers.iter().min()) {
34+
// if max - min > 3 {
35+
// unsafe_count += 1;
36+
// } else {
37+
// safe_count += 1;
38+
// }
39+
// }
40+
41+
42+
Some(safe_count as u32)
43+
44+
}
45+
46+
fn checking_level(numbers: &Vec<i32>) -> bool {
47+
let mut is_increasing = true;
48+
let mut is_decreasing = true;
49+
50+
for i in 0..numbers.len() - 1 {
51+
// let diff = (&numbers - &numbers).abs();
52+
let curr = numbers[i];
53+
let next = numbers[i + 1];
54+
55+
let diff = (next - curr).abs();
56+
57+
if diff < 1 || diff > 3 {
58+
//unsafe
59+
// unsafe_count += 1;
60+
return false
61+
}
62+
63+
if curr < next {
64+
//decreasing
65+
// safe_count += 1;
66+
is_decreasing = false;
67+
// return false;
68+
} else if curr > next {
69+
//increas
70+
// safe_count += 1;
71+
is_increasing= false;
72+
// return Some(false)
73+
} else {
74+
// nochagning
75+
return false;
76+
// return Some(false);
77+
}
78+
}
79+
is_increasing || is_decreasing
580
}
681

782
pub fn part_two(input: &str) -> Option<u32> {
8-
None
83+
let mut safe_count = 0;
84+
let mut unsafe_count = 0;
85+
for line in input.lines() {
86+
println!("{}", line);
87+
88+
let numbers: Vec<i32> = line.split_whitespace().map(|item| {
89+
item.parse::<i32>().unwrap()
90+
}).collect();
91+
92+
if checking_level(&numbers) {
93+
safe_count += 1;
94+
} else {
95+
// try to remove item and check again
96+
for i in 0..numbers.len() {
97+
let mut cleaned_level = numbers.to_vec();
98+
cleaned_level.remove(i);
99+
100+
101+
if checking_level(&cleaned_level) {
102+
//
103+
safe_count += 1;
104+
break;
105+
}
106+
}
107+
// not safe for sure
108+
unsafe_count += 1;
109+
}
110+
// if checking_level(&numbers) {
111+
// safe_count += 1;
112+
// } else {
113+
// unsafe_count += 1;
114+
// }
115+
}
116+
117+
println!("{}",safe_count);
118+
Some(safe_count as u32)
9119
}
10120

11121
#[cfg(test)]
@@ -15,12 +125,12 @@ mod tests {
15125
#[test]
16126
fn test_part_one() {
17127
let result = part_one(&advent_of_code::template::read_file("examples", DAY));
18-
assert_eq!(result, None);
128+
assert_eq!(result, Some(2));
19129
}
20130

21131
#[test]
22132
fn test_part_two() {
23133
let result = part_two(&advent_of_code::template::read_file("examples", DAY));
24-
assert_eq!(result, None);
134+
assert_eq!(result, Some(4));
25135
}
26136
}

0 commit comments

Comments
 (0)