Project history

How We Built Fog Sweep 64

A second way to practice the Prime Factor 64 facts

Sriram Natarajan and ChatGPT · November 6, 2026

From a matching exercise to a game of discovery

Prime Factor 64 began as a way to memorize difficult three-digit products in both directions. In the original game, Sriram noticed that a rough estimate and a distinctive last digit could make matching easier. That led to grouping products with shared endings. After building the original game and its guide, he wanted a separate, more playful version using the same 64 results.

Sriram proposed two chessboards, one with expressions and one with results. Touching a correct pair could make it disappear. He also floated a Minesweeper-like idea where a move would change what the player could see. The prototype, Sweep the Fog, combined the two boards with progressive reveals. It used correct matches to uncover tiles and skipped mines and guessing at covered squares.

How the fog lifts

Each game has four rounds of 16 pairs. The expression and result tiles are shuffled separately on two 4 × 4 boards. Eight pairs are face up at the start of each round. A correct match clears both tiles, and every two matches reveal two more pairs until all eight hidden pairs have been uncovered. The player can start a match on either board.

The deal groups products by their final digit. The opening draws from pairs and triples with shared endings, and each later reveal adds two products that end in the same digit. This makes the last digit less useful when the tiles first appear. The final unmatched pair still becomes obvious, a trade-off Sriram had accepted in the original matching game.

Each result appears once per game. When a product has two factor pairs, the game randomly chooses one. It also randomizes the order of the two factors. The package reuses the same deck as the original game and learning guide.

What the round review added

Sriram asked to reveal the completed board with each expression and result together, in the expression’s original square. Color and labels distinguish first tries, retries and slow matches. A wrong attempt counts against the first tile tapped. The tile time is the gap between the two taps of the successful match. Five seconds or more earns a Slow label, and a tile can show both Retry and Slow.

He also asked for a score in place of Covered per board. Version 2 removed the counter and called its replacement Round first try. When Sriram reported still seeing the old counter, version 3 made the intended label explicit as First-try score. The archived version 3 diff is a single line, since version 2 already contained the scoring behavior. The live score uses the number of distinct facts attempted so far in the round as its denominator.

The finish and the name

Sweep the Fog was the trial name. Sriram initially suggested Sweep Factor 64 for the finished game and later chose Fog Sweep 64. He asked for a final fanfare, the total score and time, and a breakdown by round. He confirmed that rounds should have a completion cue and that sound should start on.

Rounds 1–3 end with a short chime. The last round ends with a longer rising fanfare and a sustained chord. The player can mute audio with the Sound control. The final screen gives the first-try score out of 64 and the sum of all four round times, alongside the score and time for each round. Each round’s timer runs from the first tap to the last match, so time between rounds and on the review screens is excluded.

Pause and resume

Sriram spotted two effects of stepping away mid-round. The break increased the round and game times, and a break between two taps could also earn a Slow label. He pointed to the pause in Prime Factor 64 as the model.

Pause now hides the boards and blocks tile input. Resume restores the same boards and selection. The round timer and the time between taps use the same active-play clock, with pauses subtracted. The Slow threshold remains five seconds of active play.

Project home

Sriram noticed that Fog Sweep 64 needed the same way back to the project index as Prime Factor 64. The header now links to the page where players can choose either game or open the learning guide.

He asked for the cleaner placement used by Prime Factor 64. The title and Project home now sit at opposite ends of the header. Sound, Pause, and New game sit below the round progress display.

Browser tab icon

Sriram asked for each game to have its own tab icon. Fog Sweep 64 uses two revealed mint tiles and two covered tiles on a dark teal board.

Later, the project home, the learning guide, and both history pages gained tab icons in commits cb67632 and 01a2541. This history page uses the Fog Sweep 64 icon. The game files did not change, so the technical version log has no new entry.

Shared practice history

