The challenge
Someone counted on eight fingers. Again.
The question, word for word Days 1–5: decode the blob completely and submit the slug its final non-empty line names. Answer format: word-word-word-NN, trimmed. Mastery: 28 blobs.
Reading the prompt: what it said we'd need
| Clue | What it pointed to | What I did about it |
|---|---|---|
| "Counted on eight fingers" | Base 8, octal | Nothing new: the Day 4 solver had an octal decoder added two days early |
| "Again" | A callback to Day 3's Hex Appeal ("sixteen fingers") | — |
| "Eight Is Enough" (the title) | The same | — |
| Mastery gains a line each day | Six lines this time, the last one octal | Test a six-line blob, including an octal line that also reads as valid decimal |
What was in the files
116 151 143 145 040 167 157 162 153 040 …
Nice work decoding this warmup! To solve, submit this exact answer to the Game Master: hearty-raven-clover-39
How to read octal by eye: three digits, each 0–7. 040 is a space, 141–172 are a–z, 101–132 are A–Z, and 055 is a hyphen. An 8 or a 9 anywhere means it isn't octal.
The trap between octal and decimal: lowercase letters in octal (141–172) are over 127 as decimal, so reading them as decimal fails. But digits and hyphens don't: 055 064 062 ("-42" in octal) is "7@>" in decimal, which is perfectly printable. A slug's ending can be read both ways. The solver has a test for exactly that.
| Mode | Delivered as | Raw format |
|---|---|---|
| Single Solve | blob., 435 B |
The sentence as space-separated octal |
| Time Trial | blob., 431 B |
The same |
| Mastery | One zip of blob- (13,926 B) |
Six labelled lines: Base64, ROT13, hex, binary, decimal, octal |
Single Solve: CORRECT in 26 seconds
Started at 15:41:34 UTC. The solver read it in one octal layer: hearty-raven-clover-39. CORRECT at 15:42:00, flag 255c2910…9d1b. The solver just loads Day 4's by path; 4 tests passed before the timed runs.
Time Trial: 1.83 s of a 6-second clock
started_at 2026-10-07T15:42:05.156Z deadline 2026-10-07T15:42:11.156Z
artifact blob.txt 431 bytes sha256 49b4b24c7acf4841… (checked)
message: tidy-castle-clover-76
start 758 ms
artifact 333 ms
solve 1 ms
submit 740 ms
TOTAL 1832 ms
result CORRECT flag ca8c8391…4b46
Mastery: one wrong answer, then CORRECT
Attempt 1: 27 of 28 right, so the submit was incorrect
started_at 2026-10-07T15:42:14.303Z deadline 2026-10-07T15:42:21.303Z
start 4559 ms <- usually about 500 ms
artifact 778 ms
solve 24 ms
submit 1160 ms
TOTAL 6521 ms <- under 0.5 s to spare
result incorrect
The wrong answer was blob-16's. Its slug, dashing-puzzle-badger-25, was split across the last two lines:
| Line | Encoding | Decodes to |
|---|---|---|
05 |
Decimal | "Game Master: dashi" |
06 |
Octal | "ng-puzzle-badger-25" |
The per-line decoder ranks each line's candidates by how many common English words they contain. For line 6:
| Candidate | Common words | Picked? |
|---|---|---|
octal → ng- (right) |
none | no |
octal + ROT13 → at- |
"at" | yes |
"at" was a fragment at the edge of the line that happened to be a real word. Together with line 5, the solver produced dashiat-chmmyr-onqtre-25: slug-shaped, so nothing stopped it. It was the first wrong answer any warmup solver had sent. Day 4's failures had stopped before submitting.
The fix, and how it was checked
A word that touches the very start or end of a chunk no longer counts, because it may be part of a word split across lines. With "at" ignored, the two candidates tie on words, tie on readability, and the one with fewer layers (octal alone) wins.
Checked before the retry:
- All 108 real Mastery blobs from Days 2–6 re-decoded. The 62 with answers the Game Master had accepted (all of Days 2–5) matched exactly. Blob-16 now gives dashing-puzzle-badger-25.
- Every warmup's tests pass, plus blob-16 as a new regression test.
- An honest note: my first regression check reported "0 regressions" but had compared nothing. The answers it looked for aren't stored where it looked. I caught the empty comparison and redid it against the Game Master request log, which records every submitted answer.
Attempt 2 (retry): CORRECT
started_at 2026-10-07T15:45:51.114Z deadline 2026-10-07T15:45:58.114Z
retry 3440 ms
start 464 ms
artifact 1372 ms
solve 30 ms
submit 676 ms
TOTAL 5982 ms
result CORRECT flag b204eab1…2390
The server was slow both times (a 4.6 s start, then a 3.4 s retry). The solve itself took 30 ms for 28 six-line blobs. The timing risk is now on the server's side.
Time to solve
All three modes were solved on 2026-10-07 by 15:45:53 UTC, 4 min 18 s after the first start. The Single Solve took 26 s and the Time Trial went through first time in 1.83 s; the first Mastery submit was incorrect (one wrong slug out of 28), and the retry passed after a 3-minute fix.
Takeaways
- A slug-shaped answer isn't a proof. Every safety check passed on a wrong answer, because a split word plus ROT13 still made a valid-looking slug. Stops only catch what they test for.
- Fragments lie. The edge of a split chunk can look like a real word ("at", "to", "in"). Score only whole tokens.
- Check a fix against everything already known to be right. 62 accepted answers made the regression test meaningful, and make sure the comparison actually compares something.
- The server is now the clock to watch. Start and retry calls ranged from 0.4 s to 4.6 s today. With a 7-second Mastery clock, that is most of the margin.