A note for Pine Cove Towers stakeholders

Why some weeks have a couple of empty squares — and what it would take to fix that.

The Towers activity-grid scheduler is doing its job well at this summer's operating size, but it's running close to a mathematical ceiling. This walkthrough explains where that ceiling comes from, what it means in plain terms, and what choices we have if the camp fills to full capacity in future summers.

Audience: camp directors & program planners Reading time: ~10 minutes Subject: 2026 Tower week, full-cabin-capacity scenario

1. The setup at a glance

Pine Cove Towers, 2026 summer, full operating size with one boy-cabin deficit

Every camp week, the activity grid has to assign one activity to each cabin pair for every activity round. Here are the numbers we're working with:

26
cabin pairs (13 girls + 13 boys)
18
activity rounds per week (4 each Mon–Thu, 2 Fri)
26
active activities to choose from
468
squares on the grid that need to be filled

Most activities can host exactly one cabin pair per round — Pinnacle, Gauntlet, Tea Time, BB Guns, and so on. Bumper Cars is the one exception: it can host two pairs simultaneously. Two activities are gender-restricted: Tea Time only takes girls, and Man Hike only takes boys.

And one rule that makes this whole thing interesting: no pair does the same activity twice in a week. Every camper should get the widest possible variety across their five days, which means the grid has to find 18 different activities for each pair.

2. The math of a perfect week

Just enough room, with no wiggle

Think of one activity round (say, Monday morning's first hour) as a row of available "seats." How many seats does the camp have available, all combined, in a single round?

Total seats per round: 27. Cabin pairs needing a seat: 26.

26 pair-seats needed
1 unused

Capacity vs demand, per activity round. Across all 18 rounds, that's 18 unused seats over the whole week.

Looks tight on paper — only 1 seat of breathing room per round. And almost none of even that breathing room is actually usable. Here's why.

3. Where the squeeze comes in

How the breathing room evaporates almost immediately

The 18 unused seats over the whole week have to absorb two structural realities that happen every single week, no matter how the grid is arranged.

Reality 1: Tea Time and Man Hike each have to sit out 5 of the 18 rounds.

There are 13 girl pairs. Each one does Tea Time exactly once during the week (no repeats). Tea Time hosts 1 pair per round and the camp has 18 rounds. So Tea Time is "active" in 13 of 18 rounds — and "sits out" the other 5. Same shape for Man Hike with the 13 boy pairs.

That's 10 of the 18 weekly breathing-room seats already booked just to accommodate these two gendered scarcities.

Reality 2: each pair has a history.

By Thursday afternoon, every pair has already done 13 or 14 activities. They only have a handful left they're allowed to do. If those handful of remaining activities all happen to be claimed by other pairs in the same round, the pair has nowhere to go — even though there might be a seat open at, say, Tea Time. (They can't take it because they already did Tea Time on Monday.)

This second reality is the one that produces the empty squares. The first reality just sets the stage for it.

Imagine playing musical chairs where every player can only sit in each chair once. If two chairs are reserved for left-handed players and most players are right-handed, the right-handed players have very few chairs they can still use late in the game.

4. A walk-through: why a square ended up empty

Following one pair through a real generated grid

Here's a real example from a test we ran this past week — generating a full grid five times and keeping the best version. The "best" version still had two empty squares. Let's follow one of them.

The empty square: Thunderfist 3+4, Thursday morning round 1

A boys cabin pair · 16 of their 18 grid squares already filled

By Thursday morning, Thunderfist 3+4 has already done these 16 activities during the week:

Man Hike Archery Spy Training Party Pool SON Summit Adventure Swim Bumper Cars Jumping Pillow BB Guns Free Swim Catapult Pinnacle Hydroplane SON Blob-o-lean Colosseum Classics Gaga Ball

That leaves 9 activities they haven't yet done and are still allowed to take:

Aslan's Arena Creation Station Gauntlet Pool Blob Puppies SON Jungle Joe SON Rocket Slip 'n Slide Wally's Wardrobe

So far so good — 9 options sounds like plenty. But here's the catch. Every single one of those 9 activities is already running in Thursday morning's first round, hosting a different cabin pair. Each one's lone seat is taken:

  • Aslan's Arena — hosting Caspian 5+6 that round
  • Creation Station — hosting Trumpkin 1+2
  • Gauntlet — hosting Trumpkin 9+10
  • Pool Blob — hosting Phoenix 3+4
  • Puppies — hosting Trumpkin 7+8
  • SON Jungle Joe — hosting Thunderfist 11+12
  • SON Rocket — hosting Thunderfist 5+6
  • Slip 'n Slide — hosting Phoenix 1+2
  • Wally's Wardrobe — hosting Reepicheep 11+12

What's still open at this hour? Just two things:

  • Bumper Cars second seat (Bumper Cars can host 2 pairs) — but Thunderfist 3+4 did Bumper Cars on Tuesday already. Can't repeat.
  • Man Hike (boys-only, sitting out this round) — but Thunderfist 3+4 did Man Hike on Monday already. Can't repeat.

And so the square stays empty. The pair has options, the round has open seats, but those don't overlap.

5. Could we fill them in by hand?

What the scheduler did, what people can do, where both run out of moves

A natural reaction: "the algorithm missed something, surely a human can rearrange this." We checked. Here's what we found.

