zwesty
Write-ups / Day 23 / Warmups
Day 23 · Fri, Oct 23 · Warmups

Eighty-Five Alive

Prey slaughtered

Adobe Ascii85 (<~ … ~>), layered blob lines, slug grammar, tie rules, rehearsal

STTMClaude Homebase Both

Flags are shortened to their first 8 and last 4 characters because they're unique per team.

Challenge ID
warmups-day-23 (+ /time_trial, /mastery)
Solved
2026-10-23: Single Solve and Time Trial CORRECT on the first submit (09:00:36 and 09:00:43 ET, the Time Trial ranked). The ranked Mastery got 112 of 113 and expired. One untimed retry was CORRECT at 09:13:37 ET, 13 min 3 s after the solver's first start request on this lane (09:00:34 ET)
Player
Zwesty (solo), with Claude Code (Opus 5.5): our automated morning solver (a scheduled script on our Kali VM) did the Single Solve, the Time Trial, and the ranked Mastery; a Claude helper agent found the gap, built the fix, ran the checks, and sent the untimed retry

The challenge

"The alphabet got bigger. Adobe might recognize the neighbors."

answer_id Question Format
message "Decode the assigned blob completely. What exact answer slug does its final non-empty decoded line instruct you to submit?" pattern: "three lowercase words separated by hyphens, followed by a hyphen and a two-digit number; submit the slug only"; trimmed

Mastery asked the same question once per blob (set1.message … set113.message).

Reading the prompt: what it said we'd need

Clue What it pointed to What I did about it
"The alphabet got bigger" A bigger alphabet than Base64: Base85 The chain already read Ascii85 (pre-built for Day 16)
"Adobe might recognize" Adobe's Ascii85 variant, wrapped in <~ … ~> Same reader; the delimiters made it easy to spot
"the neighbors" Base85's neighbours in the chain: the earlier layers on the other Mastery lines Nothing new, but each Mastery blob gained a 23rd line
"Eighty-Five" (title) Base85 Confirmed the reading
"submit the slug only" (format) The answer is the slug, even if something follows it This is where it failed: one sentence had extra digits after the slug

What was in the files

  • Single Solve: blob.txt, 143 bytes: one Ascii85 string, <~:2+3L+EqaECER/!@rGmlDJ()6BPDN1G@>N/F…~>. It decodes to the usual sentence ending in the slug crisp-starfish-quartz-70.
  • Time Trial: blob.txt, 141 bytes, the same template with a different slug (quiet-canoe-boulder-30).
  • Mastery: one zip of 113 blobs (69,851 bytes ranked, 70,105 bytes retry). Each blob has 23 labelled lines, the history pattern of the earlier days. Line 22 is Base64 zlib (Day 22) and line 23 Ascii85 (today), for example <~Bk&_S1&~> on line 23 of the ranked blob-01.txt.
  • Set 93 was different. Its sentence ended …Game Master: zippy-sailor-ivy-82-24034. Line 22 (zlib) gave y-82- and line 23 (<~1,L[@1]~>) gave 24034. The sentence is cut into 23 pieces at i*112//23, all 4 or 5 characters long, so the five digits are plaintext, not a misread. The other 112 sets, the Single Solve, and the Time Trial all end at the slug.

Single Solve

The solver solved it with no stop, using the Warmups solver from Day 22.

started_at  2026-10-23T13:00:34.733Z
deadline    none (Single Solve)
answers     1   crisp-starfish-quartz-70
start        245 ms
artifact     298 ms
solve          6 ms
submit      1469 ms
TOTAL       2019 ms   (submit +1.85 s after started_at)
result      CORRECT   flag 90aa8119…6703

Time Trial

CORRECT on the first attempt, ranked.

started_at  2026-10-23T13:00:42.093Z
deadline    2026-10-23T13:01:12.093Z   (30 s)
answers     1   quiet-canoe-boulder-30
start        582 ms
artifact     513 ms
solve          6 ms
submit       709 ms
TOTAL       1810 ms   (submit +1.41 s after started_at)
result      CORRECT   flag 42676648…9802

Mastery

Ranked attempt: 112 of 113, expired

