unreal.eugene's blog

By unreal.eugene, 3 years ago, In English

Hello, Codeforces.

I and DK318 joined the Codeforces team in June. These three months we mainly dealt with the development of the Polygon platform. In this post, we would like to present to you a list of what we have done during this time. Most of the changes were made to attain easier problem creation. This list does not include minor bug fixes or any improvements that are invisible to users.

Tables support when rendering statements in HTML

Now it's possible to insert the most basic tables in your HTML statements. For example, you can show the scoring system of your problem or insert several images side by side. Only column text alignment and border specification are supported now.

A brief manual for writing statements

We bet a lot of users who wrote statements were confused by the fact that a lot of TeX commands are not working when rendering in HTML. Now you can access the manual on the statements page to learn about supported commands with examples as well as other tips for writing better statements.

You can check out the manual here.

Reworked how one can add problems into a contest

We completely reworked the way you add problems on the contest page. You can select the problems from the list of accessible problems: they will be added to a separate list. You can also filter your problems so you can find the needed one much quicker. We performed some optimizations as well so even if you have thousands of accessible problems, this page will lag much less.

Resolving conflicts

When the conflict occurs, the link 'Resolve Conflicts' will appear on the sidebar accessing the page, where you can merge different versions. If it is impossible to load into the problem, the same button will appear in the problems list. We made sure that if any conflict occurs, you still will be able to access this page.

You can learn more about it in the corresponding post.

Extra table on the invocations page

If you have points and groups enabled in your problem, you will notice a new table at the end of the invocation report containing a summary of every solution in every test group. It can be helpful since it contains all necessary information about the invocation in a compact way.

Multiple edit option for validator tests

Sometimes the restrictions of the problem change and you need to maintain the validator as well as the tests for it. But it was hard if there were a lot of tests. Now you can select the tests you want to edit and fix them all on one page.

Multiple edit option of solution tags

When the problem contained lots of tests and solutions, it was highly inconvenient to set up all of the solution tags. Now you can select multiple tags and even select a rectangle of tags with a pressed Shift button.

If you want to change multiple tags, click on the tags you need to change and then click the 'Change' option above the table.

Reverting a problem to the certain revision

If you committed some changes and then realized you want the old changes back, you can use the revert option. This option allows you to bring the old version back but doesn't commit it just yet. The revision number also doesn't change so the reverted changes will become the latest revision after commit. You can find the 'revert' option on the changelog page near the 'switch' option. In the future, we may add the feature to revert the specific files, not the whole working copy.

After reverting to the r27 diff will become as follows:

After the commit, the 30th revision will be the same as the 27th revision.

Other updates

  • Removed 'Encoding' (is UTF-8 by default now) and 'Render formulas using MathJax' (is on by default now) options from statements page for all problems created after June 1, 2021.
  • Removed the 'Run Script' button on the tests page and improved 'Preview Script'.
  • Added new solution type 'Do not run' for outdated solutions. It can't be selected in invocations and won't be compiled and tested on package creation.
  • Added 'Only my activity' checkbox on the 'View Contests' page. When enabled shows only contests you had activity in including issues and sorts it by the time of your activity.
  • Added 'Save and Run' option when creating new stress.
  • Added an alert when trying to concurrently save the script from different browser tabs.
  • Added extra information about files in diff on several situations (e.g. on file renaming or structure conflict occurring).
  • Added multiple item selection via pressing the Shift button on solutions, files, validator, checker, and invocation pages.
  • Added option to treat points returned by checker as a percent. Actual test points will be calculated as follows: testPoints * min(checkerPercent, minPercentFromDependecies). This is the generalization of EACH_TEST policy where each answer can be partially correct.
  • Added the multiple file download feature on the files page (downloads ZIP archive).
  • Added a warning for generators producing more than one test at once (deprecated now).
  • Added warnings for tests without groups and non-consecutive tests with the same group.
  • Improved problem indexing inside contest and added custom index selection when creating problem inside a contest.
  • Improved problem tags: now you can repeatedly add them one after another by pressing Enter.
  • Many minor visual improvements.
  • Optimized the sidebar and removed the redundant information.
  • Fixed the blank statement in 'Edit with Preview' mode when trying to enter it from the preview in HTML page.
  • Fixed incorrect groups and points values on dragging or removing tests.
  • Fixed register page and remind password page access when already logged in.
  • Fixed the absence of a confirmation box when following the link in 'Edit with Preview' mode.
  • Fixed the order of contests on the contest page.

Thank you for your attention! We hope that the described improvements will be useful to you.

  • Vote: I like it
  • +1013
  • Vote: I do not like it

| Write comment?
3 years ago, # |
  Vote: I like it +72 Vote: I do not like it

Love to see it, especially amidst the current debate. Any plans to work on subtask validators?

  • »
    3 years ago, # ^ |
      Vote: I like it +46 Vote: I do not like it

    You can already validate subtask, using validator.group() in your testlib validator.

3 years ago, # |
  Vote: I like it +2 Vote: I do not like it


3 years ago, # |
  Vote: I like it +3 Vote: I do not like it

Amazing! Thanks to all developers!

3 years ago, # |
  Vote: I like it 0 Vote: I do not like it

Excellent work! I'm really loving what you guys are doing.

Do you guys have any plans of exposing files to contestants' programs so that they can read data from somewhere other than standard input? See my blog here: https://codeforces.com/blog/entry/90235

It's admittedly probably incredibly low on your priority list, but I couldn't help myself from using this opportunity to bring it up.

  • »
    3 years ago, # ^ |
      Vote: I like it +13 Vote: I do not like it

    If you really need to, you can simply append that data to stdin, what is the difference?

    • »
      3 years ago, # ^ |
        Vote: I like it +26 Vote: I do not like it

      For example, if file is big (e.g dictionary of all english words for some text-game-like problem), it would make full package much larger. Also, it could be annoying for contestants, as you

      1. Need to skip it if you don't need it
      2. If you writing mutiltest, tests are not same
      3. You can't get exact sample format in statement

      All this problems are not critical, and adding such data to each test is possible workaround, which is ok at most cases. But it's a still a hack. Also it doesn't look hard, because runner already can put text files for checker, so all required primitives are already implemented (but maybe not ready to run in less trusted environment).

3 years ago, # |
  Vote: I like it +8 Vote: I do not like it

Hope codeforces does better and better