forked from tony9402/algorithm-solutions
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathutils.py
More file actions
93 lines (70 loc) · 2.42 KB
/
Copy pathutils.py
File metadata and controls
93 lines (70 loc) · 2.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
import os
import json
EXTENSION_TO_LANGUAGE = {
"c": "C",
"cpp": "C++",
"py": "Python",
"java": "Java",
"kt": "Kotlin",
"js": "Javascript",
"rs": "Rust",
"swift": "Swift",
"go": "Go",
}
EXTENSION_TO_CODE = {
"c": "c",
"cpp": "cpp",
"py": "py",
"java": "java",
"kt": "kt",
"js": "js",
"rs": "rust",
"swift": "swift",
"go": "go"
}
OJ_NAMES = ["baekjoon", "leetcode", "programmers", "hackerrank"]
class SolutionData:
def __init__(self):
with open("solutions.json", "r") as f:
self.data = json.load(f)
f.close()
def update_data(self, oj_name: str, pid: str, filename: str, hash_value: str, sequence: int):
if oj_name not in self.data:
self.data[oj_name] = {}
if pid not in self.data[oj_name]:
self.data[oj_name][pid] = {}
if filename not in self.data[oj_name][pid]:
self.data[oj_name][pid][filename] = {}
self.data[oj_name][pid][filename].update({
"hash_value": hash_value,
"sequence": sequence
})
def _exists(self, oj_name: str, pid: str, filename: str) -> bool:
if oj_name not in self.data:
return False
if pid not in self.data[oj_name]:
return False
if filename not in self.data[oj_name][pid]:
return False
return True
def get_sequence(self, oj_name: str, pid: str, filename: str) -> int:
if not self._exists(oj_name=oj_name, pid=pid, filename=filename):
return -1
return self.data[oj_name][pid][filename]["sequence"]
def check_uploaded_solution(self, oj_name: str, pid: str, filename: str, hash_value: str) -> bool:
if not self._exists(oj_name=oj_name, pid=pid, filename=filename):
return False
return hash_value == self.data[oj_name][pid][filename].get("hash_value", "")
def save(self):
with open("solutions.json", "w") as f:
json.dump(self.data, f, indent=4, ensure_ascii=False)
f.close()
def parse_metadata(data: list[str]) -> dict[str, str]:
keys = ["Authored by", "Co-authored by", "Link"]
parsed_data = {}
for line in data[:3]:
for key in keys:
if key in line:
parsed_data[key] = line.split(key)[-1].split(':', 1)[-1].strip()
break
return parsed_data