Welcome to the Online Judge Platform, an advanced system where users can solve coding problems and improve their programming skills. The project is structured into three main components:
1] Primary Backend: Manages user authentication, problem listings, and solution submissions.
2] Judge Server: Handles asynchronous execution of user code submissions.
3] Judger: Executes code submissions inside Docker containers, ensuring programs stay within specified time and memory limits.
-
User Authentication: Secure login and registration functionalities.
-
Problem Listings: A comprehensive list of coding problems for users to solve.
-
Solution Submissions: Users can submit their solutions to the problems.
-
Asynchronous Execution: Solutions are executed asynchronously to ensure scalability.
-
Dockerized Judging: Code submissions are run in isolated Docker containers to ensure security and resource management.
-
Verdict Generation: The system provides detailed feedback on submissions, including pass/fail status, time, and memory usage.
The project is divided into three separate repositories for better modularity and maintenance. Follow the installation instructions in each repository to set up the components.:
- Repository : Primary Backend Repo
- Description: This repository contains the core backend of the platform. It manages user authentication, problem listings, and solution submissions. It uses Django Rest Framework to create secure and scalable RESTful APIs.
- Repository : Judge Server Repo
- Description: This repository contains the server responsible for the asynchronous execution of user code submissions. It is built using FastAPI and utilizes RabbitMQ for task assignment and horizontal scalability of workers.
- Repository : Judger Repo
- Description: This repository contains the judger system designed to compile and run C++, Java, and Python programs inside Docker containers. It ensures programs stay within specified time and memory limits, handles cleanup of generated files and artifacts, and compares input files with expected and actual output to provide appropriate verdicts.
Contributions are welcome! Please follow the guidelines in the respective repositories.