AtCoderProblems icon indicating copy to clipboard operation
AtCoderProblems copied to clipboard

Mistaken views of judging submissions in Virtual Contest

Open MatsuTaku opened this issue 4 years ago • 7 comments

Virtual Contestの順位表で,ジャッジ中の提出が「WA」扱いで表示されます.

Judging -> AC 0 (1) -> 100 という感じ

MatsuTaku avatar Jan 24 '21 12:01 MatsuTaku

こちら自分の手元で再現しようとしてみたのですがうまく行きませんでした(結果を取得するタイミングっぽい時間に提出してみたりしましたが、むずかしい...)

初回提出を仮定すると問題ごとの獲得スコアを表示するかどうかは↓で判定されていて、元を辿ったところ https://github.com/kenkoooo/AtCoderProblems/blob/3383873a2fb849d0107c225e943e63dc37d7ce7d/atcoder-problems-frontend/src/pages/Internal/VirtualContest/ShowContest/ContestTableRow.tsx#L82-L89 ↓の各ユーザについて問題ごとに得点とペナ数を求める関数が原因かなーと思っていたのですが、そもそも WJ な提出が渡ってこないとそういうバグは起きないはずで、 https://github.com/kenkoooo/AtCoderProblems/blob/492b31c8c58bc98bd8b311e6754397c66a703f19/atcoder-problems-frontend/src/pages/Internal/VirtualContest/ShowContest/ResultCalcUtil.ts#L12-L71

↓でコンテストに対応する提出の一覧を取得する際に isValidResult によって WJ は弾かれていてほしいはずというところまで確認して力尽きました https://github.com/kenkoooo/AtCoderProblems/blob/3383873a2fb849d0107c225e943e63dc37d7ce7d/atcoder-problems-frontend/src/api/APIClient.ts#L248-L270

特に成果はありませんが( 😢 )、何かの参考になればという気持ちでコメントします

kanra824 avatar May 01 '21 02:05 kanra824

ありがとうございます!

kenkoooo avatar May 01 '21 03:05 kenkoooo

現状については、以下のとおりだと思います。

  • バックエンドAPIが返してくるステータスは, "AC", "WA", "CE", ... などの他に、"WJ", "1/15", "2/32 TLE" などがある。
  • フロントエンドでは "AC" 以外をペナルティとして扱っている。このため、ジャッジ待ちやジャッジ中の提出に対してペナルティが発生する。
  • ステータスが更新されて AC になると発生していたペナルティが消えるので、少し驚きがある。

対策としては、フロントエンド側でジャッジ中の提出をフィルタリングすると良いと思います。

kenkoooo avatar May 01 '21 03:05 kenkoooo

なるほどです まだまだプロジェクトについて理解不足なので、そのあたりをもう少し読んでみます!

kanra824 avatar May 01 '21 05:05 kanra824

一応 CE はカウントしないようにしているみたいです(AtCoder公式でもCEはペナルティにならないため)。ここでジャッジ待ち・ジャッジ中の提出も弾けるようにすると良さそうです。

https://github.com/kenkoooo/AtCoderProblems/blob/0282bbde17f6b5628f3bb366fef2ac8cb2fca5f0/atcoder-problems-frontend/src/pages/Internal/VirtualContest/ShowContest/util.ts#L30

kenkoooo avatar May 01 '21 06:05 kenkoooo

上で発言したように useVirtualContestSubmissions で提出一覧を取得するタイミングでWJなどの提出は弾かれていそうで、kenkooooさんに貼っていただいたコードもこの関数の返り値に対するフィルタリングになるので、うーん...と思っていましたが、時期を考えると、SWRを導入して useVirtualContestSubmissions を生やした #892 で解決しているかもしれません(それ以前のことを知らないため、断定はできませんが...)

https://github.com/kenkoooo/AtCoderProblems/blob/3383873a2fb849d0107c225e943e63dc37d7ce7d/atcoder-problems-frontend/src/api/APIClient.ts#L263 https://github.com/kenkoooo/AtCoderProblems/blob/3383873a2fb849d0107c225e943e63dc37d7ce7d/atcoder-problems-frontend/src/utils/index.ts#L29-L32

kanra824 avatar May 05 '21 08:05 kanra824

例えば useUserSubmission でも同様のフィルタリングが行われているのに対して、過去に使われていたっぽい fetchSubmissions ではフィルタリングされていません。このような違いが useVirtualContestSubmissions にも存在して、WJがすり抜けていた可能性が考えられます。 https://github.com/kenkoooo/AtCoderProblems/blob/3383873a2fb849d0107c225e943e63dc37d7ce7d/atcoder-problems-frontend/src/api/APIClient.ts#L146-L155 https://github.com/kenkoooo/AtCoderProblems/blob/4679bf74b7e46dcfb15f44e94ec3ef31a2dc434c/atcoder-problems-frontend/src/utils/CachedApiClient.ts#L316-L322

kanra824 avatar May 05 '21 09:05 kanra824