mirror of
https://github.com/Xevion/leetcode.git
synced 2025-12-06 17:15:29 -06:00
Combine row generation with solution loading, question database
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/env python3
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from jinja2 import Template
|
from jinja2 import Template
|
||||||
|
import logging
|
||||||
import json
|
import json
|
||||||
|
|
||||||
"""
|
"""
|
||||||
@@ -23,26 +23,8 @@ ROOT_DIRECTORY: Path = SCRIPTS_DIRECTORY.parent
|
|||||||
TEMPLATE_PATH: Path = SCRIPTS_DIRECTORY / "TEMPLATE.j2"
|
TEMPLATE_PATH: Path = SCRIPTS_DIRECTORY / "TEMPLATE.j2"
|
||||||
SOLUTIONS_DIRECTORY: Path = SCRIPTS_DIRECTORY.parent / "solutions"
|
SOLUTIONS_DIRECTORY: Path = SCRIPTS_DIRECTORY.parent / "solutions"
|
||||||
|
|
||||||
|
logging.basicConfig(level=logging.DEBUG)
|
||||||
def get_solution(solution_directory: Path) -> dict:
|
logger = logging.getLogger(__name__)
|
||||||
"""
|
|
||||||
Returns a dictionary containing information about the solution.
|
|
||||||
The dictionary is created by reading the `meta.json` file in the solution directory.
|
|
||||||
"""
|
|
||||||
|
|
||||||
with (solution_directory / "meta.json").open("r") as meta_file:
|
|
||||||
meta = json.load(meta_file)
|
|
||||||
|
|
||||||
solutions = " ".join(
|
|
||||||
f"[{solution['name']}](/{(solution_directory / solution['path']).relative_to(ROOT_DIRECTORY)})" for solution in meta["solutions"]
|
|
||||||
)
|
|
||||||
|
|
||||||
return {
|
|
||||||
"number": 123,
|
|
||||||
"title": meta["title"],
|
|
||||||
"solutions": solutions,
|
|
||||||
"difficulty": "kinda hard idk",
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
def is_solution_ready(solution_directory: Path) -> bool:
|
def is_solution_ready(solution_directory: Path) -> bool:
|
||||||
@@ -60,35 +42,57 @@ def is_solution_ready(solution_directory: Path) -> bool:
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
def main():
|
def generate_row(solution_directory: Path) -> str:
|
||||||
# Get all solution directories
|
"""
|
||||||
solutions = list(map(
|
Returns a dictionary containing information about the solution.
|
||||||
get_solution, filter(is_solution_ready, SOLUTIONS_DIRECTORY.glob("*"))
|
The dictionary is created by reading the `meta.json` file in the solution directory.
|
||||||
))
|
"""
|
||||||
|
|
||||||
|
with (solution_directory / "meta.json").open("r") as meta_file:
|
||||||
|
meta = json.load(meta_file)
|
||||||
|
|
||||||
|
solutions = " ".join(
|
||||||
|
f"[{solution['name']}](/{(solution_directory / solution['path']).relative_to(ROOT_DIRECTORY)})"
|
||||||
|
for solution in meta["solutions"]
|
||||||
|
)
|
||||||
|
|
||||||
|
columns = [
|
||||||
|
123,
|
||||||
|
meta["title"],
|
||||||
|
solutions,
|
||||||
|
"kinda hard idk",
|
||||||
|
]
|
||||||
|
|
||||||
|
return "| " + " | ".join(map(str, columns)) + " |"
|
||||||
|
|
||||||
|
|
||||||
|
def main():
|
||||||
# TODO: Prevent inclusion of a solution if a linked source file includes a "EXCLUDE" tag.
|
# TODO: Prevent inclusion of a solution if a linked source file includes a "EXCLUDE" tag.
|
||||||
# TODO: Include, but mark as "in-progress" if a linked source file includes a "WIP" or "WORK IN PROGRESS" tag (case insensitive).
|
# TODO: Include, but mark as "in-progress" if a linked source file includes a "WIP" or "WORK IN PROGRESS" tag (case insensitive).
|
||||||
# TODO: Generate the README.md file
|
# TODO: Generate the README.md file
|
||||||
|
from questions import QuestionDatabase
|
||||||
|
|
||||||
|
database = QuestionDatabase(
|
||||||
|
cache_path=ROOT_DIRECTORY / "questions.json", cache_time=60 * 60 * 24
|
||||||
|
)
|
||||||
|
|
||||||
table = [
|
table = [
|
||||||
"| # | Title | Solution | Difficulty |",
|
"| # | Title | Solution | Difficulty |",
|
||||||
"|---| ----- | -------- | ---------- |",
|
"|-|-|-|-|",
|
||||||
]
|
]
|
||||||
|
|
||||||
table.extend(
|
table.extend(
|
||||||
[
|
map(generate_row, filter(is_solution_ready, SOLUTIONS_DIRECTORY.glob("*")))
|
||||||
f"| {solution['number']} | {solution['title']} | {solution['solutions']} | {solution['difficulty']} |"
|
|
||||||
for solution in solutions
|
|
||||||
]
|
|
||||||
)
|
)
|
||||||
table = "\n".join(table)
|
table = "\n".join(table)
|
||||||
|
|
||||||
|
|
||||||
with TEMPLATE_PATH.open("r") as template_file:
|
with TEMPLATE_PATH.open("r") as template_file:
|
||||||
template = Template(template_file.read())
|
template = Template(template_file.read())
|
||||||
|
|
||||||
with (ROOT_DIRECTORY / "README.md").open("w") as readme_file:
|
with (ROOT_DIRECTORY / "README.md").open("w") as readme_file:
|
||||||
readme_file.write(template.render(date=datetime.now().strftime("%Y-%m-%d"), table=table))
|
readme_file.write(
|
||||||
|
template.render(date=datetime.now().strftime("%Y-%m-%d"), table=table)
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
Reference in New Issue
Block a user