Open Competitive Coding is a new model of Online Judge where all the activities of competitive coding like contest creation, problem submission, test-case creation and submission happens in an open-source manner yet maintaining the state of the art security principles.
Choose any question from the problem-set. In the solution/ folder create a file by the name of the problem. For e.g. if the problem name is 117-A
, then create 117-A.c
if you are solving in C or 117-A.go
if you are solving in golang. See supported programming languages to see what all languages are supported.
Say you are have solved the question example-A
by writing example.c, then execute the following command :
make submit solution-file=solution/example-A.c
Use make clean
to clean up all the mess created.
Commit all the files and raise a pull request against the master
branch.
That's it! Once you see a ✅ against your pull request, that means that your solution is accepted.
auto-judger is all about open-source, free integrations, minimalism along with state of the art security principles.
The code that you submit is compiled (if required) and executed according to the language specified using specialized scripts that understand how to compile and run the code. The way that auto-judger compiles, executes and evaluates your solution is also open-source and can be seen in supported programming languages.
Your code is built and executed using CircleCI which is a free service for all open source repositories.
Security is a very critical part of auto-judger. How do we secure your code :
- We generate a random key
K1
and use it to encrypt your solution. - We then use the public-key of auto-judger to encrypt this key to
K2
- Since we use asymmetric cryptography, only auto-judger (who has the corresponding) private key will be able to decrypt this key.
- After decrypting the key
K2
we getK1
which was originally used for encrypting the solution.
The only piece of the puzzle which is unknown to the world is the private key of the judge. All the other information is open-source and accessible to all. Still the system is as secure as any other online judge without compromising on any of the features.
Where the code for all this magic :
- scripts/submit-solution.sh is used to submit your solution.
- scripts/accept-solution.sh is used to decrypt you solution.
This project is at its very early stages and requires a lot of contribution from the open-source community. So feel free to send a Pull Request to enable any of the features.
- Secure way of transmitting code.
- Support for major programming languages like C, C++, Java and Python.
- Integration with problem set.
- Mapping features like timeout and test-case generators to the module.
- Create a react-page to show leaderboard globally and for the contest etc.
- Provide feature to create a context. How do we end judging for a contest ? What does the data-schema look like ?