Skip to content

Commit 9ac39e4

Browse files
committed
fixes dvishal485#10 & added TLE prediction message
1 parent e854727 commit 9ac39e4

File tree

4 files changed

+77
-43
lines changed

4 files changed

+77
-43
lines changed

src/handlers/execution.rs

Lines changed: 29 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,8 @@ impl std::fmt::Display for Success {
134134
for i in 0..self.code_answer.len() {
135135
let is_correct = self.code_answer[i] == self.expected_code_answer[i];
136136
part2.push(format!(
137-
"{}\n{}\n{}\nOutput : {:?}\nExpected : {:?}\n\n{}",
137+
"{1}\n{2}\n{3}\n{0:10}: {4:?}\n{7:10}: {5:?}\n\n{6}",
138+
"Output",
138139
seperator.yellow(),
139140
if is_correct {
140141
format!("Testcase {} execution success", i + 1).green()
@@ -148,24 +149,43 @@ impl std::fmt::Display for Success {
148149
format!("Std Output :\n{}\n", self.std_output[i])
149150
} else {
150151
String::new()
151-
}
152+
},
153+
"Expected"
152154
));
153155
}
154156

157+
let may_tle = {
158+
// added 200 because leetcode data is not very reliabale
159+
self.expected_elapsed_time + 200 < self.elapsed_time
160+
};
161+
155162
let part3 = format!(
156-
"{}\nRuntime : {}\nOutput : {}\nExpected : {}\n",
163+
"{}\n{:10}: {:6} ({}%)\n{}",
157164
seperator.yellow(),
165+
"Runtime",
158166
self.status_runtime.cyan(),
159-
self.elapsed_time,
160-
self.expected_status_runtime
167+
100 - (self.elapsed_time as u128 * 100)
168+
.checked_div(self.expected_elapsed_time as u128 + 100)
169+
.unwrap_or(100)
170+
.min(100),
171+
if may_tle {
172+
"High runtime detected! May lead to TLE\n"
173+
.red()
174+
.italic()
175+
.to_string()
176+
} else {
177+
"".to_string()
178+
},
161179
);
162180

163181
let part4 = format!(
164-
"{}\nMemory : {}\nOutput : {}\nExpected : {}\n",
165-
seperator.yellow(),
182+
"{2:10}: {:6} ({}%)\n",
166183
self.status_memory.cyan(),
167-
self.memory,
168-
self.expected_memory
184+
100 - (self.memory as u128 * 100)
185+
.checked_div(self.expected_memory as u128)
186+
.unwrap_or(100)
187+
.min(100),
188+
"Memory",
169189
);
170190
write!(f, "{}{}{}{}", part1, part2.join(""), part3, part4)
171191
}

src/handlers/leetcode.rs

