This is a Rust workspace for solving Advent of Code 2024 problems.
advent-of-code24/
├── Cargo.toml          # Workspace configuration
├── shared/             # Shared utilities library
│   ├── Cargo.toml
│   └── src/
│       └── lib.rs      # Helper functions (like read_input)
├── day01/              # Day 1 solution
│   ├── Cargo.toml
│   ├── README.md       # Problem link and instructions
│   ├── src/
│   │   └── main.rs
│   └── input.txt       # Input file for day 1
├── day02/              # Day 2 solution (create as needed)
│   ├── Cargo.toml
│   ├── README.md       # Problem link and instructions
│   ├── src/
│   │   └── main.rs
│   └── input.txt       # Input file for day 2
└── ...
The shared crate provides utility functions that can be used across all day solutions:
- read_input(file_path: &str)- Reads a file and returns its content as a String
- read_input_lines(file_path: &str)- Reads a file and returns its content as a Vec of lines
# Run day 1
cargo run --bin day01
# Run with release optimizations
cargo run --release --bin day01# Run all tests
cargo test
# Run tests for a specific day
cargo test --bin day01
# Run tests for the shared library
cargo test --package sharedQuick method (recommended):
Use the provided script to automatically create a new day:
./new_day.sh 3  # Creates day03 with all necessary filesThis script will:
- Create the directory structure (day03/src/)
- Generate Cargo.tomlwith proper dependencies
- Create main.rswith template code
- Create README.mdwith the Advent of Code problem link
- Add the new day to the workspace Cargo.toml
- Create an empty input.txtfile
- Create and switch to a new branch named day03
Manual method:
- 
Add the new day to the workspace members in the root Cargo.toml:members = [ "shared", "day01", "day02", # Add this line ] 
- 
Create the new day directory and files: mkdir day02 
- 
Create day02/Cargo.toml:[package] name = "day02" version = "0.1.0" edition = "2021" [dependencies] shared = { workspace = true } 
- 
Create day02/src/main.rs(you can copy from day01 as a template)
- 
Create day02/input.txtwith your puzzle input
use shared::{read_input, read_input_lines};
fn main() -> Result<(), Box<dyn std::error::Error>> {
    // Read entire file as string
    let content = read_input("day01/input.txt")?;
    // Read file as lines
    let lines = read_input_lines("day01/input.txt")?;
    // Your solution logic here...
    Ok(())
}- Place your puzzle input in dayXX/input.txt
- Use the shared helper functions to read input consistently
- Write tests for your solutions using sample data from the problem description
- Use cargo run --releasefor better performance on computationally intensive problems