@@ -27,13 +27,12 @@ def _get_problem_difficulty(problem_name: str) -> str | None:
27
27
return None
28
28
29
29
30
- def resolve_problems (
30
+ def _validate_single_option (
31
31
problem_nums : list [int ],
32
32
problem_slugs : list [str ],
33
33
problem_tag : str | None ,
34
- difficulty : str | None ,
35
34
all_problems : bool ,
36
- ) -> list [ str ] :
35
+ ) -> None :
37
36
options_count = sum (
38
37
[
39
38
len (problem_nums ) > 0 ,
@@ -50,36 +49,58 @@ def resolve_problems(
50
49
)
51
50
raise typer .Exit (1 )
52
51
52
+
53
+ def _resolve_by_numbers (problem_nums : list [int ]) -> list [str ]:
53
54
problems = []
55
+ for num in problem_nums :
56
+ problem_name = find_problem_by_number (num )
57
+ if not problem_name :
58
+ typer .echo (f"Error: Problem number { num } not found" , err = True )
59
+ raise typer .Exit (1 )
60
+ problems .append (problem_name )
61
+ return problems
62
+
63
+
64
+ def _resolve_by_tag (problem_tag : str ) -> list [str ]:
65
+ problems = find_problems_by_tag (problem_tag )
66
+ if not problems :
67
+ typer .echo (f"Error: No problems found with tag '{ problem_tag } '" , err = True )
68
+ raise typer .Exit (1 )
69
+ typer .echo (f"Found { len (problems )} problems with tag '{ problem_tag } '" )
70
+ return problems
71
+
72
+
73
+ def _filter_by_difficulty (problems : list [str ], difficulty : str ) -> list [str ]:
74
+ filtered_problems = []
75
+ for problem_name in problems :
76
+ problem_difficulty = _get_problem_difficulty (problem_name )
77
+ if problem_difficulty and problem_difficulty .lower () == difficulty .lower ():
78
+ filtered_problems .append (problem_name )
79
+ typer .echo (f"Filtered to { len (filtered_problems )} problems with difficulty '{ difficulty } '" )
80
+ return filtered_problems
81
+
82
+
83
+ def resolve_problems (
84
+ problem_nums : list [int ],
85
+ problem_slugs : list [str ],
86
+ problem_tag : str | None ,
87
+ difficulty : str | None ,
88
+ all_problems : bool ,
89
+ ) -> list [str ]:
90
+ _validate_single_option (problem_nums , problem_slugs , problem_tag , all_problems )
54
91
55
92
if problem_nums :
56
- for num in problem_nums :
57
- problem_name = find_problem_by_number (num )
58
- if not problem_name :
59
- typer .echo (f"Error: Problem number { num } not found" , err = True )
60
- raise typer .Exit (1 )
61
- problems .append (problem_name )
93
+ problems = _resolve_by_numbers (problem_nums )
62
94
elif problem_slugs :
63
95
problems = problem_slugs
64
96
elif problem_tag :
65
- problems = find_problems_by_tag (problem_tag )
66
- if not problems :
67
- typer .echo (f"Error: No problems found with tag '{ problem_tag } '" , err = True )
68
- raise typer .Exit (1 )
69
- typer .echo (f"Found { len (problems )} problems with tag '{ problem_tag } '" )
70
- elif all_problems :
97
+ problems = _resolve_by_tag (problem_tag )
98
+ else : # all_problems
71
99
problems = get_all_problems ()
72
100
typer .echo (f"Found { len (problems )} problems" )
73
101
74
- # Apply difficulty filter if specified
75
102
if difficulty :
76
- filtered_problems = []
77
- for problem_name in problems :
78
- problem_difficulty = _get_problem_difficulty (problem_name )
79
- if problem_difficulty and problem_difficulty .lower () == difficulty .lower ():
80
- filtered_problems .append (problem_name )
81
- problems = filtered_problems
82
- typer .echo (f"Filtered to { len (problems )} problems with difficulty '{ difficulty } '" )
103
+ problems = _filter_by_difficulty (problems , difficulty )
83
104
84
105
return problems
85
106
0 commit comments