Lines changed: 29 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -30,35 +30,35 @@ impl LeetCode<Unauthorized> {
3030
pub fn authenticate(&self, cookie: &str) -> Result<LeetCode<Authorized>, &str> {
3131
let mut headers = reqwest::header::HeaderMap::with_capacity(5);
3232
let Some(csrf_token) = cookie
33-
.split(';')
34-
.find(|s| s.contains("csrftoken"))
35-
else{return Err("No csrf token found"); };
36-
let Some(csrf_token) = csrf_token.split('=').last() else{return Err("No csrf token found"); };
37-
let csrf_token = csrf_token.to_string();
38-
headers.insert(
39-
reqwest::header::COOKIE,
40-
reqwest::header::HeaderValue::from_str(&cookie).unwrap(),
41-
);
42-
headers.insert(
43-
reqwest::header::USER_AGENT,
44-
reqwest::header::HeaderValue::from_str("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36").unwrap(),
45-
);
46-
headers.insert(
47-
reqwest::header::REFERER,
48-
reqwest::header::HeaderValue::from_str("https://leetcode.com/").unwrap(),
49-
);
50-
headers.insert(
51-
reqwest::header::HeaderName::from_static("x-csrftoken"),
52-
reqwest::header::HeaderValue::from_str(csrf_token.as_str()).unwrap(),
53-
);
54-
let client = reqwest::blocking::Client::builder()
55-
.default_headers(headers.clone())
56-
.build()
57-
.unwrap();
58-
Ok(LeetCode {
59-
state: std::marker::PhantomData::<Authorized>,
60-
client,
61-
})
33+
.split(';')
34+
.find(|s| s.contains("csrftoken"))
35+
else{return Err("No csrf token found"); };
36+
let Some(csrf_token) = csrf_token.split('=').last() else{return Err("No csrf token found"); };
37+
let csrf_token = csrf_token.to_string();
38+
headers.insert(
39+
reqwest::header::COOKIE,
40+
reqwest::header::HeaderValue::from_str(&cookie).unwrap(),
41+
);
42+
headers.insert(
43+
reqwest::header::USER_AGENT,
44+
reqwest::header::HeaderValue::from_str("Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36").unwrap(),
45+
);
46+
headers.insert(
47+
reqwest::header::REFERER,
48+
reqwest::header::HeaderValue::from_str("https://leetcode.com/").unwrap(),
49+
);
50+
headers.insert(
51+
reqwest::header::HeaderName::from_static("x-csrftoken"),
52+
reqwest::header::HeaderValue::from_str(csrf_token.as_str()).unwrap(),
53+
);
54+
let client = reqwest::blocking::Client::builder()
55+
.default_headers(headers.clone())
56+
.build()
57+
.unwrap();
58+
Ok(LeetCode {
59+
state: std::marker::PhantomData::<Authorized>,
60+
client,
61+
})
6262
}
6363
}
6464

src/handlers/submission.rs

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -141,9 +141,13 @@ impl std::fmt::Display for SubmitCorrect {
141141
let seperator = "-------------------------------";
142142
write!(
143143
f,
144-
"\n{seperator}\n{}\n{seperator}\nStatus : {}\nLanguage : {}\nRuntime : {}\t( beats {:.2}% )\nMemory : {}\t( beats {:.2}% )\n",
144+
"\n{seperator}\n{}\n{seperator}\n{status:10}: {}\n{lang:10}: {}\n{rt:10}: {:6}\t( beats {:.2}% )\n{mem:10}: {:6}\t( beats {:.2}% )\n",
145145
"Submission Correct!".green().bold(),
146-
self.status_msg, self.lang, self.status_runtime.cyan(),self.runtime_percentile, self.status_memory.cyan(), self.memory_percentile
146+
self.status_msg, self.lang, self.status_runtime.cyan(),self.runtime_percentile, self.status_memory.cyan(), self.memory_percentile,
147+
status = "Status",
148+
lang = "Language",
149+
rt = "Runtime",
150+
mem = "Memory"
147151
)
148152
}
149153
}

src/handlers/user.rs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -17,9 +17,19 @@ impl UserMetadata {
1717

1818
impl std::fmt::Display for UserMetadata {
1919
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
20-
write!(f,
21-
"User name :\t{}\nQuestions Solved :\n\t- Easy :\t{}\n\t- Medium :\t{}\n\t- Hard :\t{}",
22-
self.user_name, self.ac_easy, self.ac_medium, self.ac_hard
20+
write!(
21+
f,
22+
"{:18}:{:>15}\n{qs:18}:\n{empty:8}{easy:10}:{ec:>15}\n{empty:8}{med:10}:{mc:>15}\n{empty:8}{hard:10}:{hc:>15}",
23+
"Username",
24+
self.user_name,
25+
ec = self.ac_easy,
26+
mc = self.ac_medium,
27+
hc = self.ac_hard,
28+
qs = "Questions Solved",
29+
easy = "- Easy",
30+
med = "- Medium",
31+
hard = "- Hard",
32+
empty = ""
2333
)
2434
}
2535
}

0 commit comments

Comments
 (0)