{"id":24077505,"url":"https://github.com/srijxnnn/cfkit","last_synced_at":"2025-07-22T04:04:28.957Z","repository":{"id":270481473,"uuid":"910506943","full_name":"srijxnnn/cfkit","owner":"srijxnnn","description":"cfkit - Codeforces CLI written in NodeJS.","archived":false,"fork":false,"pushed_at":"2025-01-08T16:57:19.000Z","size":319,"stargazers_count":17,"open_issues_count":0,"forks_count":3,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-06-24T22:52:43.026Z","etag":null,"topics":["cli","codeforces","competitive-programming","nodejs","online-judge","shell","terminal"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/srijxnnn.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-12-31T13:19:14.000Z","updated_at":"2025-01-11T20:00:58.000Z","dependencies_parsed_at":null,"dependency_job_id":"c8c43d8c-c50c-4d6f-a457-87ca643ea099","html_url":"https://github.com/srijxnnn/cfkit","commit_stats":null,"previous_names":["jinxedbuffer/cfkit","srijxnnn/cfkit"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/srijxnnn/cfkit","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/srijxnnn%2Fcfkit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/srijxnnn%2Fcfkit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/srijxnnn%2Fcfkit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/srijxnnn%2Fcfkit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/srijxnnn","download_url":"https://codeload.github.com/srijxnnn/cfkit/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/srijxnnn%2Fcfkit/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":266423928,"owners_count":23926123,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-22T02:00:09.085Z","response_time":66,"last_error":null,"robots_txt_status":null,"robots_txt_updated_at":null,"robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","codeforces","competitive-programming","nodejs","online-judge","shell","terminal"],"created_at":"2025-01-09T20:55:04.948Z","updated_at":"2025-07-22T04:04:28.929Z","avatar_url":"https://github.com/srijxnnn.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# cfkit\n\n[![NPM Version](https://img.shields.io/npm/v/@jinxedbuffer/cfkit.svg?style=flat)](https://www.npmjs.com/package/@jinxedbuffer/cfkit)\n![NPM Downloads](https://img.shields.io/npm/dw/%40jinxedbuffer%2Fcfkit)\n[![GitHub Last Commit](https://img.shields.io/github/last-commit/jinxedbuffer/cfkit)](https://github.com/jinxedbuffer/cfkit)\n\ncfkit is a CLI tool for competitive programming leveraging Codeforces API.\n\n**Terminals tested on**: kitty, Konsole\n\n**Fun fact**: I made this software so I can find random problems to solve everyday because I suck at competitive\nprogramming and want to get better at it.\n\n```text\n  _____ ______ _  _______ _______\n/ ____|  ____| | / /_   _|__   __|\n| |    | |__  | ' /  | |    | |\n| |    |  __| |  \u003c   | |    | |\n| |____| |    | . \\ _| |_   | |\n \\_____|_|    |_|\\_\\_____|  |_|\n\n⭐ If you enjoy this software, give it a star:\nhttps://github.com/jinxedbuffer/cfkit\n```\n\n## Table of Contents\n\n- [Installation](#installation)\n- [Upgrading](#upgrading)\n- [Usage](#usage)\n- [Uninstallation](#uninstallation)\n- [Contributing](#contributing)\n- [License](#license)\n\n## Installation\n\nBefore proceeding to install, make sure you have **Node (v22.12.0+)** and **nvm (v0.40.1+)** installed. If they're not\ninstalled, [install it from here](https://nodejs.org/en/download).\n\n```shell\n# Install cfkit globally\nnpm i -g @jinxedbuffer/cfkit\n\n# Confirm installation\ncf -v # Should print the version number\n```\n\n## Upgrading\n\nTo upgrade `cfkit` to the latest version, run:\n\n```shell\ncf upgrade\n```\n\n## Usage\n\nOnce installed, you can use the `cf` command in your terminal. Here's an overview of how to use the available commands:\n\n### Help\n\n_To see the available commands, run:_\n\n```shell\ncf -h\n```\n\nThis will display a list of commands and their descriptions.\n\n### Contests\n\n_Use the `contest` or `c` command to view available contests._\n\n```shell\ncf contest|c [options]\n```\n\n**Options**\n\n|        Option         | Description                                              |\n|:---------------------:|:---------------------------------------------------------|\n|    `-i, --id \u003cid\u003e`    | Show details of a contest by its ID.                     |\n| `-s, --search \u003cname\u003e` | Search for a contest by its name.                        |\n|   `-u, --upcoming`    | Show upcoming contests.                                  |\n|    `-a, --active`     | Show active contests.                                    |\n| `-l, --limit \u003climit\u003e` | Limit the number of contests to show (default is `100`). |\n|      `-g, --gym`      | Show only gym contests.                                  |\n\n**Example**\n\n- _Show details of a contest by ID:_\n\n```text\n$ cf contest -i 1780\n\n┌──────────────────────────────────────────────────────────┐\n│                      Contest # 1780                      │\n├─────────────────┬────────────────────────────────────────┤\n│ Name            │ Codeforces Round 846 (Div. 2)          │\n├─────────────────┼────────────────────────────────────────┤\n│ Phase           │ FINISHED                               │\n├─────────────────┼────────────────────────────────────────┤\n│ Frozen          │ No                                     │\n├─────────────────┼────────────────────────────────────────┤\n│ Duration        │ 2 hours                                │\n├─────────────────┼────────────────────────────────────────┤\n│ Start Time      │ 25 Jan 2023 | 08:05 PM (2 years ago)   │\n├─────────────────┼────────────────────────────────────────┤\n│ Link            │ https://codeforces.com/contest/1780    │\n└─────────────────┴────────────────────────────────────────┘\n? Choose an option (Use arrow keys)\n❯ Open in browser\n  Generate files for this contest\n  See problems\n  Back\n  Exit\n```\n\n- _Show upcoming contests:_\n\n```text\n$ cf contest -u\n\n? Select a contest (Use arrow keys)\n❯ # 2056 │ in 13 days │ Codeforces Round (Div. 2)\n  # 2055 │ in 8 days  │ Codeforces Round (Div. 2)\n  # 2057 │ in 3 hours │ Hello 2025\n```\n\n- _Search for a contest by name:_\n\n```text\n$ cf contest -s \"round 993\"\n\n? Select a contest (Use arrow keys)\n❯ # 2044 │ 20 days ago │ Codeforces Round 993 (Div. 4)\n```\n\n### Problems\n\n_Use the `problem` or `p` command to view problems from the problem set._\n\n```shell\ncf problem|p [options]\n```\n\n**Options**\n\n|         Option          | Description                                             |\n|:-----------------------:|:--------------------------------------------------------|\n|    `-R, --randomize`    | Randomize the list of problems.                         |\n|     `-i, --id \u003cid\u003e`     | Search for a problem by its ID.                         |\n|  `-s, --search \u003cname\u003e`  | Search for a problem by its name.                       |\n|  `-c, --contest \u003cid\u003e`   | Show problems from a specific contest.                  |\n|  `-l, --limit \u003climit\u003e`  | Limit the number of problems to show (default is `15`). |\n| `-r, --rating \u003crating\u003e` | Set a rating filter.                                    |\n|   `-t, --tags \u003ctags\u003e`   | Set tags filter (comma-separated tags).                 |\n\n**Example**\n\n- _Show 10 problems with rating equal to 1500:_\n\n```text\n$ cf problem -r 1500 -l 10\n\n?  Select a problem\n❯ # 2050E  │ Three Strings                           │ dp, implementation, strings\n  # 2049C  │ MEX Cycle                               │ brute force, constructive algorithms, greedy, implementation\n  # 2027C  │ Add Zeros                               │ brute force, data structures, dfs and similar, dp, graphs, greedy\n  # 2026C  │ Action Figures                          │ binary search, brute force, constructive algorithms, data structures,\n  # 2008E  │ Alternating String                      │ brute force, data structures, dp, greedy, implementation, strings\n  # 2007C  │ Dora and C++                            │ math, number theory\n  # 2003D1 │ Turtle and a MEX Problem (Easy Version) │ greedy, math\n(Use arrow keys to reveal more choices)\n```\n\n- _Search for problems by name:_\n\n```text\n$ cf problem -s \"queen\"\n\n?  Select a problem (Use arrow keys)\n❯ # 1667C │ Half Queen Cover                            │ constructive algorithms, math\n  # 1143C │ Queen                                       │ dfs and similar, trees\n  # 685E  │ Travelling Through the Snow Queen's Kingdom │ bitmasks, brute force, divide and conquer, graphs\n  # 587E  │ Duff as a Queen                             │ data structures\n  # 131E  │ Yet Another Task with Queens                │ sortings\n```\n\n- _Search for problems by tags:_\n\n```text\n$ cf problem -t \"tree\"\n\n?  Select a problem\n❯ # 2053E  │ Resourceful Caterpillar Sequence    │ dfs and similar, dp, games, graphs, greedy, trees\n  # 2052M  │ Managing Cluster                    │ dp, graphs, math, trees\n  # 2050G  │ Tree Destruction                    │ dfs and similar, dp, trees\n  # 2048F  │ Kevin and Math Class                │ brute force, data structures, divide and conquer, dp, implementation, math\n  # 2044G2 │ Medium Demon Problem (hard version) │ dfs and similar, dp, dsu, graphs, implementation, trees\n  # 2044G1 │ Medium Demon Problem (easy version) │ dfs and similar, graph matchings, graphs, implementation, trees\n  # 2042E  │ Vertex Pairs                        │ binary search, brute force, data structures, dfs and similar, divide and c\n(Use arrow keys to reveal more choices)\n\n```\n\n### Generate\n\n_Use the `generate` or `g` command to generate input, output, and code files._\n\n```shell\ncf generate|g [options]\n```\n\nThis will generate `in.txt`, `out.txt`, and `main.cpp` files in your **current working directory**.\n\n|         Option          | Description                                                 |\n|:-----------------------:|:------------------------------------------------------------|\n|  `-c, --contest \u003cid\u003e`   | Generates files for each problem in contest.                |\n|  `-p, --problem \u003cid\u003e`   | Generate files for a problem                                |\n| `-t, --template \u003cfile\u003e` | Placeholder to use for `main.cpp` (default: `template.cpp`) |\n\n**Example**\n\n- _Generate files for problem ID `2047B`_\n\n```text\n$ cf generate -p 2047B\n\n✔ Successfully generated files for problem # 2047B\n````\n\nThis will create files for problem ID `2047B` in a folder named `2047B` in the current working directory.\n\n- _Generate files for all problems of contest ID `2047`_\n\n```text\n$ cf generate -c 2047\n\n✔ Successfully generated files for problem # 2047A\n✔ Successfully generated files for problem # 2047B\n✔ Successfully generated files for problem # 2047C\n✔ Successfully generated files for problem # 2047D\n✔ Successfully generated files for problem # 2047E\n✔ Successfully generated files for problem # 2047F\n```\n\nThis will create folders and files for each problem in contest ID `2047` (e.g., `2047A`, `2047B`, ...) in the current\nworking directory.\n\n```text\n./\n├── 2047A/\n│   ├── in.txt\n│   ├── main.cpp\n│   └── out.txt\n├── 2047B/\n│   ├── in.txt\n│   ├── main.cpp\n│   └── out.txt\n├── 2047C/\n│   ├── in.txt\n│   ├── main.cpp\n│   └── out.txt\n.\n.\n```\n\n**Note:** If both options are omitted, only blank files will be created. Use `-p` or `-c` to parse testcases as well.\n\n### Judge\n\n_Use the `judge` or `j` command to judge code against test cases._\n\n**Note: Currently only C++ is supported.**\n\n```shell\ncf judge|j [options]\n```\n\n**Options:**\n\n|        Option         |                    Description                    |\n|:---------------------:|:-------------------------------------------------:|\n| `-i, --input \u003cfile\u003e`  |  Relative path to input file (default: `in.txt`)  |\n| `-o, --output \u003cfile\u003e` | Relative path to output file (default: `out.txt`) |\n|  `-c, --code \u003cfile\u003e`  | Relative path to code file (default: `main.cpp`). |\n\n**Example**\n\n- _Judge `main.cpp` against testcase files (`in.txt` and `out.txt`)_\n\n```text\n$ cf judge\n\n✔ Compilation successful\n✔ Execution for testcase 1 successful (took 5.10 ms)\nTestcase 1: [x] Failed\n┌──────────┬─────┐\n│ Expected │ Got │\n├──────────┼─────┤\n│ a        │ 1   │\n│ b        │ 2   │\n│ d        │ 3   │\n└──────────┴─────┘\n```\n\n- **Note:** If no options are provided, make sure to keep all three files are in the same directory and `cf judge` is\n  executed in the same folder.\n\n### Blogs\n\n_Use the `blog` or `b` command to view blogs._\n\n```shell\ncf blog|b [options]\n```\n\n**Options:**\n\n|              Option              | Description             |\n|:--------------------------------:|:------------------------|\n| `-u, --user \u003chandle\u003e` (required) | Show blog posts by user |\n\n**Example:**\n\n- _Show blogs of an user:_\n\n```text\n$ cf blog -u MikeMirzayanov\n\n?  Choose a blog\n❯ # 137946 │ 6 days ago   │ New Year's Eve Update: Random Problems for Mashups\n  # 137533 │ 9 days ago   │ MaraTON Challenge 1\n  # 137562 │ 14 days ago  │ Goodbye, 2024. Hello, 2025!\n  # 134010 │ 4 months ago │ ICPC World Finals in Astana: I invite you to a push-up challenge!\n  # 133941 │ 4 months ago │ Rule Restricting the Use of AI [revision 2024-09-14]\n  # 133401 │ 4 months ago │ Congratulations: Tourist has reached a rating of 4000!\n  # 133293 │ 4 months ago │ Testing Round 19 [unrated registration testing]\n(Use arrow keys to reveal more choices)\n```\n\n### Cache\n\n_To delete all stored cache, use the `flush` pr `f` command:_\n\n```shell\ncf flush|f\n```\n\nThis will clear the cache data from your system.\n\n## Uninstallation\n\nTo uninstall `cfkit`, run this command:\n\n```shell\nnpm uninstall -g @jinxedbuffer/cfkit\n```\n\n## Contributing\n\nContributions are welcome! If you'd like to contribute, please follow these steps:\n\n1. Fork the repository.\n2. Create a new branch (`git checkout -b feature/your-feature-name`).\n3. Make your changes.\n4. Commit your changes (`git commit -m \"Add feature/bugfix\"`).\n5. Push your branch to your forked repository (`git push origin feature/your-feature-name`).\n6. Open a pull request with a description of your changes.\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsrijxnnn%2Fcfkit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsrijxnnn%2Fcfkit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsrijxnnn%2Fcfkit/lists"}