<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" version="2.0">
    <channel>
      <title></title>
      <link>https://shadowmachete.com</link>
      <description></description>
      <generator>Zola</generator>
      <language>en</language>
      <atom:link href="https://shadowmachete.com/rss.xml" rel="self" type="application/rss+xml"/>
      <lastBuildDate>Mon, 22 Jun 2026 00:00:00 +0000</lastBuildDate>
      <item>
          <title>2nd Place in TIL-AI 2026 (Fraud edition)</title>
          <pubDate>Mon, 22 Jun 2026 00:00:00 +0000</pubDate>
          <author>Unknown</author>
          <link>https://shadowmachete.com/blogs/til-2026-writeup/</link>
          <guid>https://shadowmachete.com/blogs/til-2026-writeup/</guid>
          <description xml:base="https://shadowmachete.com/blogs/til-2026-writeup/">&lt;p&gt;&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;Overflow-Brainhack&#x2F;til-26-overflow&quot;&gt;Repository linked here&lt;&#x2F;a&gt;&lt;&#x2F;p&gt;
&lt;p&gt;In May-June 2026, me and my team (Overflow) participated in the TIL-AI competition,
hosted by &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;kaisoapbox.com&#x2F;&quot;&gt;Ryan&lt;&#x2F;a&gt;, and got 2nd place... in the Novice Category...
hence, fraud edition.&lt;&#x2F;p&gt;
&lt;p&gt;First of all, I&#x27;d like to thank my teammates (whom I will be addressing by their
online pseudonyms), &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;zyh571&quot;&gt;bur&lt;&#x2F;a&gt;, &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;ChronoVortex07&quot;&gt;ChronoVortex07&lt;&#x2F;a&gt;
and &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;gatastol&quot;&gt;Gatastol&lt;&#x2F;a&gt;, for putting in the time and effort
to train and ideate while all being stuck in our respective army camps.&lt;&#x2F;p&gt;
&lt;p&gt;Without further ado, here&#x27;s how we tackled this year&#x27;s tasks...&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;the-format&quot;&gt;The Format&lt;&#x2F;h2&gt;
&lt;p&gt;This year&#x27;s competition had an almost identical format to last year, with some
changes to the NLP and RL segments.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;qualifiers-specifications&quot;&gt;Qualifiers (&lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;til-ai&#x2F;til-26&#x2F;wiki&#x2F;Challenge-specifications&quot;&gt;specifications&lt;&#x2F;a&gt;)&lt;&#x2F;h3&gt;
&lt;p&gt;2 weeks to develop the best models for ASR, CV, NLP and AE (the RL task of this
year). All scored with 75% weighting given to score and 25% to speed, each giving
20% of the total except for AE, contributing 40%.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Top 20 on the leaderboard progress to the Semis&lt;&#x2F;li&gt;
&lt;li&gt;Top 2 seeded straight into finals&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;&lt;strong&gt;Automatic Speech Recognition (ASR)&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;For the Novice category, this was completely identical to TIL-25, transcribe a
&quot;noisy&quot; audio clip to English.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;At least we only had to deal with 1 language, unlike those in Advanced&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;The predicted text is scored with JiWER-WER with some &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;til-ai&#x2F;til-26&#x2F;wiki&#x2F;Challenge-specifications#scoring&quot;&gt;text transformation&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Computer Vision (CV)&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Once again, we have an identical task to last year, just detect objects within an
image, scored on mAP@.5:.05:.95.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Natural Language Processing (NLP)&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;This year&#x27;s NLP was a RAG task on a corpus of fictional documents, carefully
crafted by Ryan.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;I will note that the NLP task had a very interesting setting in Ryan&#x27;s world
of Clairos, and it is a shame that we did not have time to actively read through
the documents generated.&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;For the Novice category, we only had to deal with 2 types of questions
(whereas Advanced had 3 more):&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;Extraction: the answer could be found directly from the text&lt;&#x2F;li&gt;
&lt;li&gt;Inference: combining multiple facts, or simple calculations&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;We were scored based on retrieval accuracy as well as answer similarity.&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;0.4 points were awarded for retrieving the correct documents within the top-3
retrieved documents.&lt;&#x2F;li&gt;
&lt;li&gt;0.6 points given for obtaining a similarity score &amp;gt;=0.9 to the answer, judged
by a pre-trained BERT model.&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;figure class=&quot;figure&quot;&gt;&lt;img src=&quot;https:&amp;#x2F;&amp;#x2F;shadowmachete.com&amp;#x2F;processed_images&amp;#x2F;surprise-tool.cd57ca59eefeb4e7.webp&quot; width=&quot;1280&quot; height=&quot;720&quot; alt=&quot;It&amp;#x27;s a surprise tool that will help us later&quot; loading=&quot;lazy&quot;&gt;&lt;figcaption&gt;It&amp;#x27;s a surprise tool that will help us later&lt;&#x2F;figcaption&gt;&lt;&#x2F;figure&gt;
&lt;p&gt;&lt;strong&gt;Autonomous Exploration (AE)&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;We were tasked with playing a variant of &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;en.wikipedia.org&#x2F;wiki&#x2F;Pommerman_Challenge&quot;&gt;Pommerman&lt;&#x2F;a&gt;
against 5 other participants.&lt;&#x2F;p&gt;
&lt;p&gt;To summarise the very complicated RL-task of the year:&lt;&#x2F;p&gt;
&lt;p&gt;You spawn in a 6-player FFA in a 16x16 maze with some proportion of walls being
destructible.&lt;&#x2F;p&gt;
&lt;p&gt;You start at your base and earn points by collecting tiles and bombing other
participants &#x2F; bases. At the end of 200 steps, the player with the highest score
wins.&lt;&#x2F;p&gt;
&lt;p&gt;You have a 7x5 viewcone centered at your player (4 ahead, 2 behind and 2 to each
side) and a 5x5 viewcone centered at your base.&lt;&#x2F;p&gt;
&lt;p&gt;You collect &lt;code&gt;mission&lt;&#x2F;code&gt; and &lt;code&gt;recon&lt;&#x2F;code&gt; tiles for points and &lt;code&gt;resource&lt;&#x2F;code&gt; tiles for bombs.&lt;&#x2F;p&gt;
&lt;p&gt;The score breakdown can be found on the &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;github.com&#x2F;til-ai&#x2F;til-26&#x2F;wiki&#x2F;AE-with-til_environment#reward-shaping&quot;&gt;til-26 wiki&lt;&#x2F;a&gt;.&lt;&#x2F;p&gt;
&lt;h3 id=&quot;semifinals-and-finals&quot;&gt;Semifinals and Finals&lt;&#x2F;h3&gt;
&lt;p&gt;In addition to the 4 tasks of the qualifiers, we have the physical constraint of
16GB VRAM to load our models and 2 new &quot;tasks&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Noise&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;For the semis and finals, participants are given the opportunity to apply noise
to images before they are sent to other competitors, indirectly benefiting our
team by lowering opponent&#x27;s CV scores.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;Surprise task&lt;&#x2F;strong&gt;&lt;&#x2F;p&gt;
&lt;p&gt;This was a completely separate task from the rest which essentially involved getting
an AI agent (we had the option to go with an algorithm or use Deepseekv4 on OpenRouter)
to play a simplified version of Civilisation against the 19 other semifinalists.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Side note, I really love Civilisation so this was pretty cool to see as a task&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Ok ok, on to our solutions...&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;asr&quot;&gt;ASR&lt;&#x2F;h2&gt;
&lt;p&gt;Given this task was identical to that last year, we just pulled our code from the
previous competition.&lt;&#x2F;p&gt;
&lt;p&gt;We used Nvidia&#x27;s Parakeet model and just finetuned on the data and shipped it.&lt;&#x2F;p&gt;
&lt;p&gt;Thats about it...&lt;&#x2F;p&gt;
&lt;p&gt;Apart from that, we did some testing with TDT vs CTC vs ONNX runtime, and
settled on the TDT model.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;cv&quot;&gt;CV&lt;&#x2F;h2&gt;
&lt;p&gt;Once again, an identical task to last year, with even the same classes as last year.&lt;&#x2F;p&gt;
&lt;p&gt;So... we pulled the old code...&lt;&#x2F;p&gt;
&lt;p&gt;We went straight in with some good-old reliable models like YOLOv8 and RTDETR
(our best from last year). Seeing our &lt;em&gt;not so high&lt;&#x2F;em&gt; CV scores, we had 2 angles of
attack:&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;We could keep trying different models to find some transformer that worked or,&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Since we suspected the issue would be small objects like last year,&lt;&#x2F;p&gt;
&lt;ul&gt;
&lt;li&gt;We could take an idea from last year which we did not have time to implement,
synthetic data&lt;&#x2F;li&gt;
&lt;&#x2F;ul&gt;
&lt;p&gt;Obviously, we did both in parallel.&lt;&#x2F;p&gt;
&lt;p&gt;Having one-shotted ASR in the first 2 days (&lt;em&gt;happy Novice noises&lt;&#x2F;em&gt;), we tried RF-DETR
along with some newer models, DEIMv2 and EdgeCrafter.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;the latter two were useless... we shipped RF-DETR&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;On synthetic data, we scraped the web for background images from random APIs recommended
by Claude and used bounding boxes to create an object bank using SAM.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;yea... the synthetic images did not help our models generalise to
different background &#x2F; learn smaller objects &#x2F; make up for the object discrepancy
between aerial objects and ocean objects... my guess is that our backgrounds weren&#x27;t
close enough to the training &#x2F; test data to be useful for training&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Alas, another year that Ryan&#x27;s CV augments defeat me.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;noise&quot;&gt;Noise&lt;&#x2F;h2&gt;
&lt;p&gt;An interesting new task this year, and some very interesting ideas.&lt;&#x2F;p&gt;
&lt;p&gt;The first thought we had was to use FGSM &#x2F; PGD to apply adversarial perturbations
to the images, in order to trick opposing models.&lt;&#x2F;p&gt;
&lt;p&gt;We attempted this with an ensemble of common models, that being YOLO &#x2F; RF-DETR
backbone and hope that it carried over to the fine-tuned models. In our experiments
it didnt carry over well to our own fine-tuned models and we had VRAM and speed
worries (this idea also became irrelevant later on).&lt;&#x2F;p&gt;
&lt;p&gt;So, we looked towards CV-related ideas, to apply extra corruption to the image and
make it difficult to detect properly.&lt;&#x2F;p&gt;
&lt;p&gt;Initial experiments involved blurring, obscuring, Gaussian noise, rotation, and,
gray-scale.&lt;&#x2F;p&gt;
&lt;p&gt;The issue with these were that when strong enough, they didn&#x27;t pass the fairness.
And when they passed the fairness, they weren&#x27;t strong enough to impact models.&lt;&#x2F;p&gt;
&lt;p&gt;Jokingly, I tried placing objects around the image, objects I already had in
transparent background png form from generating synthetic data. &lt;em&gt;how convenient&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;And... it worked. I barely raised the RMSE scores while killing our model&#x27;s performance
with 100 extra detections. annnnndd shipped.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;I&#x27;m honestly quite surprised that not many teams used this noising technique.
I intentionally did not add any defensive measures because I assumed that this
would be widespread and I deemed it un-combatable&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Our final version of this object-spam attack as I call it dropped our model&#x27;s mAP
from around 0.97 to 0.08&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;nlp&quot;&gt;NLP&lt;&#x2F;h2&gt;
&lt;p&gt;We started with a legitimate RAG method, using jina embeddings nano for embeddings,
bge reranker for reranking, along with finetuned SmolLM3 for generation.&lt;&#x2F;p&gt;
&lt;p&gt;This, while decent, was incredibly slow and took up way too much VRAM.&lt;&#x2F;p&gt;
&lt;p&gt;After testing a bunch of other stuff like other models (Flan T5 for generation),
disabling generation entirely, etc. We realised that pure algorithmic retrieval
through BM25 not only hit high speed score but scored high overall, mainly due to
the 0.6 credit for retrieval.&lt;&#x2F;p&gt;
&lt;p&gt;At about this time, Ryan announced that any solution would be accepted, even the
mythical cheese that was being heavily discussed in the discord.&lt;&#x2F;p&gt;
&lt;p&gt;As such, operation curds began.&lt;&#x2F;p&gt;
&lt;p&gt;Remember the BERT evaluator from earlier?&lt;&#x2F;p&gt;
&lt;p&gt;By utilising UAT &lt;a rel=&quot;external&quot; href=&quot;https:&#x2F;&#x2F;doi.org&#x2F;10.48550&#x2F;arXiv.1712.06751&quot;&gt;hotflip&lt;&#x2F;a&gt; directly
on the evaluator model that had been conveniently provided to us to test our NLP
models locally, we managed to make a master trigger that scored near 100% cosine
similarity score to any other answer embedding in BERT&#x27;s embedding space.&lt;&#x2F;p&gt;
&lt;p&gt;We used the BM25 retrieval and return the trigger as our candidate answer, scoring
near 100% on both accuracy and speed.&lt;&#x2F;p&gt;
&lt;p&gt;After questioning Ryan again and again whether or not the evaluator model would
be changed for finals, we finally got the confirmation we needed to ship the cheese
without hesitation.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;ae&quot;&gt;AE&lt;&#x2F;h2&gt;
&lt;p&gt;We first started with a balanced algorithmic design, switching between several modes
using a priority-based directive system:&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;Dodge: the highest priority, it only happens in the event of immediate threat
of damage.&lt;&#x2F;li&gt;
&lt;li&gt;Attack: triggers when an enemy is visible in range. We realise our algo&#x27;s attack
was really bad, but we didn&#x27;t have a reliable way to test it as our model&#x27;s dodge
far outclassed its attacking ability.&lt;&#x2F;li&gt;
&lt;li&gt;&lt;del&gt;Defend&lt;&#x2F;del&gt;: defense was removed after realising that defending only loses us
points we could have gained elsewhere and we decided not to waste time nor bombs
on it.&lt;&#x2F;li&gt;
&lt;li&gt;Collect: maximising points from picking up nodes and optimal pathfinding.&lt;&#x2F;li&gt;
&lt;li&gt;Explore: this acts as a fallback to navigate to more open terrain if there aren&#x27;t
objectives in sight.&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;blockquote&gt;
&lt;p&gt;As an aside, I got 3-day MC after a high fever the days leading up to qualifiers
end and A&#x2F;B different modifications to our heuristic model which boosted us from
0.5 to 0.7 score, which we probably wouldn&#x27;t have qualled without as the rest
had no computer access&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;It was only after qualifiers that we developed an auto-improvement script which
allowed Claude to A&#x2F;B test different policies and receive prompt responses from
the eval to look for improvements.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;we were cautious with this as to not overfit on the eval BenBots as we knew they
would not be indicative of the semis and finals&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Welp... time to try RL.&lt;&#x2F;p&gt;
&lt;p&gt;Our RL is a centralised critic PPO model, trained on behaviour cloning from our
best heuristic model and league self-play for many many iterations.&lt;&#x2F;p&gt;
&lt;p&gt;In terms of reward-shaping, we only really removed the -50 point deduction from
losing bases to bias the model against defending. We also shaped our model to assume
that after the first base is destroyed, there will most likely be only 1-2 bases
left alive, a reasonable assumption giving we&#x27;d be facing strong teams, all aiming
to destroy bases.&lt;&#x2F;p&gt;
&lt;p&gt;We had tested evolutionary training, ppo 1v5 heuristic training, asymmetric critic
(one for local viewcone and one for global state), and population training but
they did not give much improvement.&lt;&#x2F;p&gt;
&lt;p&gt;A problem we faced early on was that our heuristic was not strong enough to train
our RL, and we were unable to improve our heuristic as we hit a wall on them.
Even with a variety of different opponents, we found our model learnt best from
self-play.&lt;&#x2F;p&gt;
&lt;p&gt;One thing that we found did help was prioritised fictitious self-play opponent
sampling against hard opponents. This involves rebuilding the league opponent pool
based on how well our model faced against them, helping to train more on harder
opponents.&lt;&#x2F;p&gt;
&lt;p&gt;Our RL was far from good, but it scored 0.559 score on the new eval bots and we
shipped it.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;surprise-task&quot;&gt;Surprise task&lt;&#x2F;h2&gt;
&lt;p&gt;We mostly just threw Claude Code and Codex at it for 6 hours but still found some
exploitable behaviours as we knew that Ryan had probably not fully tested his system.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Fable 5 released literally that morning so we spammed it. Also my first prompt
already activated the security feature to swap to Opus 4.8 💀&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;p&gt;Very early on, we discovered that the code to detect whether a truce was active
between players was flawed and exploitable. It advertised a 5 turn neutral-period
after breaking a truce, which was not represented in the code and let us &quot;ambush&quot;
our &quot;allies&quot;.&lt;&#x2F;p&gt;
&lt;p&gt;We also recognised 2 main ways to play this game,&lt;&#x2F;p&gt;
&lt;ol&gt;
&lt;li&gt;play aggressive, take out everyone but risk our base dying for all the money&lt;&#x2F;li&gt;
&lt;li&gt;make peace with all teams and wait it out til the end but risk splitting the
prize with many other teams&lt;&#x2F;li&gt;
&lt;&#x2F;ol&gt;
&lt;p&gt;Once again, we chose both techniques at once.&lt;&#x2F;p&gt;
&lt;p&gt;Make truces and build economy for the start of the game. And since all truces
break on turn 200, we decided to tell Claude to ambush opponents on turn 195.
Break the truce, they think they have 5 turns of safety, and attack them instantly.&lt;&#x2F;p&gt;
&lt;blockquote&gt;
&lt;p&gt;Whether this actually impacted anything I do not know, but turns out we were one
of the 3 survivors&lt;&#x2F;p&gt;
&lt;&#x2F;blockquote&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;the-panic&quot;&gt;The panic&lt;&#x2F;h2&gt;
&lt;p&gt;Last year, my CV docker crashed and halted the whole mission pipeline because I
forgot to apply timeouts, leading us to lose in semis. I guess this happens every
year...&lt;&#x2F;p&gt;
&lt;p&gt;During the dry run on the first day of finals, our model decided to go into the
corner of the map and sit there... this could be the death of us in the semis and
finals... It wasted 50 steps there and was only bailed out by the respawning of
tiles.&lt;&#x2F;p&gt;
&lt;p&gt;Either we apply some hotfixes that override the RL&#x27;s decisions and manoeuvre out
of that corner forcefully, something definitely not ideal and could have adverse
side-effects, or we just ship the current model as-is and hope it didnt happen in
finals.&lt;&#x2F;p&gt;
&lt;p&gt;I shipped the original model... I should have trained the model with reward shaping
to prevent it from stagnating in corners or repeating movements... Not once in my
visualisation had I seen the RL go to that corner. I guess we just wait and see...&lt;&#x2F;p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;It did it in semis...&lt;&#x2F;strong&gt;&lt;&#x2F;em&gt;&lt;&#x2F;p&gt;
&lt;p&gt;Ah... crap.&lt;&#x2F;p&gt;
&lt;p&gt;Somehow... it got out. And it used the 11 bombs it stockpiled to kill farm the then
second-place in semis, launching us to first and into finals.&lt;&#x2F;p&gt;
&lt;p&gt;&lt;strong&gt;phew&lt;&#x2F;strong&gt; lets hope it doesn&#x27;t do that in finals&lt;&#x2F;p&gt;
&lt;p&gt;ofc it does it again.&lt;&#x2F;p&gt;
&lt;p&gt;Just, this time, our model holds first for so long and then decided to go hide in
the corner and was not bailed out in time by the respawning of tiles... alas, 2nd
place, well-played RL gods.&lt;&#x2F;p&gt;
&lt;hr &#x2F;&gt;
&lt;h2 id=&quot;closing-words&quot;&gt;Closing words&lt;&#x2F;h2&gt;
&lt;p&gt;Thanks to Ryan improving the tooling for this year&#x27;s TIL. His &lt;code&gt;til submit&lt;&#x2F;code&gt; script
helped us implement our own local &lt;code&gt;submit.sh&lt;&#x2F;code&gt; script along with discord watching
for auto-submissions which helped A&#x2F;B for heuristic models and get better readings
when AE eval was still non-deterministic.&lt;&#x2F;p&gt;
&lt;p&gt;Thanks again to Ryan for hosting a solid and fun competition. See y&#x27;all next year.&lt;&#x2F;p&gt;
</description>
      </item>
    </channel>
</rss>
