math-tasks/tasks/collecting-asteroids/CLAUDE.md

47 lines
1.8 KiB
Markdown

# Collecting Asteroids Task Type
Match asteroids to cargo ships by weight sum. Each page has 3 ships with cargo bays and ~12 asteroids scattered across the page. Child draws lines connecting asteroids to ships so that asteroid values sum to ship capacity.
## Layout
- 3 ships per page with cargo bay images
- 2 asteroid types per page (70:30 ratio distribution)
- 12 asteroids per page scattered with absolute positioning
- Hero images: splitter ships from `assets/hero-images/splitters/`
- Footer images: cabin interiors from `assets/footers/cabin{1-9}.jpeg`
- Cargo bay images: `assets/icons/pack4-cargobay/cargo-bay{1-9}.png`
- Asteroid images: `assets/icons/pack3-asteroids/asteroid{1-16}.png`
## Asteroid Placement Rules
- Distribute asteroids evenly across the page area using grid-based approach
- Asteroids must not overlap with ships or cargo bays
- Each asteroid has a numeric value (1-20) displayed on it
- Scale formula: `scale = baseScale + 0.15 * value` (default baseScale: 0.30)
- No editor-first approach — generate everything via AI first, editor comes later for fine-tuning
## Validation
Use verify script to check that asteroid values can be partitioned to ship capacities:
```bash
node scripts/verify.mjs --ships 10,10,14 --asteroids 3,2,1,4,5,2,3,6,5,4,1,6
```
Always verify solvability after generating or editing asteroid values.
## Scripts
- `scripts/verify.mjs` — solver to verify asteroid-to-ship partition (stdout → Claude reads)
- `scripts/transform-collecting3.mjs` — bulk asset replacement utility
## Editor
`editor.html?file={docId}` — drag asteroids and ship circles, adjust values and scales.
Key controls:
- Drag: move asteroid/ship position
- `+/-`: change asteroid value (1-20 range)
- `[/]`: rotate ±5° (Shift = ±1°)
- `</.>`: adjust base scale per asteroid type
- Save: writes to `docs/{docId}.data.json`