Beispiel #1
0
    def test_from_html(self):
        url = 'https://atcoder.jp/contests/abc114/tasks/abc114_d'
        resp = requests.get(url)
        html = resp.content.decode(resp.apparent_encoding)
        content = AtCoderProblemContent.from_html(
            html, problem=AtCoderProblem.from_url(url))

        self.assertEqual(content.alphabet, 'D')
        self.assertEqual(content.available_languages, None)
        self.assertEqual(content.html, html)
        self.assertEqual(content.input_format, '<var>N</var>\r\n')
        self.assertEqual(content.memory_limit_byte, 1024 * 1000 * 1000)
        self.assertEqual(content.name, '756')
        self.assertEqual(content.problem, AtCoderProblem.from_url(url))
        self.assertEqual(content.sample_cases, [
            TestCase(name='sample-1',
                     input_name='入力例 1',
                     input_data=b'9\n',
                     output_name='出力例 1',
                     output_data=b'0\n'),
            TestCase(name='sample-2',
                     input_name='入力例 2',
                     input_data=b'10\n',
                     output_name='出力例 2',
                     output_data=b'1\n'),
            TestCase(name='sample-3',
                     input_name='入力例 3',
                     input_data=b'100\n',
                     output_name='出力例 3',
                     output_data=b'543\n'),
        ])
        self.assertEqual(content.score, 400)
        self.assertEqual(content.time_limit_msec, 2 * 1000)
Beispiel #2
0
    def test_old_problem(self):
        """
        :note: https://github.com/kmyk/online-judge-tools/issues/380

        .. code-block:: html

            <h3>入力</h3>
            <section>
                入力は以下の形式で与えられる。
                <pre>
                    <var>N</var>
                </pre>
            </section>
        """

        self.assertEqual(
            AtCoderProblem.from_url(
                'https://atcoder.jp/contests/arc001/tasks/arc001_1').
            get_input_format(),
            '\r\n<var>N</var>\r\n<var>c_1c_2c_3…c_N</var>\r\n')
        self.assertEqual(
            AtCoderProblem.from_url(
                'https://atcoder.jp/contests/arc002/tasks/arc002_3').
            get_input_format(),
            '\r\n<var>N</var>\r\n<var>c_{1}c_{2}...c_{N}</var>\r\n')
        self.assertEqual(
            AtCoderProblem.from_url(
                'https://atcoder.jp/contests/arc034/tasks/arc034_4'
            ).get_input_format(),
            '\r\n<var>A</var> <var>B</var> <var>C</var>\r\n<var>a_1</var> <var>a_2</var> .. <var>a_A</var>\r\n<var>b_1</var> <var>b_2</var> .. <var>b_B</var>\r\n'
        )
Beispiel #3
0
    def test_from_html_very_old(self):
        url = 'https://atcoder.jp/contests/utpc2011/tasks/utpc2011_1'
        resp = requests.get(url)
        html = resp.content.decode(resp.apparent_encoding)
        data = AtCoderProblemDetailedData.from_html(
            html, problem=AtCoderProblem.from_url(url))

        self.assertEqual(data.alphabet, 'A')
        self.assertEqual(data.available_languages, None)
        self.assertEqual(data.html, html)
        self.assertEqual(data.input_format, None)
        self.assertEqual(data.memory_limit_byte, 292 * 1000 * 1000)
        self.assertEqual(data.name, 'プログラミングコンテスト')
        self.assertEqual(data.problem, AtCoderProblem.from_url(url))
        self.assertEqual(data.sample_cases, [
            TestCase(name='sample-1',
                     input_name='入力例 1:',
                     input_data=b'3 4\n1 0 1 0\n1 1 1 0\n0 0 0 1\n',
                     output_name='入力例 1 に対する出力例:',
                     output_data=b'3\n'),
            TestCase(name='sample-2',
                     input_name='入力例 2:',
                     input_data=b'3 4\n1 1 1 1\n1 1 1 1\n1 1 1 1\n',
                     output_name='入力例 2 に対する出力例:',
                     output_data=b'4\n'),
            TestCase(name='sample-3',
                     input_name='入力例 3:',
                     input_data=b'1 1\n0\n',
                     output_name='入力例 3 に対する出力例:',
                     output_data=b'0\n'),
        ])
        self.assertEqual(data.score, None)
        self.assertEqual(data.time_limit_msec, 1 * 1000)
