AtCoderにはatcoder-cliという、cli上で課題提出できる便利なツールがありますが、提出時に以下のエラーが発生しました。
※一部パスをで省略してます。
acc s
submit to: https://atcoder.jp/contests/abcXXX/tasks/abcXXX_X
[ERROR]
Traceback (most recent call last):
File "<omission>/onlinejudge_command/main.py", line 101, in main
sys.exit(run_program(parsed, parser=parser))
File "<omission>/onlinejudge_command/main.py", line 67, in run_program
if not subcommand_submit.run(args):
File "<omission>/onlinejudge_command/subcommand/submit.py", line 100, in run
language_dict: Dict[LanguageId, str] = {language.id: language.name for language in problem.get_available_languages(session=sess)}
File "<omission>/onlinejudge/service/atcoder.py", line 1008, in get_available_languages
data = self.download_data(session=session)
File "<omission>/onlinejudge/service/atcoder.py", line 811, in download_data
return AtCoderProblemDetailedData.from_html(html, problem=self, session=session, response=resp, timestamp=timestamp)
File "<omission>/onlinejudge/service/atcoder.py", line 770, in from_html
data = AtCoderProblemData._from_html(html, problem=problem, session=session, response=response, timestamp=timestamp)
File "<omission>/onlinejudge/service/atcoder.py", line 582, in _from_html
assert parsed_memory_limit
AssertionError
online-judge-toolsで何か問題が起こっている模様?
下記コードでインストールし直しましたが変化なし。
pip3 install -U online-judge-tools
調べたところ以下の記事を発見。
ABC408 より、メモリ制限の単位が「KB」「MB」から「KiB」「MiB」に変更されたとのこと。online-judge-toolsのGithubリポジトリでは、親切な方からプルリクエストは送られているようですが、まだマージされていないようです。今のところはまだ手作業で修正するしかなさそう。
# When login as the admin, a link is added after memory limit. See https://github.com/online-judge-tools/api-client/issues/90
-parsed_memory_limit = re.search(r'^(メモリ制限|Memory Limit): ([0-9.]+) (KB|MB)', memory_limit)
+parsed_memory_limit = re.search(r'^(メモリ制限|Memory Limit): ([0-9.]+) (KiB|MiB)', memory_limit)
assert parsed_memory_limit
memory_limit_value = parsed_memory_limit.group(2)
memory_limit_unit = parsed_memory_limit.group(3)
-if memory_limit_unit == 'KB':
- memory_limit_byte = int(float(memory_limit_value) * 1000)
+if memory_limit_unit == 'KiB':
+ memory_limit_byte = int(float(memory_limit_value) * 1024)
-elif memory_limit_unit == 'MB':
- memory_limit_byte = int(float(memory_limit_value) * 1000 * 1000)
+ elif memory_limit_unit == 'MiB':
+ memory_limit_byte = int(float(memory_limit_value) * 1024 * 1024)
else:
assert False
記事ではサイズが1000、プルリクエストではサイズが1024となっていました。
どっちでもエラーは解消されるようですが、自分は1024にしておきました。
早期に修正されることを願います。