UNPKG

@nguyenhuu/adventofcode

Version:
219 lines (160 loc) โ€ข 5.72 kB
# Advent of Code Runner [![npm](https://img.shields.io/npm/v/@nguyenhuu/adventofcode?color=lightgreen&label=npm&logo=npm&style=flat)](https://www.npmjs.com/package/@nguyenhuu/adventofcode) [![Node.js CI](https://github.com/nguyenhuuit/adventofcode-runner/actions/workflows/publish-canary.yml/badge.svg)](https://github.com/nguyenhuuit/adventofcode-runner/actions/workflows/publish-canary.yml) [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT) [![Made with Love](https://img.shields.io/badge/Made%20with-โค๏ธ-red.svg)](https://github.com/nguyenhuuit/adventofcode-runner) [![PRs Welcome](https://img.shields.io/badge/PRs-Welcome!-6f42c1?style=flat&logo=github&logoColor=white)](https://github.com/nguyenhuuit/adventofcode-runner/pulls) A CLI tool to help you run and test your Advent of Code solutions across different programming languages. ## Features - ๐Ÿš€ Run solutions in multiple languages (Python, JavaScript, Java, C++, Ruby) - ๐Ÿ”„ Watch mode for automatic re-runs - ๐ŸŽจ Beautiful terminal UI with spinners and colors - ๐Ÿ“ก Auto-fetch puzzle inputs - ๐Ÿงช Test your solutions with sample/real inputs - ๐Ÿ“Š Track your progress and performance ## Installation You can use the tool in two ways: ### Option 1: Using npx (Recommended) ```bash # Run directly without installation npx @nguyenhuu/adventofcode # Or with specific command npx @nguyenhuu/adventofcode --year 2024 --day 1 --part 1 --language python ``` ### Option 2: Global Installation ```bash # Install globally npm install -g @nguyenhuu/adventofcode # Run the tool adventofcode ``` ## Setup Save your `session` cookie into `.env` file in the root folder: ``` SESSION=f8fe3ed61... ``` > The `session` cookie can be found in Developer Tools > Application tab > Cookies > `https://adventofcode.com` (requires login) > The CLI requires your Advent of Code session token to: > - Fetch puzzle inputs for your account > - Display your username and star count > - Submit your answers to the Advent of Code website ## Usage ### Basic Examples ```bash # Using npx npx @nguyenhuu/adventofcode --year 2024 --day 1 --part 1 --language python # Or with global installation adventofcode --year 2024 --day 1 --part 1 --language python ``` ### Interactive Mode ```bash # Using npx npx @nguyenhuu/adventofcode # Or with global installation adventofcode # The tool will prompt for missing information: ? Select programming language: (Use arrow keys) โฏ Python Javascript Java C++ Ruby ? Select year: 2024 ? Select day: 1 ? Select part: (Use arrow keys) โฏ Part 1 Part 2 ``` ### Submitting Solutions 1. Run your solution 2. Press `u` to submit the result 3. The tool will: - Submit your answer - Show if it's correct - Display your progress ### Options - `--year`: The year of the challenge (e.g., 2024) - `--day`: The day of the challenge (1-25) - `--part`: The part of the challenge (1 or 2) - `--language`: Programming language (python, javascript, java, cpp, golang, ruby) - `--disable-telemetry`: Disable anonymous usage tracking - `--help`: Show help information ### Hotkeys - **s**: Use sample.txt as input - **i**: Use input.txt as input - **u**: Submit the most recent result - **1-9**: Select part - **c**: Clear terminal - **q**: Quit program - **x**: Terminate solution - **Enter**: Re-run solution - **h**: Show help ### Folder Structure ``` current/ โ”œโ”€โ”€ 2023/ โ”‚ โ””โ”€โ”€ day1/ โ”‚ โ”œโ”€โ”€ sample.txt โ”‚ โ””โ”€โ”€ part1.py โ””โ”€โ”€ .env ``` ![demo](https://cdn.huu.app/images/adventofcode-runner.png) ## Telemetry This application collects anonymous usage data to help improve the user experience. The data collected includes: - Event types (execution, submission, input fetch, key press) - Basic context (year, day, part, language, input mode) - Application version and platform No personal information is collected. The data is used to: - Understand usage patterns - Identify common issues - Guide future improvements ### Opting Out You can opt out of telemetry in two ways: 1. Using the command line option: `--disable-telemetry` 2. Using an environment variable: `DISABLE_TELEMETRY=true` ## Development ### Prerequisites - Node.js >= 20 - pnpm >= 10 ### Setup This project uses pnpm for package management. If you haven't installed pnpm yet, you can do so globally with: ```bash npm install -g pnpm ``` Then, install the project dependencies: ```bash pnpm install ``` ```bash # Clone the repository git clone https://github.com/nguyenhuuit/adventofcode-runner.git cd adventofcode-runner # Install dependencies pnpm install # Build the project pnpm run build ``` ### Available Scripts - `pnpm start`: Builds the project and runs the main script. - `pnpm start:dev`: Runs the project in development mode. - `pnpm lint`: Lints the source files. - `pnpm lint:fix`: Lints and fixes issues in the source files. - `pnpm format`: Formats the source files using Prettier. - `pnpm format:check`: Checks if the source files are formatted correctly. - `pnpm test`: Runs the tests using Jest. ### Project Structure ``` src/ โ”œโ”€โ”€ components/ # React components for UI โ”œโ”€โ”€ drivers/ # Language-specific drivers โ”œโ”€โ”€ hooks/ # React hooks โ””โ”€โ”€ utils/ # Utility functions ``` ## Contributing 1. Fork the repository 2. Create your feature branch (`git checkout -b feature/amazing-feature`) 3. Commit your changes (`git commit -m 'feat: add amazing feature'`) 4. Push to the branch (`git push origin feature/amazing-feature`) 5. Open a Pull Request ## License This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.