Verifying a 54-move exact search.
How I reconstructed a three-dimensional knight path, reduced the search, and checked the result against the puzzle rules.
Sulayman Bowles · · Updated

How do I check that a puzzle solver’s winning answer is valid?
Recompute the submitted route’s moves, clues, scoring, and constraints from the puzzle specification instead of trusting the search routine’s final score. In the retained July 2026 solve, arithmetic pruning reduced the schedule search before geometric segments were explored; the resulting 33,609 matched Jane Street’s published solution. The verifier still shares helpers with the solver, so agreement establishes a checked result within that implementation, rather than a fully independent proof of correctness.
Evidence: Jane Street puzzle specification · Jane Street official solution
Read this alongside Make AI results inspectable.
My retained solution to Jane Street’s July 2026 puzzle yields 33,609, the answer in Jane Street’s published solution. Reaching that number was only part of the work. The knight moves on an 8-by-8 board divided into 13 regions, with one tower per region. Tower placement changes altitude and scoring: a level move adds the move number, an upward move multiplies by it, and a downward move divides only when the score is exactly divisible. Clues appear every three moves through move 18, then every K moves for an unknown K greater than three.
I used score arithmetic to reject inconsistent clue schedules before searching coordinates. The geometric search then worked between forced clue states, and a stitching step reconciled the segments with the route’s global constraints. This avoided asking one brute-force traversal to guess the schedule, path, and towers at once.
A separate verifier recomputed legal moves, scores, clue timing, tower completion, and the unvisited-square neighbor sums from the proposed solution. Its path table and clue audit make the result inspectable. It shares some helpers with the search, however, so agreement between the two is not a formally independent proof.
- Board
- 64 squares / 13 regions
- Recovered schedule
- K = 7
- Path
- 54 moves
- Published answer
- 33,609
Scope and assumptions
This article describes my retained July 2026 solver and verifier using private implementation records plus Jane Street’s public puzzle, archive, and solution pages. I am not publishing the private source repository or claiming that Jane Street reviewed my code. Jane Street’s official solution confirms the puzzle answer 33,609. The implementation details reported here were checked against the retained solver on September 15, 2026; this publication run did not freshly execute that private solver.
Tower placement changes both moves and scores
Each board square has a two-dimensional coordinate, but the tower decision gives it an altitude of either zero or one. A legal move therefore has absolute coordinate differences {0, 1, 2} across x, y, and z. The same planar jump can be legal or illegal depending on whether one endpoint is a tower.
The score creates a second dependency. At move n, staying at the same altitude adds n, moving up multiplies by n, and moving down requires exact divisibility by n before dividing. Because clue scores occur only on scheduled moves, the route must satisfy geometry, score arithmetic, clue timing, and tower placement at the same time.
The knight must stop when it has visited all 13 towers. A route that continues afterward is invalid even if every move is legal. The verifier checks the first point of completion rather than assuming that reaching every tower is sufficient.
| State component | Why it matters | Typical invalidation |
|---|---|---|
| Board position | Determines planar knight reachability | Destination cannot be reached in the remaining moves |
| Altitude | Changes both move legality and score operation | Proposed move has the wrong 3D delta |
| Score | Must land exactly on the published clue values | Division is not exact or a clue score is missed |
| Visited squares | The knight cannot revisit a space | Segment reuses an earlier square |
| Tower by region | Exactly one tower belongs to each region | Two altitude-1 squares are assigned to one region |
| Schedule | Determines which moves must hit clue squares | A clue is reached on an unscheduled move |
Reject impossible score schedules before searching the board
After move 18, the puzzle says scores are recorded every K moves for some larger K, but the wording admits two natural timing interpretations. The retained search evaluates both. For each mode it tries K values from 4 upward while the required clue schedule still fits inside the board-length bound.
The first reduction ignores board geometry entirely. A dynamic program tracks score, altitude, which nonzero clue scores have already been consumed, and the order in which those scores could appear on scheduled moves. Every transition applies the exact add, multiply, or divisible-only divide rule. If a scheduled move does not produce one of the remaining clue values, that state dies immediately.
The surviving states specify arithmetic-consistent clue orders. Geometry then has one narrower job: realize those orders as legal three-dimensional knight paths, rather than guess the score sequence and route together.
- 01SchedulesTiming bounds
- 02Score statesPublished scores
- 03SegmentsLegal knight paths
- 04One routeGlobal consistency
| Stage | Input | What it rejects before the next stage |
|---|---|---|
| Schedule enumeration | Two post-18 timing interpretations and candidate K values | Schedules that cannot place the required recordings within the move bound |
| Score-state search | Move number, score, altitude, remaining clue scores | Arithmetic sequences that cannot reproduce the published clues |
| Geometric segment search | Forced clue endpoints and exact move counts | Knight paths that violate reachability, score, no-repeat, or tower consistency |
| Global stitching | Candidate segments | Locally valid segments that conflict when combined into one route |
Search between forced clues, then reconcile the segments
Once a clue order and schedule are fixed, consecutive clue states provide a start square, end square, start score, end score, and exact number of moves between them. The retained solver searches those intervals as segments instead of exploring every 54-move route from the start.
Before recursion, it precomputes the board’s knight-neighbor graph and shortest-path distances. During a segment search, a branch is dropped if the target clue is farther away than the number of moves remaining. It also rejects repeated squares, early visits to other nonzero clue squares, impossible score transitions, and conflicting tower assignments inside a region.
Stitching carries global square status, tower commitments, and completed regions from one segment to the next. An internally valid segment is rejected if it contradicts an earlier one. Local pruning can therefore stay aggressive without overwriting global constraints.
Recompute the route from its coordinates
The verifier receives the board regions, clue dictionary, recovered K and schedule mode, tower placements, and path coordinates. It reconstructs the moves and raises an error on the first broken rule; a “found” flag from the search carries no weight.
It checks the 8-by-8 region map, the twelve five-square regions plus the one four-square region, one valid tower location per region, the required starting square, uniqueness of every visited square, and every three-dimensional knight delta. It then recomputes the full score path, including exact divisibility on downward moves.
Next it checks that each scheduled recording lands on the correct clue square with the correct score, that no nonzero clue is reached off schedule, and that all towers are first completed on the final move rather than earlier. Only after those checks does it calculate the answer by summing the scores of orthogonally adjacent visited squares around each unvisited square.
The verifier is separate, but not formally independent: the search reuses some of its coordinate and score-transition helpers. A second implementation derived from the puzzle statement, or a certificate checked without shared helpers, would reduce the risk of both programs accepting the same interpretation error.
| Check | Failure caught |
|---|---|
| Board / regions | Malformed 8×8 map, wrong region count, or wrong region sizes |
| Tower placement | Missing region, tower outside its region, or duplicate tower square |
| Path uniqueness | A square is visited more than once |
| 3D move legality | Coordinate deltas are not a permutation of 0, 1, and 2 |
| Score transition | Wrong add/multiply operation or non-integral downward division |
| Clue schedule | Wrong clue score, skipped scheduled clue, or clue reached off schedule |
| Stopping rule | All towers are reached before the path actually stops |
| Final answer | Neighbor sums do not recompute to the recorded result |
Retained solver output.
{
"K": 7,
"schedule_mode": "natural_after_18",
"path_length": 54,
"answer": 33609
}K = 7 fixes the schedule; neighbor sums give the answer
The retained reconstruction uses the natural “after move 18” interpretation with K = 7. The recorded clue moves are 0, 3, 6, 9, 12, 15, 18, 25, 32, 39, 46, and 53. The route then makes move 54 onto the last tower. That distinction is useful: the last path score is part of the verified route, while the puzzle answer comes from a separate neighbor-sum calculation over the squares the knight never visited.
The retained path has 54 moves and produces 33,609 after the neighbor sums are recomputed. Jane Street’s official July 2026 solution independently publishes the same final answer. That corroborates the numerical result; it does not establish that Jane Street inspected this implementation, this search strategy, or this verifier.
The useful review questions concern the route: which branches arithmetic rejects before geometric search, how tower and score state survive stitching, and which checks can be repeated without trusting the search that produced it. The number 33,609 alone answers none of those questions.
- Move 0: recorded score 0
- Move 3: recorded score 1
- Move 6: recorded score 16
- Move 9: recorded score 23
- Move 12: recorded score 528
- Move 15: recorded score 37
- Move 18: recorded score 88
- Move 25: recorded score 138
- Move 32: recorded score 272
- Move 39: recorded score 449
- Move 46: recorded score 750
- Move 53: recorded score 1,100
- Move 54: last tower, after the final recorded clue. The neighbor-sum answer is a separate calculation.
| Move | Recorded score |
|---|---|
| 0 | 0 |
| 3 | 1 |
| 6 | 16 |
| 9 | 23 |
| 12 | 528 |
| 15 | 37 |
| 18 | 88 |
| 25 | 138 |
| 32 | 272 |
| 39 | 449 |
| 46 | 750 |
| 53 | 1,100 |
Remove shared assumptions from the next verifier
The retained package reconstructs and checks one solution. The next improvement is a second verifier written from the puzzle statement, without shared score or coordinate helpers. That would reduce the chance of an interpretation bug surviving both search and verification.
Second, I would add property tests around move legality, score transitions, schedule generation, and answer recomputation. Third, I would emit a compact solution certificate with the path, tower placements, K, schedule mode, and a content hash so another implementation could validate the same artifact deterministically.
These additions would make the result easier to audit rather than make the search faster. Once the solver has an answer, independent checks offer more value than another optimization that merely finds the same answer sooner.
Publish the checkable route alongside the answer
The evidence consists of the puzzle specification, an explicit 54-move path, recomputed scores and clues, tower completion, and the neighbor-sum calculation. Jane Street’s published solution confirms 33,609, but does not validate my code. A second verifier built without shared helpers would strengthen the retained result.
Sources
- Jane Street — July 2026 puzzle: ‘Pent-Up’ Frustration 3 / Knight Moves 7
Verified Sep 15, 2026
- Jane Street — July 2026 official solution
Verified Sep 15, 2026
- Jane Street — puzzle archive
Verified Sep 15, 2026
Supporting material
- Jane Street July 2026 puzzle
The original puzzle statement, including the 13 regions, towers, three-dimensional knight moves, scoring rules, and changing clue schedule.
- Jane Street official solution
Jane Street’s published July 2026 solution, including the solved path graphic and final answer of 33,609.
- Technical competition dossier
A compact public record of the solver, reconstruction approach, and verifier boundary.