Beispiel #4
0
    def test_dwacon_problem(self):
        """
        :note: https://github.com/kmyk/online-judge-tools/issues/142

        .. code-block:: html

            <h3 id="入力">入力</h3>
            <p>入力は以下の形式で標準入力から与えられる。</p>
            <div class="io-style">
                <pre>
                    <var>N</var>
                </pre>
            </div>
        """

        self.assertEqual(
            AtCoderProblem.from_url(
                'https://atcoder.jp/contests/dwacon2018-final/tasks/dwacon2018_final_a'
            ).get_input_format(),
            '\r\n<var>H</var> <var>M</var> <var>S</var>\r\n<var>C_1</var> <var>C_2</var>\r\n'
        )
        self.assertEqual(
            AtCoderProblem.from_url(
                'https://atcoder.jp/contests/dwacon2018-final/tasks/dwacon2018_final_b'
            ).get_input_format(),
            '\r\n<var>N</var> <var>K</var>\r\n<var>v_1</var> <var>...</var> <var>v_N</var>\r\n'
        )
Beispiel #5
0
    def test_from_url_with_superfluous_things(self):
        """This tests unusual URLs.

        AtCoder uses query parameters like `?lang=en`.
        A service (AtCoder Virtual Contest https://not-522.appspot.com/) sometimes makes URLs which contain `//` in their paths.
        """

        self.assertEqual(AtCoderProblem.from_url('http://agc001.contest.atcoder.jp//////tasks//////agc001_a//////?hoge=fuga#piyo').contest_id, 'agc001')
        self.assertEqual(AtCoderProblem.from_url('http://agc001.contest.atcoder.jp//////tasks//////agc001_a//////?hoge=fuga#piyo').problem_id, 'agc001_a')
Beispiel #6
0
 def test_get_alphabet(self):
     self.assertEqual(
         AtCoderProblem.from_url(
             'https://atcoder.jp/contests/agc028/tasks/agc028_f').
         get_alphabet(), 'F')
     self.assertEqual(
         AtCoderProblem.from_url(
             'https://atcoder.jp/contests/agc028/tasks/agc028_f2').
         get_alphabet(), 'F2')
Beispiel #7
0
 def test_get_score(self):
     self.assertEqual(
         AtCoderProblem.from_url(
             'https://atcoder.jp/contests/future-contest-2018-final/tasks/future_contest_2018_final_a'
         ).get_score(), 50000000)
     self.assertEqual(
         AtCoderProblem.from_url(
             'https://atcoder.jp/contests/abc001/tasks/abc001_4').get_score(
             ), None)
Beispiel #8
0
 def test_get_time_limit_is_less_than_msec(self):
     self.assertEqual(
         AtCoderProblem.from_url(
             'https://atcoder.jp/contests/joi2019ho/tasks/joi2019ho_c').
         download_data().time_limit_msec, 500)
     self.assertEqual(
         AtCoderProblem.from_url(
             'https://atcoder.jp/contests/future-contest-2019-qual/tasks/future_contest_2019_qual_b'
         ).download_data().time_limit_msec, 0)
Beispiel #9
0
 def test_eq(self):
     self.assertEqual(
         AtCoderProblem.from_url(
             'https://kupc2014.contest.atcoder.jp/tasks/kupc2014_d'),
         AtCoderProblem.from_url(
             'https://atcoder.jp/contests/kupc2014/tasks/kupc2014_d'))
     self.assertNotEqual(
         AtCoderProblem.from_url(
             'https://kupc2014.contest.atcoder.jp/tasks/kupc2014_d'),
         AtCoderProblem.from_url(
             'https://atcoder.jp/contests/agc030/tasks/agc030_c'))
