- Notifications
You must be signed in to change notification settings - Fork163
Browser extension which parses competitive programming problems
License
jmerle/competitive-companion
Folders and files
| Name | Name | Last commit message | Last commit date | |
|---|---|---|---|---|
Repository files navigation
A browser extension which parses competitive programming problems from various online judges (like AtCoder and Codeforces) and sends them to various tools (like CP Editor and CPH). Capable of parsing problems and contests and extracting data like the example testcases and the time and memory constraints.
- acmX
- AI Virtual Assistant
- Assistant.nvim
- AutoCp
- Caide
- CHelper
- Competitive Programming Gradle Plugin
- Competitive Programming Helper
- CompetiTest.nvim
- CP-Assist
- CP Editor
- cpbooster
- cphelper.nvim
- Fast Olympic Coding
- Hightail
- JHelper
- Mind Sport
- Red Panda Dev-C++
- rust-competitive-helper
- Any other tool that can parse the data that is being sent, read more about thatbelow
| Website | Problem parser | Contest parser |
|---|---|---|
| 33OJ | ✔ | ✔ |
| A2 Online Judge | ✔ | ✔ |
| ACMP | ✔ | |
| AcWing | ✔ | |
| Aizu Online Judge | ✔ | |
| Algotester | ✔ | |
| AlgoZenith | ✔ | |
| Anarchy Golf | ✔ | |
| AtCoder | ✔ | ✔ |
| A.Y. Jackson Online Judge | ✔ | ✔ |
| Baekjoon Online Judge | ✔ | |
| BAPS OJ | ✔ | ✔ |
| beecrowd | ✔ | ✔ |
| Bloomberg CodeCon | ✔ | |
| BUCTOJ | ✔ | ✔ |
| CodeChef | ✔ | ✔ |
| CodeDrills | ✔ | |
| Codeforces | ✔ | ✔ |
| CodeMarshal | ✔ | ✔ |
| CodeRun | ✔ | ✔ |
| CodeUp | ✔ | |
| COJ | ✔ | ✔ |
| Contest Hunter | ✔ | ✔ |
| CPython.uz | ✔ | ✔ |
| CS Academy | ✔ | |
| CSES | ✔ | ✔ |
| CSGOJ | ✔ | ✔ |
| CSU-ACM Online Judge | ✔ | ✔ |
| CYEZOJ | ✔ | ✔ |
| Daimayuan Online Judge | ✔ | ✔ |
| Dimik OJ | ✔ | |
| DMOJ | ✔ | ✔ |
| DOMjudge | ✔ | |
| DotOJ | ✔ | ✔ |
| Eolymp | ✔ | ✔ |
| ECNU Online Judge | ✔ | ✔ |
| FZU Online Judge | ✔ | ✔ |
| Google Coding Competitions | ✔ | |
| HackerEarth | ✔ | ✔ |
| HackerRank | ✔ | ✔ |
| HDOJ | ✔ | ✔ |
| HIT Online Judge | ✔ | |
| hihoCoder | ✔ | ✔ |
| HKOI Online Judge | ✔ | ✔ |
| HOJ | ✔ | |
| Hrbust Online Judge | ✔ | |
| Hydro | ✔ | ✔ |
| ICPC Live Archive | ✔ | |
| InfoArena | ✔ | |
| ITCoder HUTECH | ✔ | |
| Jutge | ✔ | |
| Kattis | ✔ | ✔ |
| KEP.uz | ✔ | ✔ |
| Kilonova | ✔ | ✔ |
| Lanqiao | ✔ | ✔ |
| Le Quy Don Online Judge | ✔ | ✔ |
| Library Checker | ✔ | |
| LibreOJ | ✔ | ✔ |
| LightOJ | ✔ | ✔ |
| LSYOI | ✔ | |
| Luogu | ✔ | ✔ |
| MarisaOJ | ✔ | ✔ |
| Mendo | ✔ | |
| Meta Coding Competitions | ✔ | |
| MOI Arena | ✔ | ✔ |
| mrJudge | ✔ | |
| MSK Informatics | ✔ | |
| NBUT Online Judge | ✔ | ✔ |
| Neps Academy | ✔ | |
| NerdArena | ✔ | |
| Newton School | ✔ | |
| NOJ | ✔ | ✔ |
| NowCoder | ✔ | |
| NYTD Online Judge | ✔ | ✔ |
| oiClass | ✔ | ✔ |
| Olinfo | ✔ | |
| Olympicode | ✔ | |
| omegaUp | ✔ | |
| OpenJudge | ✔ | ✔ |
| OTOG | ✔ | |
| Panda Online Judge | ✔ | |
| PBInfo | ✔ | |
| PEG Judge | ✔ | ✔ |
| POJ | ✔ | ✔ |
| PTA | ✔ | |
| Public Judge | ✔ | ✔ |
| QBXTOJ | ✔ | |
| QDUOJ | ✔ | ✔ |
| QQWhale | ✔ | |
| RoboContest | ✔ | ✔ |
| SDUT OnlineJudge | ✔ | |
| SeriousOJ | ✔ | ✔ |
| Sort Me | ✔ | |
| SPOJ | ✔ | |
| SSOIER | ✔ | |
| StarryCoding | ✔ | |
| TheJobOverflow | ✔ | |
| Timus Online Judge | ✔ | ✔ |
| TLX | ✔ | ✔ |
| Toph | ✔ | |
| uDebug | ✔ | |
| Universal Cup | ✔ | ✔ |
| UOJ | ✔ | ✔ |
| USACO | ✔ | |
| USACO Training | ✔ | |
| UVa Online Judge | ✔ | |
| Virtual Judge | ✔ | ✔ |
| VNOI Online Judge | ✔ | ✔ |
| YACS | ✔ | |
| Yandex | ✔ | ✔ |
| XXM | ✔ | |
| X-Camp | ✔ | |
| yukicoder | ✔ | ✔ |
| Yun Dou Xue Yuan | ✔ | ✔ |
| ZOJ | ✔ | |
| ZUFEOJ | ✔ | ✔ |
Competitive Companion can send the parsed data in JSON format to your own tools. To do this, start an HTTP server listening for POST requests to / on any of the ports listed in./src/hosts/hosts.ts. An example on how to accomplish this can be found injmerle/competitive-companion-example.
If you want your own tool added to the released version of Competitive Companion,create an issue in this repository specifying the name and a link to the tool.
Here's an example of the data sent when parsingCodeforces 954G:
{"name":"G. Castle Defense","group":"Codeforces - Educational Codeforces Round 40 (Rated for Div. 2)","url":"https://codeforces.com/problemset/problem/954/G","interactive":false,"memoryLimit":256,"timeLimit":1500,"tests": [ {"input":"5 0 6\n5 4 3 4 9\n","output":"5\n" }, {"input":"4 2 0\n1 2 3 4\n","output":"6\n" }, {"input":"5 1 1\n2 1 2 1 2\n","output":"3\n" } ],"testType":"single","input": {"type":"stdin" },"output": {"type":"stdout" },"languages": {"java": {"mainClass":"Main","taskClass":"GCastleDefense" } },"batch": {"id":"123e67c8-03c6-44a4-a3f9-5918533f9fb2","size":1 }}It's not required for a tool to parse all these options, since some of them are tool/language-specific. However, it is required for all extensions/tools that send data via this format to fill all required options.
- name: The full name of the problem. Can be used for display purposes.
- group: Used to group problems together, which can be useful for archiving purposes. Follows the format
<judge> - <category>, where the hyphen is discarded if the category is empty. - url: A link to the problem on the judge's website.
- interactive (optional): Whether this is an interactive problem or not.
- memoryLimit: The memory limit in MB.
- timeLimit: The time limit in ms.
- tests: An array of objects containing testcase data. The JSON objects in the array all have two keys:input andoutput. Both the input and the output need to end with a newline character.
- testType: The type of the tests. Supports two options: "single" and "multiNumber". Explanation of these two can be found on theJHelper wiki.
- input: An object which is used to configure how to receive input. Supported types:
- stdin: Receive input via stdin. No additional options required.
- file: Receive input via a file. The file name has to be given via thefileName option.
- regex: Receive input via a file. The file to use is selected by taking the most recently modified that matches the given regex. The regex pattern to use has to be given via thepattern option.
- output: An object which is used to configure how to send output. Supported types:
- stdout: Send output to stdout. No additional options required.
- file: Send output to a file. The file name has to be given via thefileName option.
- languages: An object with language specific settings. At the moment this only contains Java settings, but since I don't think putting language specific settings as top-level options is a good idea, I decided to put them in an object. This also allows for other languages to have custom configuration added later on. Required keys:
- java: An object with Java specific settings. Required options:
- mainClass: The name of the outer class containing the solution.
- taskClass: The classname-friendly version of the problem's full name. Cannot be the same as mainClass. Can also be useful for non-Java tools because a classname-friendly string is also a filename-friendly string.
- java: An object with Java specific settings. Required options:
- batch: An object containing information about the batch of problems that this problem belongs to. Required options:
- id: A UUIDv4 string which uniquely identifies a batch. All problems in a batch have the same batch id.
- size: The size of the batch, which is 1 when using a problem parser and the amount of problems in the contest when using a contest parser.
The following commands can be used to start working on Competitive Companion locally. Additionally, make sure you gotNode.js andPNPM installed.
# Clone the repositorygit clone https://github.com/jmerle/competitive-companion.git# cd into the extension foldercd competitive-companion# Install the dependenciespnpm install# Decide what you want to do next# Build the Chrome code to the build-chrome/ directorypnpm build:chrome# Build the Firefox code to the build-firefox/ directorypnpm build:firefox# Lint the extension for possible mistakespnpm lint# Package the extension to ZIP filespnpm package# Does the same as dev:firefox but with Chrome, with the exception that the extension is not automatically reloaded# You'll have to manually go to chrome://extensions and click on the reload button on the Competitive Companion entrypnpm dev:chrome# Launch a Firefox instance with Competitive Companion loaded into a temporary profile# Automatically re-compiles the code when the source changes# Automatically reloads the extension in the Firefox instance when the code is re-compiledpnpm dev:firefox
To run the tests, usepnpm test, orpnpm test:no-headless to run tests with the Chrome instance visible. Append-- -t <pattern> to the command to only run tests with names matching the given pattern.
The information provided below is meant for Mozilla volunteers.
Software versions used:
Node.js: 22.20.0
PNPM: 10.15.1
Third-party libraries that can be found in the minified extension:
Package the extension bycd'ing into the source code submission directory, installing the dependencies withpnpm install and packaging withpnpm package:firefox. The result can be found in thedist/ directory.
About
Browser extension which parses competitive programming problems
Topics
Resources
License
Uh oh!
There was an error while loading.Please reload this page.
Stars
Watchers
Forks
Packages0
Uh oh!
There was an error while loading.Please reload this page.