24 Commits
Author SHA1 Message Date
Russell Champoux 95328895ab Solve Day 10 Part 2 with bifurcate algorithm
Part 1: Brute force all 2^n button combinations (XOR toggle)
Part 2: Bifurcate algorithm - enumerate parity-matching combos,
        halve remaining targets, and recurse with memoization

Algorithm credit: Reddit user tenthmascot
https://www.reddit.com/r/adventofcode/comments/1pk87hl/

The key insight is that Part 1 (parity/XOR) helps solve Part 2:
1. Find all button combos that achieve correct target parity
2. Press those once (Phase 1), making all remaining values even
3. Halve and recurse - O(log(max_target)) depth with caching
2026-01-06 13:17:40 -05:00
Russell Champoux c9fdf547bb Solve Day 9: Movie Theater
Part 1: Find largest rectangle with any two red tiles as corners
Part 2: Rectangle must be entirely within the polygon formed by
        red tiles connected by green edges + interior fill

Used coordinate compression + expanded grid flood fill + 2D prefix
sum for O(n²) rectangle validation on huge coordinate ranges.
2026-01-05 16:47:55 -05:00
Russell Champoux 2bc8842154 add day 12 benchmarks 2026-01-05 16:20:35 -05:00
Russell Champoux d8a67cf515 Add Day 12 solution (ft. an unused DLX library)
Turns out two simple heuristics solve the whole problem in 4ms:
1. Does the area fit? No → invalid
2. Are there enough 3x3 spaces for all presents? Yes → valid

But hey, at least we learned how to use Dancing Links for
a problem that didn't need it. The dlx crate thanks us for
the download stats.
2026-01-05 16:13:55 -05:00
RussellChamp ac4208f893 Update benchmarks - run on desktop gaming rig (Linux)
Updated benchmark results for all days. New benchmarks were run on desktop gaming rig running Linux. Total runtime improved from 24.88ms to 9.24ms.
2026-01-02 23:34:06 +00:00
Russell Champoux 3cfad8af27 Add Day 10 and Day 11 solutions
Day 10: Indicator light configuration with bitmask brute-force
Day 11: Graph path counting with memoized DFS
- Part 1: Count all paths from 'you' to 'out'
- Part 2: Count paths from 'svr' to 'out' visiting both 'dac' and 'fft'
2025-12-12 18:08:14 -05:00
Russell Champoux cb01d29665 Add Day 9 Part 1 solution - find largest rectangle from red tiles 2025-12-11 16:50:38 -05:00
Russell Champoux b067baac3d Optimize Days 1-8: 41% faster overall (39ms → 23ms) 2025-12-09 16:16:10 -05:00
Russell Champoux 6ff1349679 ⚡ Day 8: 2.2x FASTER with rayon parallel sorting! From 33ms to 15ms 💪 2025-12-09 16:04:45 -05:00
Russell Champoux ca302578c9 Solve Day 7: Tachyon beam splits and quantum timelines 2025-12-09 15:57:20 -05:00
Russell Champoux e3fe456616 Solve Day 6 & 8, refactor Day 6 with itertools 2025-12-08 14:15:29 -05:00
Russell Champoux 5e0660b095 🚀 Day 2: MASSIVE 10x speedup & 99% memory reduction! Iterator magic FTW! 2025-12-05 13:40:49 -05:00
Russell Champoux f95ecc2fe1 Solve Day 5: Cafeteria (fresh ingredient ranges) 2025-12-05 12:10:20 -05:00
Russell Champoux 6f492ae3a1 Format code with cargo fmt 2025-12-05 11:53:54 -05:00
Russell Champoux d3bc3493ee Fix clippy warning: collapse nested if in Day 4 2025-12-05 11:53:03 -05:00
Russell Champoux cf3a3f8bfe Update README year to 2025 2025-12-05 11:50:51 -05:00
Russell Champoux 491f89f523 Optimize Day 2 solution: 41x faster Part 1, 18x faster Part 2
- Changed from brute-force iteration to generating invalid numbers directly
- Part 1: 45.0ms → 1.1ms
- Part 2: 69.6ms → 3.8ms
- Total benchmark time: 119.38ms → 9.68ms
2025-12-05 11:49:44 -05:00
Russell Champoux 702221e78f Refactor day 4 to use Cell enum 2025-12-05 09:28:58 -05:00
Russell Champoux 52c3f31f54 Solve Day 4: Printing Department 2025-12-05 09:25:38 -05:00
Russell Champoux d650dce61b Refactor days 1-2, optimize day 3 part 1 with suffix max 2025-12-04 17:34:11 -05:00
Russell Champoux 0b5c8fa10f Solve Day 3: Lobby 2025-12-04 17:19:18 -05:00
Russell Champoux a402156786 Solve Day 2: Gift Shop 2025-12-04 17:11:46 -05:00
Russell Champoux d803be0b01 Solve Day 1: Secret Entrance 2025-12-04 17:04:14 -05:00
RussellChamp cfeb0828fd Initial commit 2025-12-04 16:22:10 -05:00