Beispiel #10
0
 def test_from_url(self):
     self.assertEqual(AtCoderProblem.from_url('https://kupc2014.contest.atcoder.jp/tasks/kupc2014_d').contest_id, 'kupc2014')
     self.assertEqual(AtCoderProblem.from_url('https://kupc2014.contest.atcoder.jp/tasks/kupc2014_d').problem_id, 'kupc2014_d')
     self.assertEqual(AtCoderProblem.from_url('http://jag2013spring.contest.atcoder.jp/tasks/icpc2013spring_a').contest_id, 'jag2013spring')
     self.assertEqual(AtCoderProblem.from_url('http://jag2013spring.contest.atcoder.jp/tasks/icpc2013spring_a').problem_id, 'icpc2013spring_a')
     self.assertEqual(AtCoderProblem.from_url('https://beta.atcoder.jp/contests/abc073/tasks/abc073_a').contest_id, 'abc073')
     self.assertEqual(AtCoderProblem.from_url('https://beta.atcoder.jp/contests/abc073/tasks/abc073_a').problem_id, 'abc073_a')
     self.assertEqual(AtCoderProblem.from_url('https://beta.atcoder.jp/contests/ddcc2017-qual/tasks/ddcc2017_qual_a').contest_id, 'ddcc2017-qual')
     self.assertEqual(AtCoderProblem.from_url('https://beta.atcoder.jp/contests/ddcc2017-qual/tasks/ddcc2017_qual_a').problem_id, 'ddcc2017_qual_a')
     self.assertEqual(AtCoderProblem.from_url('https://atcoder.jp/contests/agc030/tasks/agc030_c').contest_id, 'agc030')
     self.assertEqual(AtCoderProblem.from_url('https://atcoder.jp/contests/agc030/tasks/agc030_c').problem_id, 'agc030_c')
Beispiel #11
0
 def test_repr(self):
     self.assertEqual(
         repr(AtCoderProblem('kupc2014', 'kupc2014_d')),
         "AtCoderProblem.from_url('https://atcoder.jp/contests/kupc2014/tasks/kupc2014_d')"
     )
     self.assertEqual(
         repr(AtCoderProblem('agc030', 'agc030_c')),
         "AtCoderProblem.from_url('https://atcoder.jp/contests/agc030/tasks/agc030_c')"
     )
     self.assertEqual(
         repr(AtCoderProblem('xxxxxx', 'yyyyyy')),
         "AtCoderProblem.from_url('https://atcoder.jp/contests/xxxxxx/tasks/yyyyyy')"
     )
Beispiel #12
0
    def test_from_html_without_sample_cases(self):
        url = 'https://atcoder.jp/contests/tenka1-2013-quala/tasks/tenka1_2013_qualA_a'
        resp = requests.get(url)
        html = resp.content.decode(resp.apparent_encoding)
        data = AtCoderProblemDetailedData.from_html(html, problem=AtCoderProblem.from_url(url))

        self.assertEqual(data.alphabet, 'A')
        self.assertEqual(data.available_languages, None)
        self.assertEqual(data.html, html)
        self.assertEqual(data.input_format, None)
        self.assertEqual(data.memory_limit_byte, 64 * 1000 * 1000)
        self.assertEqual(data.name, '天下一株式会社採用情報')
        self.assertEqual(data.problem, AtCoderProblem.from_url(url))
        self.assertEqual(data.sample_cases, [])
        self.assertEqual(data.score, None)
        self.assertEqual(data.time_limit_msec, 2 * 1000)
