AtCoderProblems
AtCoderProblems copied to clipboard
Mistaken views of judging submissions in Virtual Contest
Virtual Contestの順位表で,ジャッジ中の提出が「WA」扱いで表示されます.
Judging -> AC
0 (1) -> 100
という感じ
こちら自分の手元で再現しようとしてみたのですがうまく行きませんでした(結果を取得するタイミングっぽい時間に提出してみたりしましたが、むずかしい...)
初回提出を仮定すると問題ごとの獲得スコアを表示するかどうかは↓で判定されていて、元を辿ったところ 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
特に成果はありませんが( 😢 )、何かの参考になればという気持ちでコメントします
ありがとうございます!
現状については、以下のとおりだと思います。
- バックエンドAPIが返してくるステータスは, "AC", "WA", "CE", ... などの他に、"WJ", "1/15", "2/32 TLE" などがある。
- フロントエンドでは "AC" 以外をペナルティとして扱っている。このため、ジャッジ待ちやジャッジ中の提出に対してペナルティが発生する。
- ステータスが更新されて AC になると発生していたペナルティが消えるので、少し驚きがある。
対策としては、フロントエンド側でジャッジ中の提出をフィルタリングすると良いと思います。
なるほどです まだまだプロジェクトについて理解不足なので、そのあたりをもう少し読んでみます!
一応 CE はカウントしないようにしているみたいです(AtCoder公式でもCEはペナルティにならないため)。ここでジャッジ待ち・ジャッジ中の提出も弾けるようにすると良さそうです。
https://github.com/kenkoooo/AtCoderProblems/blob/0282bbde17f6b5628f3bb366fef2ac8cb2fca5f0/atcoder-problems-frontend/src/pages/Internal/VirtualContest/ShowContest/util.ts#L30
上で発言したように 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
例えば 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