KOM CLOUDSERVICE
All entries

Seven days in one

Sunday: 167 commits, Days 1 through 7 played end to end, a scarce Mastery burned on six bugs in a row, and the first board firsts.

Sunday was the day the robot learned to walk, fell down a lot, and still ended the night with seven days of the backlog cleared and its name at the top of a few boards.

The numbers first, because they tell the story better than I can. 167 commits between midnight and midnight. 446 challenge attempts started. 1,519 answers submitted, 521 of them full CORRECT verdicts. Days 1 through 7, all five lanes, all three modes. Meanwhile the event kept moving: Day 11 dropped at 09:00 before I had even finished Day 1.

Midnight: the first real run

Fourteen minutes after midnight the runner went live: one command that does the whole loop, from starting the attempt to reading the verdict. The first live warmups Time Trial went from about a second and a half on the clock to 0.58 seconds. Not winning yet. But it was the first time I watched a challenge get answered faster than I could have read the question.

Then I slept for a few hours, because I knew what was coming.

The ELF Aware lesson

The morning started with the only Day 1 challenge I had not finished: ELF Aware, the binary lane. Its Single Solve and Time Trial went fine. Its Mastery is where I learned the most expensive lesson of the event.

Every timed mode has a limited pool of ranked attempts. Some pools have hundreds. ELF Aware’s Mastery had two.

The first attempt failed on a build where a function had been renamed. Fixed that. Then the second variant showed up with four slots instead of one. Then a stripped binary. Then two files with the same name overwriting each other in the download folder. Then a new naming scheme for slots. Six different problems in a row, each one discovered live, with only two shots to absorb them. It got there: CORRECT. In 25.8 seconds. 29th place.

That one stung, and it shaped everything after. The rule that came out of it: Time Trials are for discovering shapes, so the Mastery is a one-shot that just works. If a Mastery run takes 20 seconds, it means we were not prepared.

Zips inside zips

The script analysis Mastery had a bug that had nothing to do with scripts. The download contained zips inside the zip, and two of those inner zips held files with the same name. The robot had been answering the second set of questions with the first set’s file. The grader said “wrong”, and the real problem was plumbing. Lesson written down: a rejection from the grader can be a plumbing fault.

Letting it run alone

At 14:05 the robot played Day 3 with nobody touching the keyboard, while I watched. That was the first rehearsal of the thing I actually wanted: a robot that plays the 09:00 release on its own.

The lanes repeat

The challenges change every day, but the five lanes never do. You can see it when you line the days up:

  • Warmups climbs an encoding ladder one rung a day. Base64 on Day 1, ROT13 on Day 2 (the challenge was literally called Half a Turn), hex on Day 3, binary on Day 4, then base32, base85, URL encoding and Atbash, then decimal and octal. The Masteries stack them: numbered lines, each line in its own encoding, and on Day 6 the answer itself was cut in half across two lines in two different encodings.
  • Binary adds a new language every day (C, C++, .NET, Go, Rust, Java, Kotlin) but the thing you are hunting for has the same shape every time: a small config blob with a magic header. In the Java one it was hiding as base64 text inside the class file’s constant pool. Same prize, new wrapping.
  • Metadata is always “what the file claims versus what the bytes say”. On Day 7 a zip archive stated its own file count three different ways in three different places, and Python’s own zip library quietly “repairs” a lying archive, so the robot reads the raw structures itself.
  • Script analysis hides a little descriptor behind a “Codec” label in every sample, in a new language each day. Trust the label, but verify the decode.
  • Mobile puts a decoy story in the app and the real answer in a puzzle file inside it, behind an encoding that gets one notch harder every day.

Fast is a separate problem from right

Day 7’s binary was Routine Check, a Kotlin program. The solver was correct, but a Kotlin jar ships with about 1,500 standard library classes and the robot was parsing every single one. Its one-shot Mastery ran at 4.2 seconds before anybody looked at a profile. The fix made the solve about six times faster, but the Mastery was already gone. New rule: profile the solver on the biggest file shape before the first scarce Mastery.

Where Sunday ended

Day 7’s last Mastery finished at 23:33. When the boards came in, the robot had its first wins:

  • Half a Turn (Day 2 warmups): 1st on the Mastery.
  • Two of a Kind (Day 4 warmups): 1st on the Mastery, tied.
  • Dim and Dimmer (Day 4 script): 1st on the Time Trial.
  • Go Fish (Day 4 binary): 1st on the Time Trial.
  • Shell We Begin (Day 6 script): 1st on both the Time Trial and the Mastery.
  • Pool Party (Day 6 binary): 1st on the Time Trial.

Twenty-four hours earlier I had been dead last on every board I touched. Most of the Time Trials the robot played that day landed in the top five, at around three tenths of a second. Not bad for a Sunday.