Beispiel #13
0
 def test_iterate_submissions(self):
     problem = AtCoderProblem.from_url('https://atcoder.jp/contests/abc119/tasks/abc119_c')
     submissions = problem.iterate_submissions()
     self.assertEqual(next(submissions).get_url(), 'https://atcoder.jp/contests/abc119/submissions/4368719')
     self.assertEqual(next(submissions).get_url(), 'https://atcoder.jp/contests/abc119/submissions/4368922')
     self.assertEqual(next(submissions).get_url(), 'https://atcoder.jp/contests/abc119/submissions/4369188')
     self.assertEqual(next(submissions).get_url(), 'https://atcoder.jp/contests/abc119/submissions/4369193')
 def test_load_details(self):
     problem = AtCoderProblem.from_url('https://atcoder.jp/contests/abc118/tasks/abc118_a')
     self.assertEqual(problem.get_alphabet(), 'A')
     self.assertEqual(problem.get_task_name(), 'B +/- A')
     self.assertEqual(problem.get_time_limit_msec(), 2000)
     self.assertEqual(problem.get_memory_limit_byte(), 1024 * 1000 * 1000)
     self.assertEqual(problem.get_score(), 100)
Beispiel #15
0
 def test_iterate_submissions(self):
     problem = AtCoderProblem.from_url('https://atcoder.jp/contests/abc119/tasks/abc119_c')
     submissions = problem.iterate_submissions()
     self.assertEqual(next(submissions).download_data().score, 300)
     self.assertEqual(next(submissions).download_data().code_size, 1208)
     self.assertEqual(next(submissions).download_data().exec_time_msec, 2)
     self.assertEqual(next(submissions).download_data().memory_byte, 256 * 1000)
 def test_iterate_submissions(self):
     problem = AtCoderProblem.from_url('https://atcoder.jp/contests/abc119/tasks/abc119_c')
     submissions = problem.iterate_submissions()
     self.assertEqual(next(submissions).get_score(), 300)
     self.assertEqual(next(submissions).get_code_size(), 1208)
     self.assertEqual(next(submissions).get_exec_time_msec(), 2)
     self.assertEqual(next(submissions).get_memory_byte(), 256 * 1000)
    def test_get_score_latex(self):
        """
        .. seealso::
            https://github.com/kmyk/online-judge-tools/issues/411
        """

        self.assertIsNone(AtCoderProblem.from_url('https://atcoder.jp/contests/wupc2019/tasks/wupc2019_a').get_score())
Beispiel #18
0
 def test_load_details(self):
     problem = AtCoderProblem.from_url('https://atcoder.jp/contests/abc118/tasks/abc118_a')
     data = problem.download_data()
     self.assertEqual(data.alphabet, 'A')
     self.assertEqual(data.name, 'B +/- A')
     self.assertEqual(data.time_limit_msec, 2000)
     self.assertEqual(data.memory_limit_byte, 1024 * 1000 * 1000)
     self.assertEqual(data.score, 100)
Beispiel #19
0
 def test_from_url(self):
     self.assertEqual(
         AtCoderProblem.from_url(
             'https://kupc2014.contest.atcoder.jp/tasks/kupc2014_d').
         contest_id, 'kupc2014')
     self.assertEqual(
         AtCoderProblem.from_url(
             'https://kupc2014.contest.atcoder.jp/tasks/kupc2014_d').
         problem_id, 'kupc2014_d')
     self.assertEqual(
         AtCoderProblem.from_url(
             'https://atcoder.jp/contests/agc030/tasks/agc030_c').
         contest_id, 'agc030')
     self.assertEqual(
         AtCoderProblem.from_url(
             'https://atcoder.jp/contests/agc030/tasks/agc030_c').
         problem_id, 'agc030_c')