In Update 8, Grok Bot suggested bringing Fog Sweep misses into Prime Factor 64’s Practice weak facts. Completing a round saves all 16 first-try results together. Retry contributes a miss, and a first-try success counts as seen, including Slow matches. Leaving a round early skips that round’s observations. The games share the same recovery and cross-tab save safeguards. Prime Factor 64 still handles recall retirement and records its own personal bests.

In Update 9, Muse proposed a local outbox for completed rounds. Each round puts its observations in the outbox before waiting for the shared storage lock, so Prime Factor can recover them after the player returns to Project home.

Technical version log

Download the Fog Sweep 64 historical diffs for the four saved versions leading up to the first project commit on GitHub. The repository’s Git history starts at fa804dd and tracks subsequent changes.

Entries 1–4 count the saved dist/index.html at each original commit. Entries 5–10 count the packaged fog-sweep-64.html in Updates 2–5, 8, and 9, with changes measured against GitHub commits 96ec5a8, bde565d, 8e8ca00, 9d31917, 20f0813, and 6229d4e respectively. Blank lines count. CSS and JavaScript count lines inside their tags. HTML counts the remaining lines, including the tags. The shared practice-progress.js has 197 lines in Update 8 and 249 in Update 9.

VersionJS LOCCSS LOCHTML LOCTotal LOCDiffFeature changeImplementation
1
6518476
27718250 509+509 / −0 Two shuffled 4 × 4 boards, staged reveals, sound toggle and a covered-tile counter.Groups products by final digit and deals matching reveal waves to both boards.
2
ed683e7
32720657 590+91 / −10 Replaces Covered per board with Round first try and adds a color-coded review after every round.Tracks a retry and successful tap-to-tap time per result. Reviews preserve expression positions.
3
a833c4f
32720657 590+1 / −1 Renames Round first try to First-try score.One HTML line replaced. Scoring logic carries over from version 2.
4
7030ad4
39222369 684+109 / −15 Renames the game, turns sound on by default and adds the final score and time breakdown.Accumulates scores and elapsed times across rounds. A rising fanfare ends in a sustained four-note chord.
5
Update 2
42322874 725+51 / −10 Pause and resume mid-round.Preserves tile state and uses one pause-adjusted clock for rounds and successful matches.
6
Update 3
42324175 739+15 / −1 Project home link.Links to the project index and moves the game controls to a second row on narrow screens.
7
Update 4
42325175 749+19 / −9 Project home alignment.Moves gameplay controls below round progress and reserves the header for the title and Project home.
8
Update 5
42325176 750+1 / −0 Browser tab icon.Links a 32 × 32 PNG that depicts revealed and covered tiles.
9
Update 8
43825178 767+18 / −1 Completed rounds feed Prime Factor 64’s weak-facts drill.Writes one batch of first-try observations per round through the shared practice storage script.
10
Update 9
43825178 767+0 / −0 Completed rounds survive navigation during a queued save.The shared script writes an outbox batch before waiting for the lock and removes it after merging.

Update 2 SHA-256 for fog-sweep-64.html
cc575ed510777a07c5b8019e1ec2f722f76abcb542bb339c4a115a8480261aae

Update 3 SHA-256 for fog-sweep-64.html
e06ed0bca971536509223da60be0a635725071e1c3a4faecea847a4d696b2e21

Update 4 SHA-256 for fog-sweep-64.html
21a0ff3e1a71e05cc6a669d2fd8de26a0bf20e058888b9ac3777a40e2e0a4b90

Update 5 SHA-256 for fog-sweep-64.html
42120cc984195b01dab325ce0669924e0c15c5b7b4d0a3f7b0f36d828f0c32c2

Update 8 SHA-256 for fog-sweep-64.html
8b7795c5c714946acae2413831c9c108e0e74a470dafe17816f60cab0b462c66

Update 9 SHA-256 for fog-sweep-64.html
8b7795c5c714946acae2413831c9c108e0e74a470dafe17816f60cab0b462c66

Update 9 SHA-256 for practice-progress.js
f396b6cbac3265db1f3717943191987c1d9820f795cf0af86154683854c78a0e