How to get the number of pretests in a codeforces problem?

Revision en7, by z4120, 2019-10-26 18:21:49

Is there any way to get the number of pretests of a problem? (unfortunately, according to the API help page there's no such option, and there's also no way to get it through the GUI (because if there's one, I would be able to figure out how to do it with code)

I tried using a code (the complete code is at the end of the post) that fetch every submissions, check if there's any skipped/hacked solution then the number of pretest is the number of passed test of that submission, otherwise estimate the number by getting number of passed tests of solutions that fail on pretests/main tests of contestants.

However there is a problem:

  • It's not possible if there's not enough submission for that problem. (For instance, running the code says that there are at least 1 and at most 138 pretests for problem 566E)
  • If the user is taking part in a virtual contest, it's not possible to view the submission test cases. In that case it's necessary to log out the user.

And some problems that have workaround:

  • It's slow. (This can be avoided by fetching only solutions in contest, given that there are currently 19528 submissions but only 3585 in-contest ones for #566; and store fetched result with GM_getValue/GM_setValue or GM.getValue/GM.setValue — so it's necessary to download the data only once for each contest)
  • The code will not work when there are cheaters (for example this submission is listed as "skipped" but there's a "wrong answer" test, however it's not because the user submit another one but it's likely because the user cheated, according to https://codeforces.net/blog/entry/58038) This can be work around by fetching the submission page to see if there's any failed test (there's no indication in the API result.

Background: I'm trying to fix the userscript that displays only pretest verdict in virtual participation. A huge bug is that it assumes that double clicking an entry in the standing table will show [pretests] or [main tests] depends on whether the test is a pretest or a main test. However it isn't the case, as can be seen in https://codeforces.net/contest/566/standings (turn on "show unofficial", then double click the entry for problem C of user hogloid, you can see "Wrong answer on test 1 [main tests]", which is obviously wrong.


Fixed userscript:

code

For testing, you can append ?always_show=1 to the URL. Appending ?mock_pretest_count=1 will pretend that all problems have between 10 and 20 pretests instead of fetching all submissions (slow)

Tags pretest, virtual participation, api

History

 
 
 
 
Revisions
 
 
  Rev. Lang. By When Δ Comment
en12 English z4120 2019-12-01 13:32:15 14753
en11 English z4120 2019-11-10 10:50:22 1527
en10 English z4120 2019-10-31 10:01:17 41
en9 English z4120 2019-10-31 09:51:58 4454 Fix small bug, rewrite post
en8 English z4120 2019-10-26 18:28:19 130
en7 English z4120 2019-10-26 18:21:49 3536 Fix userscript
en6 English z4120 2019-10-15 17:00:39 16469
en5 English z4120 2019-10-07 19:48:43 244
en4 English z4120 2019-10-07 19:35:09 225 New workaround for a problem
en3 English z4120 2019-10-05 16:45:13 583
en2 English z4120 2019-10-05 12:48:27 18 Add code formatting
en1 English z4120 2019-10-05 08:03:32 2964 Initial revision (published)