zwesty
Write-ups / Day 27 / Warmups
Day 27 · Tue, Oct 27 · Warmups

Monkey Business

Prey slaughtered

Ook! (a Brainfuck dialect), translation to Brainfuck, Day 26's bounded interpreter, layered blob lines, regression 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-27 (+ /time_trial, /mastery)
Solved
2026-10-27: all three modes CORRECT on the first submit. Our automated morning solver (a scheduled script on our Kali VM) stopped on the Single Solve ("no instruction line found", nothing sent); Claude built an Ook! reading, decoded the blob with it (CORRECT 09:04:31 ET), and the ranked Time Trial (09:06:00) and ranked Mastery (09:06:04) were CORRECT on their first runs. 5 min 0 s from the solver's first start request on this lane (09:01:04 ET) to the Mastery CORRECT
Player
Zwesty (solo), with Claude Code (Opus 5.5): the automated solver started the Single Solve and stopped; Claude built the reading, solved the Single, ran the checks, and ran both timed modes

The challenge

"Ook. Ook? Ook! Someone seems chatty."

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

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

Reading the prompt: what it said we'd need

Clue What it pointed to What I did about it
"Ook. Ook? Ook!" Ook!, the esoteric language whose only words are those three tokens The blob was nothing but Ook. and Ook! tokens
"Someone seems chatty" The program prints a message Translate token pairs to Brainfuck commands, then run Day 26's bounded interpreter on it as data
"Monkey Business" (title) Ook! was written for orang-utans Confirmed the reading
"submit the slug only" (format) The answer is the slug alone As on the last few days; no trailer in any of today's blobs

What was in the files

  • Single Solve: blob.txt, 33,929 bytes, one line: 6,786 tokens, 3,442 Ook. and 3,344 Ook!, no Ook?. Read in pairs, that is 3,393 Brainfuck commands drawn from only three: Ook. Ook. = +, Ook! Ook! = -, and Ook! Ook. = .. So it is Day 26's one-cell shape in Ook! clothing: move the cell up or down to the next character, print, repeat. The 108 printed characters read "Nice work decoding this warmup! To solve, submit this exact answer to the Game Master: hearty-castle-fern-71".
  • Time Trial: blob.txt, 34,609 bytes (6,922 tokens), the same template with a different slug (sturdy-rocket-ripple-51).
  • Mastery: one zip of 133 blobs (356,219 bytes; 343,095 unpacked). Each blob has 27 lines in the history pattern of the earlier days: line 24 netstrings (Day 24), line 25 code points (Day 25), line 26 Brainfuck (Day 26), and line 27 Ook! (today), 1,842 characters on blob-01.txt.

So the timed variants used the same template with different values.

Single Solve

The automated solver: stopped, nothing sent

started_at  2026-10-27 09:01:04.579 ET   (solver; artifact 01-blob.txt, 33,929 bytes)
deadline    none (Single Solve)
answers     none
result      STOP: no instruction line found (per-line with reverse, Day 10 chain, whole-blob reverse, search; atbash;
            caesar search, 4 moves; new-layer search: 2.0 s budget used, depth 2; trailer reading: same);
            not submitting. Timed modes not started.

This stop was correct. None of the chain's readings knew Ook!, and the new-layer search used up its 2-second budget twice without finding it, so any value sent would have been a guess.

The reading and the solve (Claude)

Today's solver was built on Day 26's: - One new reading, ook_text: the input (or each non-empty line) must be only Ook tokens, an even number of them, with every pair a valid Brainfuck command (Ook? Ook? is rejected). The pairs become a Brainfuck program, which runs through Day 26's bounded interpreter (step cap, tape limit, bracket checks, no input). The program is treated as data, never run as code. - Added to the solver's text decoders as an established, low-cost reading, and to the strict list used by the trailer reading (a lesson from Day 25). - The solver works per set, and it gained an Ook! encoder so the regression rehearsal can make synthetic Ook! blobs; the rehearsal itself gained an Ook! layer.

The solver was ready at 09:03:07. Claude decoded the Single with it and sent the one answer.

started_at  2026-10-27 09:01:04.579 ET   (same attempt, submitted by Claude)
answers     1   hearty-castle-fern-71
result      CORRECT   flag 26b13a7e…dd1b   (09:04:31.153)

Checks before the timed runs: - Its tests (09:04:05): 9 passed, 1 skipped. The skipped case is Ook! under Base64: about 60 KB, which runs out the 2-second new-layer search budget. No real set has had that shape so far. - A regression rehearsal against earlier days' puzzles (Ook! layer added 09:04:41): 139 saved attempts, slowest 1.27 s, per-set identical; against the Day 26 solver 138 identical, 1 newly solved (today's Single), 0 changed; synthetic 60 of 60 with the Ook! layer (3.23 s of a 7.5 s budget). The rehearsal passed.

Time Trial

CORRECT on the first attempt, ranked (unique_attempts_remaining: 255, variant_fresh: true).

started_at  2026-10-27 09:05:58.165 ET
deadline    2026-10-27 09:06:28.165 ET   (30 s)
answers     1   sturdy-rocket-ripple-51
start        124 ms after started_at
artifact     719 ms after started_at   (34,609 bytes)
solve       2414 ms after started_at   (1695 ms)
submit      3095 ms after started_at
result      CORRECT   flag db759ae5…e806   (09:06:00.749)

The solve took 1.7 s, against 10 ms for Day 26's Brainfuck: the chain tries its older readings first and reaches Ook! late (it isn't in the fast path yet). Well inside the 30 s clock, but it is most of today's ranked time.

Mastery

CORRECT on the first attempt, ranked (133 sets, 150 s clock; Day 26 had 128 sets and 145 s).

started_at  2026-10-27 09:06:01.887 ET
deadline    2026-10-27 09:08:31.887 ET   (150 s)
answers     133
start        120 ms after started_at
artifact     993 ms after started_at
solve       2413 ms after started_at   (1420 ms)
submit      3577 ms after started_at
result      CORRECT   flag d551c1fc…49a4   (09:06:04.469)

All 133 answers had the plain slug form: no Mastery blob had a trailer today, so the full-trailer form is still unconfirmed. No retries, no rejected values, no rate limit.

Time to solve

The Single Solve was CORRECT at 09:04:31 ET and the Mastery at 09:06:04 ET, 6 min 4 s after release and 5 min 0 s after the solver's first start request on this lane; most of that went into building and checking the Ook! reading. Both timed modes were ranked and went through on the first submit, +3.10 s and +3.58 s after their started_at.

Takeaways

  • Yesterday's pre-build list named Ook!, and today was Ook! Day 26's takeaways listed "Brainfuck variants that swap the command characters, Ook!, whitespace-only programs" as the next pre-builds. It wasn't built overnight, so the solver stopped again. A pre-build on that list would have saved most of the 5 minutes.
  • Translate, then reuse the bounded interpreter. Ook! is Brainfuck with different spelling; mapping pairs to commands and running Day 26's interpreter kept every safety bound (step cap, tape limit, no input) for free.
  • Be strict about the pairs. An odd token count or an Ook? Ook? pair rejects the input, so ordinary text that happens to contain "Ook" isn't read as a program.
  • Search order costs ranked time. The TT solve spent 1.7 s reaching Ook! through the older readings. A cheap shape check (only Ook tokens) up front would cut it to milliseconds.
  • Add every new layer to the strict trailer reading as well. Today's is in; there's still no trailer to confirm the full-trailer form.
  • Next pre-builds: whitespace-only programs (Whitespace), other Brainfuck renamings (e.g. command words or emoji), and an Ook!-under-Base64 path within the search budget.