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

1.8 KiB

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:

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