Skip to content

Commit 2c5f5d4

Browse files
authoredSep 17, 2022
Added solution for 2409
1 parent 298857a commit 2c5f5d4

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed
 

‎02409. Count Days Spent Together.rs

+64
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
use std::cmp::max;
2+
use std::cmp::min;
3+
4+
impl Solution {
5+
// Convert string vectors to individual int values. Then find the last arrival day among both along with first leaving day for both. Then loop through the months from last arrival day to first leaving day, taking care that only pending days are counted from first and last months
6+
pub fn count_days_together(arrive_alice: String, leave_alice: String, arrive_bob: String, leave_bob: String) -> i32 {
7+
let days_in_months: Vec<i32> = vec![31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
8+
let arrive_alice_split_obj: Vec<&str> = arrive_alice.split("-").collect();
9+
let leave_alice_split_obj: Vec<&str> = leave_alice.split("-").collect();
10+
let arrive_bob_split_obj: Vec<&str> = arrive_bob.split("-").collect();
11+
let leave_bob_split_obj: Vec<&str> = leave_bob.split("-").collect();
12+
13+
let arrive_alice_obj = [arrive_alice_split_obj[0].parse::<i32>().unwrap(), arrive_alice_split_obj[1].parse::<i32>().unwrap()];
14+
let leave_alice_obj = [leave_alice_split_obj[0].parse::<i32>().unwrap(), leave_alice_split_obj[1].parse::<i32>().unwrap()];
15+
let arrive_bob_obj = [arrive_bob_split_obj[0].parse::<i32>().unwrap(), arrive_bob_split_obj[1].parse::<i32>().unwrap()];
16+
let leave_bob_obj = [leave_bob_split_obj[0].parse::<i32>().unwrap(), leave_bob_split_obj[1].parse::<i32>().unwrap()];
17+
18+
let arrive_common_month = if arrive_alice_obj[0] > arrive_bob_obj[0] {
19+
arrive_alice_obj[0]
20+
} else {
21+
arrive_bob_obj[0]
22+
};
23+
24+
let arrive_common_date = if arrive_alice_obj[0] > arrive_bob_obj[0] {
25+
arrive_alice_obj[1]
26+
} else if arrive_alice_obj[0] < arrive_bob_obj[0] {
27+
arrive_bob_obj[1]
28+
} else {
29+
max(arrive_alice_obj[1], arrive_bob_obj[1])
30+
};
31+
32+
let leave_common_month = if leave_alice_obj[0] < leave_bob_obj[0] {
33+
leave_alice_obj[0]
34+
} else {
35+
leave_bob_obj[0]
36+
};
37+
38+
let leave_common_date = if leave_alice_obj[0] < leave_bob_obj[0] {
39+
leave_alice_obj[1]
40+
} else if leave_alice_obj[0] > leave_bob_obj[0] {
41+
leave_bob_obj[1]
42+
} else {
43+
min(leave_alice_obj[1], leave_bob_obj[1])
44+
};
45+
46+
let mut result = 0;
47+
for current_month in arrive_common_month..=leave_common_month {
48+
if current_month == arrive_common_month {
49+
if current_month == leave_common_month {
50+
result += max((leave_common_date - arrive_common_date + 1), 0);
51+
} else {
52+
result += days_in_months[(current_month as usize) - 1] - arrive_common_date + 1;
53+
}
54+
55+
} else if current_month == leave_common_month {
56+
result += leave_common_date;
57+
} else {
58+
result += (days_in_months[(current_month as usize) - 1]);
59+
}
60+
}
61+
62+
return result;
63+
}
64+
}

0 commit comments

Comments
 (0)
Please sign in to comment.