Hello Codeforces!
Some time during the past weeks I have been working on developing a tool for preparing contests (for Romanian NOI and programming camps), inspired by Polygon. It allows people to quickly and safely prepare problems for contests using a simple command line interface utility.
It has support for generators, validators, close-to-TL warnings, and even stress-testing to maximize a given objective value (e.g., generate tests where the answer is as big as possible) or to fail a given solution. It also has some neat checks, like checking for duplicate tests, or checking if generator is deterministic for reproductibility. More features will be added in the future.
I have already successfully prepared a couple of problems with it, and it worked flawlessly (for me, at least).
Github: https://github.com/bicsi/cprep
Installation
In order to install it, you just (hopefully) need to make sure you have python installed, and then run:
pip3 install cprep
I have tested it on Linux/Mac OS and it should work. I am curious about Windows, so let me know how it works there.
Usage
Note: The GIF is stale and shows an old command. In the meantime I replaced "testutil" with "cprep" and "make" with "runall", mainly because testutil was already taken on PyPI
The package installed contains two utilities:
- A library for doing all sorts of operations (compilation/evaluation/stress test generation)
- A command-line tool to use it from the command line with a pretty colorful interface
The command-line tool can be used via cprep [command] [args...]
.
The main idea is that I wanted to write the code such that other interfaces (e.g. web) can be added easily.
For more information about usage and features, I recommend you follow the GitHub page from time to time. I know the information is a bit sparse, but I will do my best to update it in the course of the following days.
Epilogue
If the tool doesn't work for you, that's expected (I have only tested it on my machine until now). Just let me know in the comments what seems to be the problem and I will try to fix it.
If you fancy extra features, let me know privately or in the comments below :).