
手っ取り早く対処法を知りたい人は、以下の目次から「対処法(応急処置)」のリンクをクリックすること。
はじめに
AtCoderのコンテストに参加する際、私は以前に紹介したVScode上のローカルコーディング環境を使用している。テストケースの取得から提出までがエディタ上で完結するという大変便利なもので、とても気に入っている。
さて、先日開催された AtCoder Beginner Contest 408においても、いつものように atocder-cli を通じてacc submit
コマンドを叩き、コードを提出しようとした。
しかし、ここで見慣れないエラーが発生。
本番中は、とりあえずコードをコピペして問題ページにペーストして提出することで事なきを得たが、普通に面倒なので修正したい。
エラーの原因
atcoder-cli のacc submit
コマンドは、内部で online-judge-tools のoj submit
コマンドを呼び出しており、今回はこのoj submit
コマンドの動作が問題となっている。だからエラー文にもonline-judge-toolsのファイル群が表示されている。
エラー文のTracebackの最後を見ると、このように書かれている。
File "/home/yuulis/.pyenv/versions/3.10.14/lib/python3.10/site-packages/onlinejudge/service/atcoder.py", line 582, in _from_html assert parsed_memory_limit
どうやらonlinejudge/service/atcoder.py
ファイルの582行目付近が悪さをしているようだ。
ということで該当の箇所を見てみる。

この部分の処理は、コンテストの問題ページ上部の「メモリ制限: ~」という部分を取得するものである。このコードでは、正規表現で KB あるいは MB 単位が指定されている。
しかし、実はABC408が開催された時点より、全ての問題のメモリ制限の単位が KB / MB から KiB / MiB に変更されているのだ。まじで気づかなかった...
ABC407-Bの問題ページ(2025/05/24 時点) : web.archive.org
ABC407-Bの問題ページ(現在) : atcoder.jp
ちなみに、KB が バイトと
バイトのどちらの意味にもなり得るのに対して、 KiB は正確に
バイトを指すらしい。
ということで、onlinejudge/service/atcoder.py
ファイル上でKB
やMB
となっている部分を修正していけば良さそうである。
対処法(応急処置)
では、このエラーの対処法を以下に示す。ただし、この修正はあくまで応急処置的なものであることに留意してほしい。
エラーが起きている該当のファイルを開く
VSCodeでは、ターミナル上でファイルパスにマウスをホバーすれば、「Ctrl + クリック」でそのファイルを開くことができる。
もしくは、以下のファイルを直接開く(冒頭に示した私の環境構築記事に従っている場合)。
"~/.pyenv/versions/3.10.14/lib/python3.10/site-packages/onlinejudge/service/atcoder.py"
2. メモリ単位表記の修正
- 581行目 :
# 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.]+) (KiB|MiB)', memory_limit) - parsed_memory_limit = re.search(r'^(メモリ制限|Memory Limit): ([0-9.]+) (KB|MB)', memory_limit) assert parsed_memory_limit
- 586, 588行目 :
memory_limit_value = parsed_memory_limit.group(2) memory_limit_unit = parsed_memory_limit.group(3) + if memory_limit_unit == 'KiB': - if memory_limit_unit == 'KB': memory_limit_byte = int(float(memory_limit_value) * 1000) + elif memory_limit_unit == 'MiB': - elif memory_limit_unit == 'MB': memory_limit_byte = int(float(memory_limit_value) * 1000 * 1000) else: assert False
とりあえずこの部分だけ修正すれば、acc submit
コマンドは通るはずである。
おわりに
今回紹介したエラーは、 online-judge-tools の Github の Issues 及び Pull requests に既に持ち上がっているようだ。
早期の正式な修正を期待している。
ということで、今回はここまで。
参考記事
atcoder-cliについて : tatamo.81.la
参考ツイート :
昨日のABC408、online-judge-tools の oj submit コマンドが使えなくて困っていたけど、問題ページのメモリ制限の単位がMBからMiBに変わったのが原因だった。
— bo (@_bo9chan) 2025年6月1日
onlinejudge/service/atcoder.py を修正したら直った(添付画像ほか数か所)。 pic.twitter.com/oLhGjAaxUj