Skip to content

Commit dc18966

Browse files
committed
ok
1 parent 54ded27 commit dc18966

File tree

5 files changed

+72
-27
lines changed

5 files changed

+72
-27
lines changed

leetcode/1137. N-th Tribonacci Number/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ tags:
77
- Dynamic Programming
88
- Memoization
99
done: true
10+
draft: false
11+
difficulty: "Easy"
1012
date: 2021-10-24
1113
---
1214

leetcode/6. ZigZag Conversion/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ src: "https://leetcode.com/problems/zigzag-conversion/"
55
tags:
66
- String
77
done: true
8+
draft: false
9+
difficulty: "Medium"
810
date: 2021-10-21
911
---
1012
# ZigZag Conversion

leetcode/70. Climbing Stairs/README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ tags:
77
- Dynamic Programming
88
- Memoization
99
done: true
10+
draft: false
11+
difficulty: "Easy"
1012
date: 2021-10-24
1113
---
1214

util/1181.md

Lines changed: 0 additions & 12 deletions
This file was deleted.

util/find_problems.py

Lines changed: 66 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,24 @@
1-
import requests
1+
from collections import defaultdict
2+
import json
3+
import urllib.request
24
import argparse
35
import datetime
46
import html
57
import os
68
from pytablewriter import MarkdownTableWriter
79

10+
__template = """
11+
\"\"\"
12+
문제 이름: <problem_name>
13+
문제 번호: <problem_id>
14+
문제 링크: <url>
15+
난이도: <difficulty>
16+
태그: <tags>
17+
\"\"\"
18+
import sys
19+
20+
def input(): return sys.stdin.readline().rstrip()
21+
"""
822
__tier_text = {
923
0: "Unknown",
1024
1: "Bronze V",
@@ -40,6 +54,17 @@
4054
31: "Master",
4155
}
4256

57+
58+
def make_problem_content(template, problem: dict) -> str:
59+
return template\
60+
.replace('<problem_name>', problem['name']) \
61+
.replace('<problem_id>', str(problem['id'])) \
62+
.replace('<url>', problem['url']) \
63+
.replace('<difficulty>', problem['difficulty']) \
64+
.replace('<tags>', ', '.join(problem['tags'])) \
65+
66+
67+
4368
def write_all_text(path: str, text: str) -> None:
4469
f = open(path, 'w')
4570
f.write(text)
@@ -52,7 +77,9 @@ def make_problem_yaml(problem: dict) -> str:
5277
lines.append(f"file: \"{problem['id']}.md\"")
5378
lines.append(f"name: \"{problem['name']}\"")
5479
lines.append(f"src: \"{problem['url']}\"")
55-
tags = '\n'+'\n'.join(f' - {x}' for x in problem['tags']) if len(problem['tags']) > 0 else ''
80+
tags = '\n' + \
81+
'\n'.join(
82+
f' - {x}' for x in problem['tags']) if len(problem['tags']) > 0 else ''
5683
lines.append(f"tags: {tags}")
5784
lines.append(f"done: false")
5885
lines.append(f"draft: false")
@@ -63,23 +90,24 @@ def make_problem_yaml(problem: dict) -> str:
6390
return '\n'.join(lines)
6491

6592

66-
def get_problems(problems: list) -> dict:
93+
def get_problems(problems: list) -> list:
6794
"""문제 정보를 담고 있는 딕셔너리를 반환합니다.
6895
"""
6996
if len(problems) < 1:
7097
raise ValueError("Invalid number of problems")
7198

7299
url = f"https://solved.ac/api/v3/problem/lookup?problemIds={','.join(problems)}"
73-
response = requests.get(url)
100+
response = urllib.request.urlopen(url)
101+
source = response.read()
74102

75-
if response.status_code != 200:
76-
raise Exception("Unexpected response status")
103+
# if response.status_code != 200:
104+
# raise Exception("Unexpected response status")
77105

78-
json_data = response.json()
106+
json_data = json.loads(source)
79107
problems = []
80108

81109
for problem in json_data:
82-
problem_info = {}
110+
problem_info = defaultdict(str)
83111
problem_info["id"] = problem["problemId"]
84112
problem_info["name"] = html.unescape(problem["titleKo"])
85113
problem_info["level"] = problem["level"]
@@ -94,6 +122,7 @@ def get_problems(problems: list) -> dict:
94122

95123
return problems
96124

125+
97126
# response = requests.get("https://solved.ac/api/v3/problem/show?problemId=1052")
98127
# json_data = response.json()
99128

@@ -106,6 +135,7 @@ def __init__(self):
106135
help="사용법 -p 1052 3023", required=True, default="")
107136
parser.add_argument(
108137
"-o", "--output", help="사용법: -o 문제 정보를 저장할 디렉터리", required=False, default="")
138+
109139
parser.add_argument(
110140
"-r", "--random", help="사용법: -r [최소레벨] [최대레벨] 레벨 범위 안에서 문제를 랜덤으로 가져옵니다.", required=False, default="")
111141
parser.add_argument(
@@ -138,13 +168,19 @@ def save_dir(self):
138168
return self.__output
139169

140170

141-
if __name__ == '__main__':
142-
app = CommandLineParser()
143-
171+
def execute(app: CommandLineParser) -> None:
144172
if app.validation():
145173
problems = app.problems()
146174
save_dir = app.save_dir()
147175

176+
# 입력받은 이름 폴더 ( abs path )
177+
target_dir = os.path.join(os.getcwd(), save_dir)
178+
if not os.path.isdir(target_dir):
179+
print(f"{save_dir} 디렉터리가 존재하지 않습니다.")
180+
return
181+
182+
print("문제 정보를 생성합니다.")
183+
148184
problems_info = get_problems(problems)
149185

150186
writer = MarkdownTableWriter(
@@ -158,7 +194,22 @@ def save_dir(self):
158194

159195
print(writer.dumps())
160196

161-
if len(save_dir) > 0:
162-
for problem in problems_info:
163-
write_all_text(os.path.join(
164-
save_dir, f"{problem['id']}.md"), make_problem_yaml(problem))
197+
for problem in problems_info:
198+
content = make_problem_content(__template, problem)
199+
problem_dir = os.path.join(
200+
target_dir, f"[{problem['id']}]{problem['name']}")
201+
if not os.path.isdir(problem_dir):
202+
os.mkdir(problem_dir)
203+
204+
write_all_text(os.path.join(
205+
problem_dir, f"{problem['id']}.py"), content)
206+
207+
write_all_text(os.path.join(
208+
problem_dir, f"README.md"), make_problem_yaml(problem))
209+
210+
print(problems_info)
211+
212+
213+
if __name__ == '__main__':
214+
app = CommandLineParser()
215+
execute(app)

0 commit comments

Comments
 (0)