File size: 5,355 Bytes
da8df85
 
4433dc8
da8df85
4433dc8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
da8df85
 
 
4433dc8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
da8df85
 
4433dc8
 
 
 
da8df85
 
4433dc8
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
from __future__ import annotations

from typing import Any


VISIBLE_TEST_COUNT = 3


PROBLEM_BANK: list[dict[str, Any]] = [
    {
        "problem_id": "easy_double",
        "difficulty": "easy",
        "problem": "Given an integer n, print n * 2.",
        "input_format": "A single integer n.",
        "constraints": "-10^9 <= n <= 10^9",
        "examples": [
            {"input": "2\n", "output": "4"},
            {"input": "5\n", "output": "10"},
        ],
        "test_cases": [
            {"input": "2\n", "output": "4"},
            {"input": "5\n", "output": "10"},
            {"input": "0\n", "output": "0"},
            {"input": "1\n", "output": "2"},
            {"input": "-3\n", "output": "-6"},
            {"input": "10\n", "output": "20"},
            {"input": "999999\n", "output": "1999998"},
            {"input": "-1000000000\n", "output": "-2000000000"},
        ],
    },
    {
        "problem_id": "easy_sum_two",
        "difficulty": "easy",
        "problem": "Given two integers a and b, print their sum.",
        "input_format": "Two space-separated integers a and b.",
        "constraints": "-10^9 <= a, b <= 10^9",
        "examples": [
            {"input": "2 3\n", "output": "5"},
            {"input": "-4 7\n", "output": "3"},
        ],
        "test_cases": [
            {"input": "2 3\n", "output": "5"},
            {"input": "-4 7\n", "output": "3"},
            {"input": "0 0\n", "output": "0"},
            {"input": "1000000000 1\n", "output": "1000000001"},
            {"input": "-8 -9\n", "output": "-17"},
            {"input": "42 -42\n", "output": "0"},
        ],
    },
    {
        "problem_id": "medium_maximum",
        "difficulty": "medium",
        "problem": "Given n integers, print the maximum value.",
        "input_format": "First line contains n. Second line contains n space-separated integers.",
        "constraints": "1 <= n <= 200000; -10^9 <= values <= 10^9",
        "examples": [
            {"input": "5\n1 7 3 2 5\n", "output": "7"},
            {"input": "3\n-5 -2 -9\n", "output": "-2"},
        ],
        "test_cases": [
            {"input": "5\n1 7 3 2 5\n", "output": "7"},
            {"input": "3\n-5 -2 -9\n", "output": "-2"},
            {"input": "1\n42\n", "output": "42"},
            {"input": "6\n0 0 0 0 0 0\n", "output": "0"},
            {"input": "4\n1000000000 -1 5 999999999\n", "output": "1000000000"},
            {"input": "7\n-10 -20 -30 -1 -40 -50 -60\n", "output": "-1"},
        ],
    },
    {
        "problem_id": "medium_count_even",
        "difficulty": "medium",
        "problem": "Given n integers, print how many of them are even.",
        "input_format": "First line contains n. Second line contains n space-separated integers.",
        "constraints": "1 <= n <= 200000; -10^9 <= values <= 10^9",
        "examples": [
            {"input": "5\n1 2 3 4 5\n", "output": "2"},
            {"input": "4\n2 4 6 8\n", "output": "4"},
        ],
        "test_cases": [
            {"input": "5\n1 2 3 4 5\n", "output": "2"},
            {"input": "4\n2 4 6 8\n", "output": "4"},
            {"input": "3\n1 3 5\n", "output": "0"},
            {"input": "1\n0\n", "output": "1"},
            {"input": "6\n-2 -3 -4 -5 -6 -7\n", "output": "3"},
            {"input": "8\n10 11 12 13 14 15 16 17\n", "output": "4"},
        ],
    },
    {
        "problem_id": "hard_reverse_words",
        "difficulty": "hard",
        "problem": "Given a sentence, print its words in reverse order.",
        "input_format": "A single line containing words separated by one or more spaces.",
        "constraints": "1 <= sentence length <= 10000",
        "examples": [
            {"input": "hello world\n", "output": "world hello"},
            {"input": "openenv rewards matter\n", "output": "matter rewards openenv"},
        ],
        "test_cases": [
            {"input": "hello world\n", "output": "world hello"},
            {"input": "openenv rewards matter\n", "output": "matter rewards openenv"},
            {"input": "single\n", "output": "single"},
            {"input": "  trim   extra   spaces  \n", "output": "spaces extra trim"},
            {"input": "a b c d e\n", "output": "e d c b a"},
            {"input": "adaptive dsa tutor\n", "output": "tutor dsa adaptive"},
        ],
    },
]


def load_problem_bank() -> list[dict[str, Any]]:
    return [_copy_problem(problem) for problem in PROBLEM_BANK]


def load_problem(problem_id: str | None = None, difficulty: str | None = None) -> dict[str, Any]:
    problems = load_problem_bank()
    if problem_id is not None:
        for problem in problems:
            if problem["problem_id"] == problem_id:
                return problem

    if difficulty is not None:
        for problem in problems:
            if problem["difficulty"] == difficulty:
                return problem

    return problems[0]


def split_test_cases(
    test_cases: list[dict[str, str]],
) -> tuple[list[dict[str, str]], list[dict[str, str]]]:
    return test_cases[:VISIBLE_TEST_COUNT], test_cases[VISIBLE_TEST_COUNT:]


def _copy_problem(problem: dict[str, Any]) -> dict[str, Any]:
    copied = dict(problem)
    copied["examples"] = [dict(example) for example in problem["examples"]]
    copied["test_cases"] = [dict(test_case) for test_case in problem["test_cases"]]
    return copied