Files
SolutionEuler/main.py
Sidney Zhang 09ddf3f65c feat(main.py):重构主函数调用方式,将 app() 调用封装到 main() 函数中
 feat(euler_37.py):添加截断质数问题的初始实现
 feat(euler_37_primeclass.py):添加基于质数生成器的截断质数完整解决方案
📝 docs(millerrabin_test.pdf):添加 Miller-Rabin 测试的详细文档
2026-01-07 18:26:00 +08:00

73 lines
2.2 KiB
Python

import runpy
from pathlib import Path
from profile import run
from tarfile import SOLARIS_XHDTYPE
import typer
app = typer.Typer()
@app.command("add", help="Add a new problem to the projecteuler repository.")
def add_newproblem(num: int, name: str | None = None) -> None:
"""Add a new problem to the projecteuler repository."""
typer.echo(f"Adding problem {num} to the projecteuler repository.")
if name:
title = f"{num:04d}.{name}"
else:
title = f"{num:04d}"
Path(f"solutions/{title}").mkdir(parents=True, exist_ok=True)
Path(f"solutions/{title}/euler_{num}.py").touch()
@app.command("list", help="List all problems in the projecteuler repository.")
def list_problems(every: bool = False):
"""List all problems in the projecteuler repository."""
if every:
typer.echo("Listing all problems in the projecteuler repository.")
else:
typer.echo("Listing near problems in the projecteuler repository.")
for path in Path("solutions").iterdir():
if path.is_dir():
if every:
tmp = list(path.iterdir())
tmp = all(ff.is_dir() for ff in tmp)
if tmp:
for ff in path.iterdir():
if ff.is_dir():
typer.echo(f"{ff.name}")
else:
typer.echo(f"{path.name}")
else:
if "_" in path.name:
typer.echo(f"{path.name} (completed)")
else:
typer.echo(f"{path.name}")
@app.command("solution", help="Run a solution for a given problem.")
def run_solution(num: int) -> None:
folders = list(Path("solutions").iterdir())
folders = [
folder
for folder in folders
if folder.is_dir() and folder.name.startswith(f"{num:04d}")
]
runpy.run_path(
(folders[0] / f"euler_{num}.py").resolve().as_posix(), run_name="__main__"
)
@app.command("version", help="Display the version of the projecteuler CLI.")
def version():
"""Display the version of the projecteuler CLI."""
typer.echo("projecteuler solution version 0.1.0")
def main():
app()
if __name__ == "__main__":
main()