8 if str(expression).isdigit():
10 if min_value <= num <= max_value:
13 raise ValueError(f
"Invalid choise: {expression}. Number out of range [{min_value}-{max_value}].")
16 numbers =
set(
range(min_value, max_value + 1))
21 print(f
"Initial expression: {str(expression)}")
22 if isinstance(expression, tuple)
or isinstance(expression, list):
23 expression =
",".
join(map(str, expression))
25 parts = expression.split(
",")
26 print(f
"Parts after split: {parts}")
31 if part.startswith(
"!"):
37 result = include_set
if include_set
else numbers
41 result = {num
for num
in result
if min_value <= num <= max_value}
46 if "-" in expr
and "*" not in expr:
47 start, end = map(int, expr.split(
"-"))
48 start, end =
max(min_value, start),
min(max_value, end)
54 return {num}
if min_value <= num <= max_value
else set()
57 pattern =
"^" + expr.replace(
"*",
".*") +
"$"
58 regex = re.compile(pattern)
60 return {num
for num
in range(min_value, max_value + 1)
if regex.match(
str(num))}
62 if __name__ ==
"__main__":
66 (
"5-10", [5, 6, 7, 8, 9, 10]),
68 (
"5,10,15", [5, 10, 15]),
69 (
"5-10,!7", [5, 6, 8, 9, 10]),
72 (
"5-10,!7-8", [5, 6, 9, 10]),
73 (
"1*", [num
for num
in range(1280)
if re.match(
r"^1.*$",
str(num))]),
74 (
"!9*", [num
for num
in range(1280)
if not re.match(
r"^9.*$",
str(num))]),
77 for expression, expected
in test_cases:
80 assert result == expected, f
"Test failed for {expression}: {result} != {expected}"
81 except Exception
as e:
82 print(f
"Test failed for {expression}: {e}")