Beispiel #20
0
 def test_download_sample_cases_s8pc_broken_html(self):
     # see: https://github.com/kmyk/online-judge-tools/issues/615
     self.assertEqual(AtCoderProblem.from_url('https://atcoder.jp/contests/s8pc-4/tasks/s8pc_4_d').download_sample_cases(), [
         TestCase(name='sample-1', input_name='Sample Input 1', input_data=b'4\n1 2\n2 3\n2 4\n', output_name='Sample Output 1', output_data=b'2.0\n1.0\n2.0\n2.0\n'),
         TestCase(name='sample-2', input_name='Sample Input 2', input_data=b'4\n1 2\n2 4\n4 3\n', output_name='Sample Output 2', output_data=b'3.0\n1.5\n3.0\n1.5\n'),
         TestCase(name='sample-3', input_name='Sample Input 3', input_data=b'5\n1 2\n2 3\n3 4\n4 5\n', output_name='Sample Output 3', output_data=b'4.0\n2.0\n2.0\n2.0\n4.0\n'),
         TestCase(name='sample-4', input_name='Sample Input 4', input_data=b'7\n1 2\n1 3\n2 4\n2 5\n3 6\n3 7\n', output_name='Sample Output 4', output_data=b'2.000000000000\n1.666666666667\n1.666666666667\n3.000000000000\n3.000000000000\n3.000000000000\n3.000000000000\n'),
         TestCase(name='sample-5', input_name='Sample Input 5', input_data=b'12\n1 2\n2 3\n2 4\n4 5\n5 6\n5 7\n6 8\n8 9\n2 10\n10 11\n11 12\n', output_name='Sample Output 5', output_data=b'3.666666666667\n2.250000000000\n3.666666666667\n2.833333333333\n2.555555555556\n2.666666666667\n4.333333333333\n2.666666666667\n5.333333333333\n2.500000000000\n2.500000000000\n5.000000000000\n'),
         TestCase(name='sample-6', input_name='Sample Input 6', input_data=b'2\n1 2\n', output_name='Sample Output 6', output_data=b'1.0\n1.0\n'),
     ])
Beispiel #21
0
    def test_from_html_old(self):
        url = 'https://atcoder.jp/contests/abc003/tasks/abc003_4'
        resp = requests.get(url)
        html = resp.content.decode(resp.apparent_encoding)
        data = AtCoderProblemDetailedData.from_html(
            html, problem=AtCoderProblem.from_url(url))

        self.assertEqual(data.alphabet, 'D')
        self.assertEqual(data.available_languages, None)
        self.assertEqual(data.html, html)
        self.assertEqual(
            data.input_format,
            '\r\n<var>R</var> <var>C</var>\r\n<var>X</var> <var>Y</var>\r\n<var>D</var> <var>L</var>\r\n'
        )
        self.assertEqual(data.memory_limit_byte, 64 * 1000 * 1000)
        self.assertEqual(data.name, 'AtCoder社の冬')
        self.assertEqual(data.problem, AtCoderProblem.from_url(url))
        self.assertEqual(data.sample_cases, [
            TestCase(name='sample-1',
                     input_name='入力例 1',
                     input_data=b'3 2\n2 2\n2 2\n',
                     output_name='出力例 1',
                     output_data=b'12\n'),
            TestCase(name='sample-2',
                     input_name='入力例 2',
                     input_data=b'4 5\n3 1\n3 0\n',
                     output_name='出力例 2',
                     output_data=b'10\n'),
            TestCase(name='sample-3',
                     input_name='入力例 3',
                     input_data=b'23 18\n15 13\n100 95\n',
                     output_name='出力例 3',
                     output_data=b'364527243\n'),
            TestCase(name='sample-4',
                     input_name='入力例 4',
                     input_data=b'30 30\n24 22\n145 132\n',
                     output_name='出力例 4',
                     output_data=b'976668549\n'),
        ])
        self.assertEqual(data.score, None)
        self.assertEqual(data.time_limit_msec, 2 * 1000)
