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.
Website | Problem parser | Contest parser |
---|---|---|
33OJ | ✔ | ✔ |
A2 Online Judge | ✔ | ✔ |
ACMP | ✔ | |
AcWing | ✔ | |
Aizu Online Judge | ✔ | |
Algotester | ✔ | |
AlgoZenith | ✔ | |
Anarchy Golf | ✔ | |
AtCoder | ✔ | ✔ |
Baekjoon Online Judge | ✔ | |
BAPS OJ | ✔ | ✔ |
beecrowd | ✔ | ✔ |
Bloomberg CodeCon | ✔ | |
BUCTOJ | ✔ | ✔ |
CodeChef | ✔ | ✔ |
CodeDrills | ✔ | |
Codeforces | ✔ | ✔ |
CodeMarshal | ✔ | ✔ |
COJ | ✔ | ✔ |
Contest Hunter | ✔ | ✔ |
CPython.uz | ✔ | ✔ |
CS Academy | ✔ | |
CSES | ✔ | ✔ |
CSU-ACM Online Judge | ✔ | ✔ |
CYEZOJ | ✔ | ✔ |
Daimayuan Online Judge | ✔ | ✔ |
Dimik OJ | ✔ | |
DMOJ | ✔ | ✔ |
DOMjudge | ✔ | |
Eolymp | ✔ | ✔ |
ECNU Online Judge | ✔ | ✔ |
FZU Online Judge | ✔ | ✔ |
Google Coding Competitions | ✔ | |
HackerEarth | ✔ | ✔ |
HackerRank | ✔ | ✔ |
HDOJ | ✔ | ✔ |
HIT Online Judge | ✔ | |
hihoCoder | ✔ | ✔ |
HKOI Online Judge | ✔ | ✔ |
Hrbust Online Judge | ✔ | |
Hydro | ✔ | ✔ |
ICPC Live Archive | ✔ | |
InfoArena | ✔ | |
ITCoder HUTECH | ✔ | |
Jutge | ✔ | |
Kattis | ✔ | ✔ |
Kilonova | ✔ | ✔ |
Lanqiao | ✔ | ✔ |
Le Quy Don Online Judge | ✔ | ✔ |
Library Checker | ✔ | |
LibreOJ | ✔ | ✔ |
LightOJ | ✔ | ✔ |
LSYOI | ✔ | |
Luogu | ✔ | ✔ |
Mendo | ✔ | |
Meta Coding Competitions | ✔ | |
MOI Arena | ✔ | ✔ |
mrJudge | ✔ | |
MSK Informatics | ✔ | |
NBUT Online Judge | ✔ | ✔ |
Neps Academy | ✔ | |
NerdArena | ✔ | |
Newton School | ✔ | |
NOJ | ✔ | ✔ |
NowCoder | ✔ | |
NYTD Online Judge | ✔ | ✔ |
oiClass | ✔ | ✔ |
omegaUp | ✔ | |
OpenJudge | ✔ | ✔ |
OTOG | ✔ | |
Panda Online Judge | ✔ | |
PBInfo | ✔ | |
PEG Judge | ✔ | ✔ |
POJ | ✔ | ✔ |
PTA | ✔ | |
Public Judge | ✔ | ✔ |
QBXTOJ | ✔ | |
QDUOJ | ✔ | ✔ |
QQWhale | ✔ | |
RoboContest | ✔ | ✔ |
SDUT OnlineJudge | ✔ | |
SeriousOJ | ✔ | ✔ |
Sort Me | ✔ | |
SPOJ | ✔ | |
SSOIER | ✔ | |
TheJobOverflow | ✔ | |
Timus Online Judge | ✔ | ✔ |
TLX | ✔ | ✔ |
Toph | ✔ | |
uDebug | ✔ | |
Universal Cup | ✔ | ✔ |
UOJ | ✔ | ✔ |
USACO | ✔ | |
USACO Training | ✔ | |
UVa Online Judge | ✔ | |
Virtual Judge | ✔ | ✔ |
VNOI Online Judge | ✔ | ✔ |
Yandex | ✔ | ✔ |
XXM | ✔ | |
yukicoder | ✔ | ✔ |
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 in jmerle/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 parsing Codeforces 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.
<judge> - <category>
, where the hyphen is discarded if the category is empty.The following commands can be used to start working on Competitive Companion locally. Additionally, make sure you got Node.js and PNPM installed.
# Clone the repository
git clone https://github.com/jmerle/competitive-companion.git
# cd into the extension folder
cd competitive-companion
# Install the dependencies
pnpm install
# Decide what you want to do next
# Build the Chrome code to the build-chrome/ directory
pnpm build:chrome
# Build the Firefox code to the build-firefox/ directory
pnpm build:firefox
# Lint the extension for possible mistakes
pnpm lint
# Package the extension to ZIP files
pnpm 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 entry
pnpm 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-compiled
pnpm dev:firefox
To run the tests, use pnpm test
, or pnpm 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.10.0
PNPM: 9.13.2
Third-party libraries that can be found in the minified extension:
Package the extension by cd
'ing into the source code submission directory, installing the dependencies with pnpm install
and packaging with pnpm package:firefox
. The result can be found in the dist/
directory.