The "everybody slide over one chair" idea

What if we ask another cabin pair to give up their activity in Thursday morning round 1 so Thunderfist 3+4 can take it? Pick any of the 9 holders above. Say we ask Caspian 5+6 to give up Aslan's Arena.

Now Caspian 5+6 needs a different activity in that same round. Looking at what's available in the round, the only open seats are the same two we just ruled out for Thunderfist 3+4 — Bumper Cars second seat and Man Hike. And it turns out Caspian 5+6 has already done both of those activities elsewhere in the week. So they can't take either, and now their square is empty instead.

We checked every one of the 9 possible swaps. Each one moves the empty square to a different pair, but never eliminates it.

The "move someone's activity to a different day" idea

What if we move Thunderfist 3+4's own Bumper Cars from Tuesday to Thursday morning, freeing them to fit there? That works for filling Thursday morning. But now Tuesday's slot for Thunderfist 3+4 is empty, and the same scarcity problem applies there: every activity Thunderfist 3+4 hasn't done is already running for somebody else in Tuesday's slot.

We computer-searched chains of swaps up to 7 hops deep — that's "move A, which lets B move, which lets C move…" all the way out. No chain succeeded. The constraint network is genuinely closed.

The empty squares we're seeing aren't a sign the scheduler is sloppy. They're a sign that the schedule has more pieces than the puzzle can fit, given the rules we've set.

What it would actually take, in three flavors

OptionWhat it costs
Accept the empty square 2 empty squares per week, on average, get highlighted in orange on the grid. Counselors or staff fill them with free play, a supplemental session, or a quiet activity. The grid view tells them which rounds need attention.
Allow a pair to repeat an activity One cabin pair does the same activity twice during the week (say, two visits to Bumper Cars). Validation flags this in red. Workable but a tiny step backward on the "max variety" promise to campers.
Change the activity roster Add capacity somewhere — for example, raise Gauntlet from 1 pair at a time to 2, or add a 27th activity to the rotation. Either change creates roughly 18 extra seats across the week, which is enough to absorb every empty square. No code changes; this is a config update in the planning sheet.

6. The 2026 cushion — and why it might not last

Why we're getting away with it this year

The numbers above describe Towers right now: 26 cabin pairs. Because the camp is operating with at least one boy cabin deficit for the 2026 summer, the boys side is running smaller than its full size. That's actually helping the activity grid — fewer boy pairs means slightly less competition for the boy-eligible activities, especially Man Hike.

If 2026's tests are showing us 2 empty squares per week, that's the cushioned picture. Picture what happens when the deficit closes:

This summer (with cushion)

~2 empty
squares per generated week

At true full capacity

More
every additional pair tightens the matching

Each additional cabin pair brings the demand-versus-capacity ratio closer to (or past) the breaking point. The reason: a new boy pair adds one more demand for every round, but doesn't add any seats. Every additional pair also has its own activity history, which has to fit into the same shared activity rotation.

7. What stakeholders can do

Levers that don't require any change to the scheduler itself

The good news: all the meaningful levers are stakeholder decisions, not code changes. Each one is a row in the camp's planning sheet.

A. Increase the capacity of an existing activity.

Easiest move. Pick one activity that already has the infrastructure or staffing to handle two pairs simultaneously, and raise its capacity from 1 to 2.

Candidates worth thinking about:

Each capacity bump from 1 → 2 adds 18 weekly seats — exactly the number we'd need to comfortably absorb every conceivable matching conflict, with margin to spare.

B. Add a 27th active activity.

Same magnitude of effect. An activity doesn't have to be new infrastructure — it could be a different format of an existing space ("Pool Games" alongside the existing Pool Blob and Free Swim), or a rotating special event.

C. Loosen the no-repeat rule.

The current grid enforces "each pair does each activity at most once." Loosening this to "at most twice" would let the scheduler always find a fit. This is the simplest change but it's also the one that affects the camper experience most directly — variety drops slightly.

Worth considering only if (A) and (B) are off the table.

D. Accept the current state and rely on the visual workflow.

The scheduler already highlights empty squares in bold orange and lists, beside the grid, exactly which activity is the natural fit (often Tea Time or Man Hike). Counselors can use that as a prompt for filling the gap with a free-play session or a one-off counselor-led activity.

For a summer running 2 empties per week, this is a perfectly tractable workflow. For a future summer running 4 or 5 empties per week (true full capacity), it starts feeling like work.

8. The bottom line

A short version, in case you skipped here

What's happening

The Tower activity grid is mathematically near the limit of what can fit, given the current roster of 26 activities and the rule that no pair repeats any activity. At this summer's operating size (cushioned by a boy-cabin deficit), the scheduler produces about 2 unfilled squares per week. Those squares can't be filled in by hand without breaking the no-repeat rule or rearranging the activity roster — we proved this with an exhaustive search.

What it means for 2026

Manageable. Two empty squares a week, visually highlighted, with a clear hint about which activities would have fit. Counselors absorb these manually.

What it means for future summers at full capacity

The deficit cushioning us this year may not always be there. Each additional cabin pair tightens the grid further. We recommend stakeholders consider — well before the next summer that runs at true full capacity — raising one activity's hosting capacity from 1 to 2, or adding a 27th activity to the rotation. Either change is small in operational terms and is the cleanest way to keep the scheduler reliable.