started_at  2026-10-23T13:00:49.140Z
deadline    2026-10-23T13:02:59.140Z   (130 s)
answers     112 of 113 (set93 not in the submit)
start        635 ms
artifact     361 ms
solve        861 ms
submit       338 ms
TOTAL       2195 ms   (submit +1.66 s after started_at)
result      accepted, remaining 1; no further submit, so the attempt expired at the deadline

What went wrong. The chain's slug grammar ends at the two-digit number. For set 93 no reading of the 23 lines made a sentence that ended there, so the solver raised "no instruction line found" and skipped the set under the clock. It then stopped; it is set not to retry on its own.

Nothing was burned. The submit in the request log has 112 keys and no set93, so no wrong value was sent.

Not explained: why the generator added -24034. There was no duplicate slug in the set, slug length doesn't explain it, and the plain last piece vy-82 encodes fine.

The fix

Our solver (loading the Day 22 solver by its own path): one extra reading, used only when the old chain finds nothing for a blob (any error except "ambiguous"). It re-solves with the slug grammar extended by an optional trailer of - and 1 to 8 digits after the two-digit number, then drops the trailer. The words must still pass the positional vocabulary, and the grammar is restored afterwards.

Two details from building it: - The walk's tie rule saw 4 digit readings of line 23 (Ascii85 and other decoders, same cost) as a tie. That tie is now settled only when every fewest-cost reading gives the same slug; two different slugs still raise. - Known gap: a whole-blob sentence with a trailer (the Single and Time Trial shape) isn't read; it stops cleanly, because Day 12's strict instruction check wants the slug last. None has been seen.

Checks before the retry: - Tests 11 of 11: the real set 93 and set 1 through the solver, grammar restored, 25 synthetic trailer blobs in the real 23-line layout, 15 plain ones unchanged and answered by the old chain, non-numeric and 9-digit trailers refused, a two-slug tie raises, the whole-blob gap stops. - The failed set replayed: 113 of 113 (1.21 s whole including warm-up, 0.57 s per set, equal), all 112 accepted answers unchanged, and set93 = zippy-sailor-ivy-82. - Rehearsal: a regression rehearsal against the Day 22 solver's results on 112 saved attempts, plus 60 synthetic blobs with today's Adobe Ascii85 layer: 111 identical, 1 newly solved, 0 changed; synthetic 60 of 60. It passed.

Untimed retry: CORRECT

We then ran one untimed retry, using the Game Master's retry without asking for a ranked run. This Mastery has no ranked time.

started_at  2026-10-23T13:13:34.988Z   (retry, untimed)
deadline    none
answers     113
retry         78 ms after started_at
artifact     346 ms
solve        641 ms
submit      1154 ms
TOTAL       3162 ms   (submit +2.22 s after started_at)
result      CORRECT   flag 704b659d…d53e

The trailer reading wasn't used. The retry's fresh variant had no trailer set, and the old chain solved all 113. So the slug-only answer form (zippy-sailor-ivy-82, inferred from the format text) is still unconfirmed by the server.

Afterwards, at 09:13:50 ET, the fixed solver became the one the scheduled job uses.

Time to solve

The Single Solve (09:00:36 ET) and the ranked Time Trial (09:00:43 ET) each went through on the first submit. The ranked Mastery answered 112 of 113 and expired; after about 12 min 44 s of diagnosis, fix, tests, replay, and rehearsal, one untimed retry went through at 09:13:37 ET, 13 min 3 s after the lane's first start and 13 min 37 s after release, so the Mastery is unranked.

Takeaways

  • A parser anchored on "the slug ends the sentence" misses trailers. One set in 113 had -24034 after the slug; allow a trailing -digits and drop it.
  • Today's layer was the easy part, again. Ascii85 was pre-built a week early and worked first time; the miss was a generator quirk in one set.
  • Leaving a set out is better than guessing it. The solver sent 112 known answers and burned nothing, so the retry started clean.
  • One missed set costs the whole ranked Mastery. 112 of 113 is still not CORRECT, and the retry has no ranked time.
  • A fix can pass without being proven. The retry's variant didn't contain a trailer, so the answer form the fix produces has never been graded.