Chapter 110 – Dictionary Attacks
193 1 5
X
Reading Options
Font Size
A- 15px A+
Width
Reset
X
Table of Contents
Loading... please wait.

By the time the first two teams take the pitch, we’ve turned the couple of kiloseconds we had left before the match started into about a thousand words.

If it weren’t for the scale of the challenge, that would be a really substantial number of words. As it is, it’s pretty anemic; with four Skills per person, that’s only twenty five words per Skill, though there’s going to be a fair bit of overlap. We’d have had more words in that timespan, but I was focused mostly on spinning up a bit more in the way of automation.

As the announcer starts hyping up the match, which I do my best to tune out, all thousand of those words get run against every one of the ten participants. It gets more hits than I had expected, but runs a bit slower than I’d hoped; that’s not so bad, though, since it gives me a chance to blit out a hundred or so new words related to specific styles of weapons on the field, and those manage to get a few pings of their own.

Really, this would be easier if I could do an alphabet attack on a per-character level. That turns out to not work, and even though I’m decades past having to remind myself that time spent testing a convenient hypothesis isn’t wasted even if the hypothesis is wrong it still burns a little to spend the time; at least it gives me some more insight into the intersection between Omniglot and the encoding of language in the Visor’s data structures.

Somewhere in the middle of doing that, Amber and Zidanya flicker into existence next to each other, a smiling frieze of two women very clearly on a date, Zidanya’s palm resting atop Amber’s as my first companion performatively helps my second into her chair. My eyes shift away from them, and I do my best to push them out of my mind; for one thing, I have work to do, and for another, while I’d be fairly confident Zidanya knows that I can see them, there’s no reason that Amber would, so it’s an… intrusion.

My best isn’t great, which rings warning bells that I’ll have to deal with later, but right now I have a puzzle to solve. That helps, anyway, once I remind myself, and once the initial dictionary attack finishes running.

Once the match starts, I don’t have any attention to spare for sidelong glances at Amber’s smile. I watch Sages move like their lives depend on it to beat the Eggs to the river, immediately scattering a powerful array of mines, traps, and magical explosive constructs; Vonne asks me with utter seriousness if I’m aware of how explosions and explosives function, and starts explaining how guns work, because the Sages aren’t running a Blademaster and have someone I’ve dubbed the Old Gunner instead. Once I stop laughing, she gets over her embarrassment, and the fight gets secured in the first maybe five seconds, their time, of Eggs arriving at the river.

They don’t make it to the other side. They back off, instead, and then the tempo is all in the Sages’ hands, and there’s three whole people on the other team who aren’t able to do anything at range. The plague-spirit-looking lady shrugs off a barrage—[Barrage]conveniently —of bullets by turning into mist—[Ethereal Form], which Vonne knows off the top of her head—but the ghost made out of ice shatters from a shot made possible by a flare launched by Sages’ brawler, whom I tag in my visor as Grappler. It’s some sort of incendiary round that screams through the air and explodes implausibly into fire; alchemical or magical, no doubt.

They make an omelet out of Roe’s team when the latter charges, knowing that it’s do or die. The mines, the magical explosive constructs, and the slick patches of ice are too good at letting the Sages control the distance, and then it’s over, five people dead, I guess temporarily, with hardly a drop of the victors’ blood spilled on the ground.

The Grappler and Stormlord haven’t even gotten involved, other than the one [Revealing Flare]. That doesn’t stop me from getting some of their Skills, but I don’t get all of them. Still, there’s another fight, and that means, as I keep throwing words fruitlessly at the matcher, that I’ll get another chance to do it over again.

Do it over again. There’s something there, a notion that’s itching at the back of my head. I try to chase it down, but it’s evasive, and I worry at it half-heartedly while I pull up the list I’d managed to assemble for the victors.

Sages:

  • Old Gunner: Barrage, Load, ?? of Firearms ??, ??
  • Stormlord: Charge, Spark, Surge, Elemental Affinity: Lightning
  • Grappler: Revealing Flare, ?? the ??, ??, ??
  • Minelayer: Manifest Explosive, ?? Bomb, Plant ??, ??
  • Ice Spirit: Manipulate Ice, Elemental Affinity: Ice, ??, ??

It’s on one hand an astonishing success and on the other hand deeply frustrating. Half, just about; there has to be a more efficient way than trying to think of all of the possible synonyms of proficiency.

