The challenge
"Caesar took a week off."
One question (message): the slug on the decoded instruction line (three lowercase words and a two-digit number).
Reading the prompt: what it said we'd need
| Clue | What it pointed to | What I did about it |
|---|---|---|
| "Caesar" | A Caesar cipher: each letter moved a fixed number of places | Tried every shift; shifting back 7 gave the usual instruction sentence |
| "took a week off" / "Seven Steps" | The shift: 7 (days in a week, seven steps) | Built the solver for any shift 1–25 anyway, so later days with another key still work |
| "Warmups" (Days 1–13) | Today's layer is stacked on the old ones in Mastery | Added only the new layer to Day 13's chain and checked every earlier answer stays the same |
What was in the files
- Single Solve:
blob.txt, 111 bytes, one line: the instruction sentence ("Nice work decoding this warmup! To solve, submit this exact answer to the Game Master: …") shifted +7. Digits and punctuation unchanged. - Time Trial: one line again, shift +7.
- Mastery: 68 labelled blobs of about 14 lines each. Each sentence is cut into ~9-character pieces, and each piece wears one of the old encodings (Base64, Base32, hex, binary, decimal, octal, percent, HTML entities,
\uescapes, reverse, Atbash) or the new shift 7.
Single Solve
Our automated morning solver (a scheduled script on our Kali VM) stopped cleanly with "no instruction line found": Day 13's chain knew ROT13 (shift 13 only) and nothing else, and it sent nothing. Shifting back by hand gave dapper-sprout-boulder-71 before the new solver existed.
Today's solver wraps Day 13's solver (and through it Days 1–12). It adds only Caesar shifts 1–25:
- one-line blobs: Day 13's chain runs first, unchanged. Only if it fails does a bounded search (4 moves, 3,000 states) try the Day 1 peel, reversal, Atbash, and every shift. Hits must pass Day 12's strict instruction check (every word before the slug is a template word), then they're ranked by slug vocabulary and dictionary. A tie between two different slugs stops the run instead of guessing;
- labelled blobs (Mastery): if Day 12's template walk already gives a slug whose three words are all in the slug vocabulary, Day 13 answers as before. Otherwise a shift-aware walk: pieces of the fixed sentence must continue it exactly, which pins their shift; pieces of the slug are pruned to dictionary words, then ranked. Ties and exhausted budgets (200k nodes, 2k slugs) stop the run;
- Mastery support: delivery N: labels, and a per-set mode so the solver can submit set by set if the clock runs short.
The solver's answer matched the hand decode, dapper-sprout-boulder-71. CORRECT at 09:07:12 ET, flag 8e16bda8…b37f.
Tests (10, all pass on our Kali VM): all 25 shifts on a whole blob; a shift under Base64; a shift plus reversal; ROT13, Atbash, and reversal carry-over; labelled blobs with a fixed shift and with random shifts mixed with other layers; a delivery N: Mastery label; every saved Day 1–13 attempt still gives Day 13's answers; the real blob.
Regression rehearsal (before the timed starts), with a new caesar layer in its puzzle generator: 48 saved sets, slowest 0.54 s (Day 12's Mastery against a 30 s clock), per-set answers identical, 0 changed against Day 13's solver, 1 newly solved (today's). Generated Mastery: 60/60 in 0.56 s. Extra runs of 600 generated blobs with caesar, caesar7, and caesar+reverse: 600/600.
Time Trial
CORRECT on the first attempt. The challenge list marks this route as not supporting ranked starts, so the start was timed but unranked: 30 s, unique_attempts_remaining: 0.
started_at 2026-10-14T13:08:19.313Z
deadline 2026-10-14T13:08:49.313Z (30 s)
answers 1 (shift 7, one line)
solve 2 ms
stamped 13:08:20.102Z (+0.79 s after started_at)
result CORRECT flag 6fbb7bef…11d9
Mastery
CORRECT on the first attempt (68 sets, 30 s, unique_attempts_remaining: 0, unranked).
started_at 2026-10-14T13:08:24.675Z
deadline 30 s clock
answers 68
solve 888 ms
stamped 13:08:26.366Z (+1.69 s after started_at)
result CORRECT flag c7e2fc3b…76e3
Time to solve
All three modes were solved by 09:08:26 ET, 8 min 12 s after the Single Solve was started; the hand decode, solver, and tests took about seven minutes, and every mode went through on the first send. The timed runs were unranked, and Day 14 as a whole finished about 8 min 27 s after release, our best day yet.
Takeaways
- Build for the family, not today's key. The prompt said seven; the solver tries all 25 shifts, so a different key in Mastery or a later day costs nothing.
- The known sentence is the best key-finder. Each shifted piece of the fixed instruction sentence has exactly one shift that continues the sentence, which pins it without guessing. Only the slug pieces need ranking.
- The rehearsal took about a minute and is what made the single-attempt Mastery safe: 68 sets solved in under 1 s against a 30 s clock.
- Parallel lanes paid off: Warmups and Metadata each had a Claude helper agent, and the day finished at +8 min 27 s, our best yet (Day 13: +30 min 7 s).