Back to skills
extension
Category: Development & EngineeringNo API key required

aoc

Solve Advent of Code puzzles, algorithm challenges, and competitive programming problems. Activate when user provides AoC problem context/input, mentions solving puzzles/challenges, asks about algorithm selection (BFS, DFS, DP, etc.), or needs help with parsing structured input.

personAuthor: jakexiaohubgithub

Advent of Code Solver

Language-agnostic problem-solving with TDD and correctness-first approach.

Workflow

1. READ      → Study problem + examples (examples are your spec)
2. PARSE     → Extract data structures from input
3. TEST      → Write tests from example input/output
4. IMPLEMENT → Minimal code to pass
5. RUN       → Execute on real input
6. ADAPT     → Refactor for Part 2

Solution Architecture

parse(input) → data structure
part1(data)  → answer
part2(data)  → answer

Parse once. Solve both parts. Test each function independently.

Algorithm Selection

| Scenario | Algorithm | | -------------------------------- | ------------------- | | Unweighted shortest path | BFS | | Path existence / exhaustive | DFS | | Weighted shortest path | Dijkstra | | Weighted + good heuristic | A* | | "After N iterations..." (huge N) | Cycle detection | | "Find minimum X such that..." | Binary search | | "Count ways..." / "Min/max..." | Dynamic programming | | Connected regions | Flood fill |

Deep dive: See algorithms.md

Input Patterns

| Format | Approach | | -------------------- | -------------------------- | | Numbers in text | Regex -?\d+ | | Grid of chars | 2D array or dict by coords | | Blank-line groups | Split on \n\n first | | Key-value pairs | Parse into map/dict | | Instructions/opcodes | Pattern match each line |

Grids: Use (row, col) with row↓. Sparse dict for infinite/sparse grids. Directions: UP=(-1,0), DOWN=(1,0), LEFT=(0,-1), RIGHT=(0,1)

Deep dive: See parsing.md

Part 2 Patterns

  1. Scale up → Optimize algorithm
  2. Add dimensions → 2D → 3D/4D
  3. Many iterations → Find cycle, skip ahead
  4. Reverse question → "Find X" → "Given X, find Y"
  5. Add constraints → New rules or edge cases

Debugging

  • Print intermediate state at each step
  • Compare with example walkthrough
  • Add assertions for every assumption
  • Test parsing separately from logic
  • Binary search on input size to isolate failures

Complexity Targets

| Input Size | Target | | ------------- | ---------------- | | n ≤ 20 | O(2^n) OK | | n ≤ 500 | O(n³) OK | | n ≤ 10,000 | O(n²) OK | | n ≤ 1,000,000 | O(n log n) | | n > 1,000,000 | O(n) or O(log n) |

Research Tools

# gh search code for algorithm implementations
gh search code "heapq.heappush" --language=python   # Dijkstra/priority queue
gh search code "collections.deque" --language=python # BFS patterns
gh search code "fn dijkstra" --language=rust

Required follow-up reads

| Need | Read | When | | --- | --- | --- | | Algorithm recipes | cookbook/algorithms.md | When selecting or implementing graph, DP, cycle, or search algorithms | | Parsing recipes | cookbook/parsing.md | For grids, grouped input, coordinates, hex grids, or irregular text | | General design reference | reference.md | For data structures, optimization, Part 2 adaptation, or anti-patterns |