Beispiel #22
0
    def test_from_html_with_empty_output(self):
        url = 'https://atcoder.jp/contests/agc036/tasks/agc036_b'
        resp = requests.get(url)
        html = resp.content.decode(resp.apparent_encoding)
        data = AtCoderProblemDetailedData.from_html(
            html, problem=AtCoderProblem.from_url(url))

        self.assertEqual(data.alphabet, 'B')
        self.assertEqual(data.available_languages, None)
        self.assertEqual(data.html, html)
        self.assertEqual(
            data.input_format,
            '<var>N</var> <var>K</var>\r\n<var>A_0</var> <var>A_1</var> <var>\\cdots</var> <var>A_{N-1}</var>\r\n'
        )
        self.assertEqual(data.memory_limit_byte, 1024 * 1000 * 1000)
        self.assertEqual(data.name, 'Do Not Duplicate')
        self.assertEqual(data.problem, AtCoderProblem.from_url(url))
        self.assertEqual(data.sample_cases, [
            TestCase(name='sample-1',
                     input_name='入力例 1',
                     input_data=b'3 2\n1 2 3\n',
                     output_name='出力例 1',
                     output_data=b'2 3\n'),
            TestCase(name='sample-2',
                     input_name='入力例 2',
                     input_data=b'5 10\n1 2 3 2 3\n',
                     output_name='出力例 2',
                     output_data=b'3\n'),
            TestCase(name='sample-3',
                     input_name='入力例 3',
                     input_data=b'6 1000000000000\n1 1 2 2 3 3\n',
                     output_name='出力例 3',
                     output_data=b'\n'),
            TestCase(name='sample-4',
                     input_name='入力例 4',
                     input_data=b'11 97\n3 1 4 1 5 9 2 6 5 3 5\n',
                     output_name='出力例 4',
                     output_data=b'9 2 6\n'),
        ])
        self.assertEqual(data.score, 700)
        self.assertEqual(data.time_limit_msec, 2 * 1000)
Beispiel #23
0
 def list_problems(
     self,
     *,
     session: Optional[requests.Session] = None
 ) -> Sequence[AtCoderProblem]:
     data = self._download_data(session=session)
     problems = []
     for problem in data['problems']:
         problem_ = AtCoderProblem.from_url(problem['url'])
         assert problem_  # for mypy
         problems.append(problem_)
     return problems
    def test_normal(self):
        """
        .. code-block:: html

            <div class="io-style">
                <div class="part">
                    <section>
                        <h3>入力</h3>
                        <p>入力は以下の形式で標準入力から与えられる。</p>
                        <pre>
                            <var>N</var>
                        </pre>
                    </section>
                </div>
                <div class="part">
                    ...
                </div>
                ...
            </div>
        """

        self.assertEqual(AtCoderProblem.from_url('https://beta.atcoder.jp/contests/agc001/tasks/agc001_d').get_input_format(), '<var>N</var> <var>M</var>\r\n<var>A_1</var> <var>A_2</var> <var>...</var> <var>A_M</var>\r\n')
        self.assertEqual(AtCoderProblem.from_url('https://beta.atcoder.jp/contests/agc002/tasks/agc002_d').get_input_format(), '\r\n<var>N</var> <var>M</var>\r\n<var>a_1</var> <var>b_1</var>\r\n<var>a_2</var> <var>b_2</var>\r\n<var>:</var>\r\n<var>a_M</var> <var>b_M</var>\r\n<var>Q</var>\r\n<var>x_1</var> <var>y_1</var> <var>z_1</var>\r\n<var>x_2</var> <var>y_2</var> <var>z_2</var>\r\n<var>:</var>\r\n<var>x_Q</var> <var>y_Q</var> <var>z_Q</var>\r\n')
        self.assertEqual(AtCoderProblem.from_url('https://beta.atcoder.jp/contests/agc003/tasks/agc003_d').get_input_format(), '<var>N</var>\r\n<var>s_1</var>\r\n:\r\n<var>s_N</var>\r\n')
        self.assertEqual(AtCoderProblem.from_url('https://beta.atcoder.jp/contests/agc004/tasks/agc004_d').get_input_format(), '<var>N</var> <var>K</var>\r\n<var>a_1</var> <var>a_2</var> <var>...</var> <var>a_N</var>\r\n')
        self.assertEqual(AtCoderProblem.from_url('https://beta.atcoder.jp/contests/agc005/tasks/agc005_d').get_input_format(), '<var>N</var> <var>K</var>\r\n')

        self.assertEqual(AtCoderProblem.from_url('https://beta.atcoder.jp/contests/arc083/tasks/arc083_a').get_input_format(), '<var>A</var> <var>B</var> <var>C</var> <var>D</var> <var>E</var> <var>F</var>\r\n')
