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

Dot Com

Prey slaughtered

Morse code, hex, layered decoding, per-line decoding of a mixed-layer blob

STTMClaude Homebase Both

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

Challenge ID
warmups-day-16 (+ /time_trial, /mastery)
Solved
2026-10-16, all three modes, 4 min 21 s from the first start (13:00:49 → 13:05:10 UTC)
Player
Zwesty (solo), with Claude Code (Opus 5.5)

The challenge

Sixteen little symbols are calling. Dot dot dot.

One question per blob: "Decode the assigned blob completely. What exact answer slug does its final non-empty decoded line instruct you to submit?" Format: three lowercase words and a two-digit number, joined by hyphens (word-word-word-NN).

Reading the prompt: what it said we'd need

Clue What it pointed to What I did about it
"Sixteen little symbols" Hexadecimal: 16 digits, 0–9 and a–f Expected hex under the new layer
"Dot dot dot" Morse code (and a nod to "dot com") The pre-built solver already had a Morse decoder
"calling" Telegraphy / signalling Same: Morse

What was in the files

  • Single Solve and Time Trial: one blob.txt each, a single long line of Morse. Decoded, the Morse letters are hex digits (-.... = 6, .---- = 1, . = e, ..-. = f …), and the hex spells the usual sentence ending in the slug.
  • Mastery: one zip with 78 blob-NN.txt files. Each blob has 16 numbered lines. Line N uses Day N's layer (Base64, ROT13, hex, binary, decimal, octal, percent, HTML entities, \u escapes, Base32, base64url, reverse, Atbash, Caesar, ROT47), so line 16, the slug's tail, is in Morse-over-hex. For example, a line 16 of -.... .---- -.... --... -.... ..-. -.... . ..--- -.. ...-- ....- ...-- ....- reads 61676f6e2d3434, which is agon-44.

Single Solve

Sent by our automated morning solver (a scheduled script on our Kali VM), using a solver we pre-built the night before with speculative layers including Morse. Its whole-blob search chained Morse and then hex by itself. Answer silly-banner-marble-88, solve 10 ms.

started_at 2026-10-16T13:00:49.544Z (untimed)
start 490 ms · artifact 469 ms · solve 10 ms · submit 977 ms · TOTAL 1946 ms
result CORRECT  flag 8ca2f351…c957

Time Trial

Also the solver, ranked (255 unique attempts left). Same shape as the Single Solve.

start 638 ms · artifact 459 ms · solve 8 ms · submit 1486 ms · TOTAL 2593 ms
result CORRECT  flag 84fc39ec…3faf

Mastery

First attempt (solver, ranked, 95 s clock): stopped, nothing submitted. Every set raised "no instruction line found". The solver reads a Mastery blob line by line and lets each line use one new decoder. On line 16 the Morse decoder's output was still hex text, not words, so no reading of the line fit the sentence. The stop was clean (no wrong answer went in), but the clock ran out.

Fix: a Morse (or Braille ASCII) reading made only of hex digits is also offered as the bytes it spells. That counts as one new layer for the line. Nothing else changed; the new solver loads the pre-built one and wraps that one function.

  • Tests 6/6, including all 78 saved Mastery sets and 20 synthetic 16-line blobs.
  • Regression rehearsal (with a new synthetic morse-hex layer): 65 saved attempts, slowest 0.41 s, 64 identical, 1 newly solved, 0 changed, synthetic 60/60. The rehearsal passed.

Retry (one untimed retry; unranked):

retry 2418 ms · artifact 519 ms · solve 249 ms · submit 1341 ms · TOTAL 4528 ms
78 answers
result CORRECT  flag 4b23b17f…0672

Time to solve

All three modes were solved by 13:05:10 UTC (09:05:10 ET), 4 min 21 s after the first start. The Single Solve and the ranked Time Trial each went through in about 2 s; the ranked Mastery expired with nothing sent, and an untimed, unranked retry went through about three minutes later after the fix.

Takeaways

  • A new layer can sit on top of an old one on the same line. Single-layer speculative decoders aren't enough when the day's layer is "old encoding, then new encoding". Rehearse stacked layers before the day, not only single ones.
  • Clean stops paid off again. The solver refused to guess, so the expired attempt cost time, not a wrong answer.
  • The pre-build won the untimed and Time Trial modes in seconds. Only the Mastery's line-by-line path missed.