Блог пользователя dyzets

Автор dyzets, 4 месяца назад, По-английски

Everyone who prepares problems on this site knows Polygon, a problem-preparation tool maintained by MikeMirzayanov. It's powerful — automatic invocation, validation, checking, stress testing, packages.

However, the web experience is not really convenient. I have to click through the tabs to copy the generator, checker, validator from my computer whenever I change the files.

I wanted my problem to live in a local folder I control, and edit it like I edit code. So I built a small desktop app for it: Decagon. It talks to Polygon through the official Polygon API.

Each problem is one local folder bound to one Polygon problem. Inside the app you get a tabbed editor:

  • Info — time/memory limits, input/output files, interactive flag, checker / validator / interactor, points mode.
  • Statements — edit every field (legend, input, output, scoring, notes) per language, plus shared resources (images, .sty).
  • Files — every file in one place: solutions (each tagged main / correct / wrong-answer / TLE / …), generators / validator / checkers, resource headers, and attachments.
  • Tests — manual and script-generated tests per testset, the generation script, scoring groups (points & feedback policy, dependencies), and per-test points. You can bulk-edit groups/points across many tests at once.
  • Validator tests & Checker tests — assert a validator accepts/rejects an input, or that a checker gives the expected verdict.
  • Packages — build a full / verify package and download the ZIP.
  • Commit — save a revision of your working copy.

So no more synchronizing solutions and generators by hand — Pull, edit locally with whatever editor you like, Push. The folder is plain files, so it's git-friendly too.

It's open-source (MIT) and on Github with install instructions. It supports Windows, macOS and Linux. However, I have not tested it on Linux yet so there may be some bugs.

Known limitations (Polygon's API doesn't expose everything)

  • Testsets can't be created from the app (no API for it) — create them on the Polygon site, then Pull.
  • Stress testing and access/collaborator management have no API, so they're read-only / not implemented here.
  • Manage-access only shows your access level.
  • Deletion: only tests have a delete API. Removing files / solutions / statements / resources locally does not delete them on Polygon — do that on the website.
  • Binary files (e.g. statement images) are pulled but not pushed back.
  • Pushing the final package into a round still happens on the Codeforces website — that has no API.

It's still early and probably has bugs. Feature requests, bug reports and PRs are very welcome — open an issue on GitHub. And a big thanks to MikeMirzayanov for Polygon and Codeforces.

Some screenshots:

Полный текст и комментарии »

  • Проголосовать: нравится
  • +70
  • Проголосовать: не нравится