Beispiel #25
0
 def test_download_sample_cases_ttpc2015_inserted_p_tag(self):
     # see: https://github.com/kmyk/online-judge-tools/pull/724
     # see: https://github.com/kmyk/online-judge-tools/issues/726
     self.assertEqual(
         AtCoderProblem.from_url(
             'https://atcoder.jp/contests/ttpc2015/tasks/ttpc2015_i').
         download_sample_cases(), [
             TestCase(name='sample-1',
                      input_name='入力例1',
                      input_data=b'5\n4 2 3 1 5\n',
                      output_name='出力例1',
                      output_data=b'3\n2 4\n1 2\n2 4\n'),
         ])
Beispiel #26
0
 def test_download_sample_cases_pre_without_prettyprint_insection(self):
     # see: https://github.com/kmyk/online-judge-tools/issues/625
     self.assertEqual(
         AtCoderProblem.from_url(
             'https://atcoder.jp/contests/tdpc/tasks/tdpc_fibonacci').
         download_sample_cases(), [
             TestCase(name='sample-1',
                      input_name='Sample Input 1',
                      input_data=b'2 10\n',
                      output_name='Sample Output 1',
                      output_data=b'55\n'),
             TestCase(name='sample-2',
                      input_name='Sample Input 2',
                      input_data=b'3 10\n',
                      output_name='Sample Output 2',
                      output_data=b'105\n'),
         ])
Beispiel #27
0
    def _download_data(
            self,
            *,
            session: Optional[requests.Session] = None) -> Dict[str, Any]:
        session = session or utils.get_default_session()

        # prepare merged-problems.json
        url = 'https://kenkoooo.com/atcoder/resources/merged-problems.json'
        resp = utils.request('GET', url, session=session)
        problems = json.loads(resp.content)
        problem_dict = {problem['id']: problem for problem in problems}

        # call the internal API
        url = 'https://kenkoooo.com/atcoder/internal-api/contest/get/{}'.format(
            self.contest_id)
        resp = utils.request('GET', url, session=session)
        data = json.loads(resp.content)

        # make result
        result = {
            'url': self.get_url(),
            'name': data['info']['title'],
            'problems': [],
            'raw': resp.content.decode(),
        }
        for problem in data['problems']:
            result['problems'].append({
                'url':
                AtCoderProblem(problem_id=problem['id'],
                               contest_id=problem_dict[problem['id']]
                               ['contest_id']).get_url(),
                'name':
                problem_dict[problem['id']]['title'],
                'context': {
                    'contest': {
                        'url': self.get_url(),
                        'name': data['info']['title'],
                    },
                    'alphabet': str(problem['order']),
                },
            })
        return result
 def test_get_memory_limit_is_zero(self):
     self.assertEqual(AtCoderProblem.from_url('https://atcoder.jp/contests/future-contest-2019-qual/tasks/future_contest_2019_qual_b').get_memory_limit_byte(), 0)
Beispiel #29
0
 def test_problem_without_input_format(self):
     self.assertIsNone(
         AtCoderProblem.from_url(
             'https://atcoder.jp/contests/joi2006ho/tasks/joi2006ho_a').
         get_input_format())
Beispiel #30
0
 def test_problem_without_input(self):
     self.assertIsNone(
         AtCoderProblem.from_url(
             'https://atcoder.jp/contests/tenka1-2013-quala/tasks/tenka1_2013_qualA_a'
         ).get_input_format())