Synonyms. It doesn’t explode in my mind; it unfurls, it blossoms like a flower of inspiration. It’s the a-ha that I’m always chasing, it’s the moment of truth and the flash of brilliance.

have all of the synonyms. Of course I do, and all I have to do is do it over again.

I wave off Vonne’s concerned look, too focused to use words to explain. Every single word I’ve been using matches to an array of linguistic constructs in some sort of structured form, once fed through Omniglot, and those are what I’ve been using to test, using the Visor’s System connections, whether the word rings true. But every one of those instances of the linguistic constructs is itself a word, or something that could be a word, and I can feed them back through Omniglot.

The state representations flood across the Visor, for lack of being able to look at the actual data. Translated back into Fleet, they’re words again, strings that possess the ability, the functionality, to call upon the Visor that they might be displayed. From what was by the end of the match a couple of thousand words came some tens of thousands of elements in the abstract linguistics arrays, and from those tens of thousands comes nigh-on a quarter million words of Fleet, most of a dictionary if you’re using the strict construction of the language.

I switch immediately to optimization work once I realize the scale of it. It’s too late to apply the larger dictionary to the fight that just happened, since the victors are off the pitch, but that’s fine. There’ll be another fight, and I just need to get it so that this quarter million passes through Omniglot and then gets tested in a reasonable time.

My previous code had done the most naive thing possible, just going through the list one at a time and testing each of the results. The first optimization is the one that doesn’t require going into any of the underlying functionality and trying to coax more speed out of things; the quarter million all goes through Omniglot right now, and the results get deduplicated and stored in their own data structure, with references to all of the Fleet words that were associated with the abstract element.

Seven hundred and fifty thousand entries, give or take. Three quarters of a million. It’s much less of an expansion than I’d feared, but I’d actually hoped for a reduction.

I keep working. As the new ten come out onto the pitch and the crowd screams, I make sure that the Visor won’t waste time pinging people whose four Skills are already figured out, and the code starts running, even as I continue to work on it. I can’t actually change most of the underlying functionality of how the data structures behave or how the Visor can query the world, but getting hung up on what you can’t fix is for children. As the announcer hypes up the match and the number of items to test starts going slowly, imperceptibly down, I manage to switch the system from a pull-based read-write-confirm to a stream, and the speed jumps by a couple orders of magnitude.

As the horn blows and both teams charge for the river, I switch the test logic from look-shoot-look to a rapid, overlapping style where chunks of words are tested in such close succession as to overlap, without any checking to see the results until just before the System-connection echoes of the first are starting to fade into indistinguishability, and the numbers start to plummet, and I grin viciously.

Then I look at the battlefield, and my grin drops out of my face as I’m reminded of exactly what this abstract puzzle-solving is rooted in.

Someone glows amber-gold, growing to half again their height; [Paragon], my Visor helpfully informs me. They wade through a half-dozen spells as though they didn’t exist, and then are held down as something shadowy and halfway between roots and tentacles holds them down; [Baneful Grasp]. An enormous quadrupedal sed [Blink]s laterally to get the angle he’s looking for and then charges through illusions to grab a lancer and drag him into one of his teammates, at which point he slams the lancer into the ground, knocking him momentarily senseless and knocking down his nearby ally; [Grappling Charge] and [Ground Pound].

It’s a brutal, messy brawl, or at least so it appears, but then I blink a few times and notice something. The Aeons players are trading hits, sure, but they’re landing the hits on the giant and on the big horned fellow who’s walking ever closer while hurling disks of shadow, and Ghosts Numbering Five seem perfectly fine with this. Meanwhile, there are explosions of ice all over the place—[Rime Burst]—from a serpentine woman sort of breathing out globs of burning cold—[Frostflame Barrage]—and the backline on Aeons Past is largely concerned with dodging and casting defensive spells to stay alive, Ghosts are on the offense.

I miss the moment when the first one goes down, double checking to make sure that I’ve gotten everyone’s Skills. I don’t miss it when the horned fellow puts a blast of shadow through someone’s chest, unfortunately, nor when the lancer crunches under the quadraped’s hooves.

Vonne, stars shine on her, cuts the feed at my sign. I’ve got what I need, and have no desire to watch the end.

5