Tamás Takács
31 min read
International Olympiad in Artificial Intelligence (IOAI) 2025
To be honest, we got off to a late start this year. Planning should’ve kicked off right after the IAIO Olympiad wrapped up, but last year was so intense that everyone really needed a break, and maybe we took that a bit too seriously. It wasn’t until January that we started pulling the team back together, and even then, only in bits and pieces. After months of pause, some team members had moved on, so we had definitely faced a rough and rocky beginning to this year’s organizing journey.
The National Olympiad
Since we started organizing later than planned, our communication with schools, students, and sponsors was also delayed. This meant we had to quickly jump into every communication channel we could, trying to reach as many people as possible in a short time. On top of that, we kicked off the year with just four core team members, which meant extra effort was needed just to stay coordinated among ourselves.
For student preparation, we opted for a more asynchronous approach this year. Many of the organizers are juggling teaching duties and PhD work, making regular live sessions difficult to sustain. So instead, we curated a broad set of topics, including Machine Learning, Deep Learning, Computer Vision, NLP, Reinforcement Learning, and various AI tools, and created a wide range of practice materials in Hungarian. These were sent to students to work on at their own pace and were designed to resemble both past Olympiad tasks and national qualifier problems.
Our Discord server is thankfully still alive and well. There’s a small group of students who are quite active there, which definitely lifts a weight off my shoulders—I often feel like I’m not the best at online communication with students, so it’s encouraging to see engagement. Hopefully we can keep that momentum going.
Besides the national on-site qualifier, we also launched a small Kaggle competition as an extra step in the selection process. This online challenge gave students two hours to solve a task without heavy supervision. The goal was to see how well they could navigate Kaggle, open a notebook, run it, and tweak the starter code provided. The task was a binary classification problem evaluated by ROC AUC, and students competed live on a public leaderboard. The dataset was fully synthetic and centered around university admissions—a little side project I built myself for this purpose.

Snippet of the Leaderboard. Photo: Me 😊.
Online Round
The code behind the task was admittedly a bit convoluted, but intentionally so. I aimed to create a problem that was approachable yet challenging, where students could achieve a high ROC AUC score with smart application of ML models. I incorporated geospatial data using a GeoJSON file and included a key feature: the distance between a student’s home and the university they were applying to. In general, the closer someone lived to the university, the better their chances of admission.
Beyond that, I added a mix of features, some that had no real impact on the outcome, like gender or age, and others that had either positive or negative correlations with admission. I also introduced correlations between features using proxy variables, so the data wasn’t fully independent. From this setup, I generated a final admission score, applying a fixed threshold to select the top 8% and a probabilistic threshold for the next 33% to introduce a bit of noise into the dataset.
def random_county():
"""50% Zipf, 50% teljesen véletlenszerű megyeloszlás."""
county_list = list(county_centroids.keys())
if np.random.rand() < 0.5:
zipf_indices = np.random.zipf(a=1.3, size=len(county_list))
zipf_indices = np.clip(zipf_indices, 1, len(county_list))
return county_list[zipf_indices[np.random.randint(0, len(zipf_indices))] - 1]
else:
return np.random.choice(county_list)
def gen_score(a, t=0.5):
raw = np.clip(np.random.beta(1 + a * 10 + t * 3, 1 + (1 - a) * 3), 0, 1)
return int(np.round(raw * 100))
for _ in range(num_students):
age = np.random.randint(17, 20)
gender = np.random.choice([0, 1])
academic_apt = np.clip(np.random.normal(0.6, 0.15), 0, 1)
socioeconomic = np.clip(np.random.normal(0.6, 0.2), 0, 1)
motivation = np.clip(np.random.normal(0.6, 0.2), 0, 1)
humanities_tendency = np.clip(np.random.normal(academic_apt * 0.8 + motivation * 0.2, 0.1), 0, 1)
science_tendency = np.clip(np.random.normal(academic_apt * 0.8 + (1 - motivation) * 0.2, 0.1), 0, 1)
avg_grades = {
f'Osztályzat_{grade}': round(np.interp(np.random.beta(1 + academic_apt * 4, 2), [0, 1], [2, 5]) * 4) / 4
for grade in range(9, 13)
}
history = gen_score(academic_apt, humanities_tendency)
math = gen_score(academic_apt, science_tendency)
hungarian = gen_score(academic_apt, humanities_tendency)
chosen_science = np.random.choice(science_subjects, p=[0.5, 0.2, 0.3])
chosen_language = np.random.choice(language_subjects, p=[0.75, 0.25])
sci_scores = {s: gen_score(academic_apt, science_tendency) if s == chosen_science else -1 for s in science_subjects}
lang_scores = {s: gen_score(academic_apt) if s == chosen_language else -1 for s in language_subjects}
emelt_subjects = np.random.choice(all_possible_emelt_subjects, size=2, replace=False,
p=[0.2, 0.05, 0.1, 0.25, 0.05, 0.1, 0.15, 0.1])
emelt = {}
for subject in all_possible_emelt_subjects:
if subject in ['Matematika', 'Történelem', 'Magyar Nyelv és Irodalom']:
emelt[subject + '_emelt'] = 1 if subject in emelt_subjects else 0
elif subject in science_subjects and sci_scores[subject] != -1:
emelt[subject + '_emelt'] = 1 if subject in emelt_subjects else 0
elif subject in language_subjects and lang_scores[subject] != -1:
emelt[subject + '_emelt'] = 1 if subject in emelt_subjects else 0
else:
emelt[subject + '_emelt'] = -1
parental_edu = int(np.clip(np.round(socioeconomic * 4 + np.random.normal(0, 0.5)), 1, 5))
prestige = np.round(np.clip(socioeconomic * 8 + np.random.normal(1, 1), 1, 10), 2)
extracurriculars = int(np.random.rand() < humanities_tendency)
habits = int(np.clip(np.round(motivation * 7 + np.random.normal(0, 1)), 1, 8))
work_exp = int(np.random.rand() < (0.05 + 0.1 * (1 - socioeconomic)))
recommendation = int(np.clip(np.random.poisson(1.5 + motivation), 1, 6))
competitions = int(np.random.rand() < (0.1 + 0.5 * academic_apt * motivation))
county = random_county()
lat, lon = county_centroids[county]
distance = haversine(lat, lon, *uni_coords)
stress = 1 - np.tanh(0.4 * habits + 1.2 * competitions + np.random.normal(0, 0.2))
stress = np.clip(stress, 0, 1)
data.append({
'Életkor': age, 'Nem': gender, **avg_grades,
'Történelem': history, 'Matematika': math, 'Magyar Nyelv és Irodalom': hungarian,
**sci_scores, **lang_scores, **emelt,
'Szülői Végzettség': parental_edu, 'Középiskola Presztízse': prestige,
'Extrakurrikuláris Tevékenységek': extracurriculars, 'Tanulási Szokások': habits,
'Munkatapasztalat': work_exp, 'Ajánlások Száma': recommendation,
'Versenyeken Való Részvétel': competitions, 'Vármegye': county,
'Távolság': distance, 'Stressz Szint': stress
})
df = pd.DataFrame(data)
Code: Feature Engineering.
The scores were calculated using a nonlinear formula, using several nonlinear functions into the final score. This design meant that more complex models were required to capture the underlying patterns effectively.
score_list = []
county_bias_map = {'Budapest Vármegye': 0.5, 'Zala Vármegye': -0.2}
for _, r in df_score.iterrows():
bias = county_bias_map.get(r['Vármegye'], 0)
score = (
6.0 * np.tanh(r['Matematika']) +
4.5 * r['Matematika_emelt'] * r['Matematika'] +
3.0 * r['Fizika'] +
3.0 * r['Informatika'] +
3.0 * r['Informatika_emelt'] * r['Informatika'] +
2.0 * r['Fizika_emelt'] * r['Fizika'] +
2.0 * r['Versenyeken Való Részvétel'] +
2.0 * np.tanh(r['Ajánlások Száma'] / 2) +
2.5 * np.sin(r['Tanulási Szokások'] * np.pi / 8) +
2.0 * r['Középiskola Presztízse'] +
1.5 * np.sqrt(r['Osztályzat_11'] + 1e-3) +
2.0 * np.sqrt(r['Osztályzat_12'] + 1e-3) +
0.8 * r['Munkatapasztalat'] -
4.0 * np.sqrt(r['Távolság']) -
2.5 * r['Stressz Szint'] +
bias
)
score_list.append(score)
scores = np.array(score_list)
Code: Score Calculation.
The Kaggle competition went well, and we ended up with a very promising leaderboard. It’s important to note that the final scores from this online round didn’t carry over to the on-site National Qualifier, it served primarily as a filtering stage to ensure participants could meet deadlines and handle the basics. Shortly after the online round, we held the on-site qualifier for the remaining 14 students, who faced challenges across key areas: Machine Learning, Computer Vision, Natural Language Processing, and Reinforcement Learning.
Side Quest
I had the lovely opportunity to give a talk about the Olympiads at the 2025 INFO Éra Conference in Hajdúszoboszló. My 30-minute presentation focused on student success stories, the opportunities these events create, and the broader mission behind our work.
The organizers were truly some of the kindest people I’ve met, we were warmly welcomed, treated to delicious food, and even surprised with some backstage pálinka to wrap up the session. It was a perfect way to end our section of the event. Beyond the lecture itself, it was also a great chance for me and my colleagues to travel a bit and promote what we do in a relaxed, welcoming environment.

Photo: László Gulyás (ELTE).
National Qualifier
I was primarily involved in organizing our national qualifier**, focusing on coordinating the coding exercises and supervising the preparatory process. Our core idea, which we stayed with, was to include four major coding exercises, each covering one of the following domains: Computer Vision, NLP, Machine Learning, and Reinforcement Learning. This was preceded by a 60-minute theoretical written section as the first part of the national qualifier.
I believe this format worked well, especially considering that international competitions like IOAI and IAIO focus heavily on these domains. However, a key decision that put us in a difficult spot was limiting the coding section to just two hours for all four exercises. Our intention was that students wouldn’t be able to complete all exercises, as we allowed them to use Gemini 2.5 Flash throughout the coding part. We suspected that giving a full three hours would result in scores with very little variation. In hindsight, the two-hour window turned out to be too short and didn’t align well with most students’ coding styles.
To ensure fairness, we restricted the use of Gemini to the 2.5 Flash model only, and we encouraged students to work in Google Colab Notebooks. We also limited GPU access to T4 instances to maintain a level playing field. Administratively, the qualifier went smoothly without any major issues.
Finding the right format for the national qualifier has been a challenge last year**, was a challenge this year**, and I suspect it will remain a challenge next year as well. Balancing GPU access, AI tool usage, and the difficulty of exercises to match the students’ skill levels is no easy task. I do believe we were closer to an acceptable format this year compared to last year, but there’s still room for improvement.
One thing that hasn’t changed is the enthusiasm and smiling faces of the students**, which I always look forward to during these competitions. I hope there will be many more opportunities in the future where I can contribute to organizing such events.
Photo: Imre Molnár (ELTE).
The exercises prepared for our national qualifier can be found here:
Exercise | Resources |
---|---|
Petike és a Paraméteres Paletta (Computer Vision) |
![]() ![]() |
Klasszifikáló Klón (Machine Learning) |
![]() ![]() |
Epikus Emojik (Natural Language Processing) |
![]() ![]() |
Katakomba Kaland (Reinforcement Learning) |
![]() ![]() |
One aspect I’m particularly proud of is the Reinforcement Learning exercise, for which I developed a custom Gym environment packaged and published as a standalone Python module: creepy-catacombs-s1. I’m excited to continue improving this environment in future editions of the national qualifiers.
Summer Camp
Organizing nearly every aspect of a summer camp centered around the Olympiad was an entirely new experience for me. I’m not an event organizer by training, so I mostly did things my own way, improvised where needed, which, in the end, resulted in a fully functional and (thankfully) successful camp.
I was responsible for the location, food options, the agenda, keynote speakers, session topics, communication with the mentoring team, as well as directly coordinating with the students. On top of that, I handled team t-shirts, preparations, and the take-home exercises, especially since I served as Team Leader 2 for IOAI this year.
The camp was tailored for our two teams (8 students in total) and our main focus was on the take-home exercises, brainstorming ideas and directions around them. With all the organizational overhead, I was often running on fumes, feeling a bit of vertigo from the constant pressure, but I did my best to hold my ground.
The students were, once again, an absolute joy to work with: fun and inspiring. Thankfully, our final day (Sunday) was a day off for me, which gave me a chance to catch my breath. I do wish I could’ve done a bit more, but I had definitely reached my physical limit by then.

The back of our IOAI team t-shirt. Photo: Me 😊.
The National Olympiad
This year’s International Olympiad in Artificial Intelligence will take place in Beijing, China, from August 2nd to 9th. The format has undergone a major shift, moving from a team-based competition to a fully individual one. However, the collaborative spirit lives on through an additional team round, which, while not influencing individual scores, encourages creativity.
A major highlight of this year’s competition is the use of Mujoco’s simulation platform. Students will work on embedded AI applications using this tool and present their solutions during the event.
Another key change is that the take-home exercises no longer contribute to the final score. Despite this, I believe they remain a valuable component of the Olympiad. Given that most students are not formally introduced to AI in high school, these preparatory tasks provide much-needed context and practice. For further details, refer to the organizer’s website: [IOAI 2025]
The Flight
This one was a doozey. I had never really thought about how demanding it would be to sit 12 hours straight in a cramped space with my knees pressed in. Sitting in the E row of a Boeing 747-8 meant I basically had to wake up my neighbors every single time I wanted to stand up. Our Air China flight itself was otherwise uneventful, everything worked as expected, and the food actually tasted pretty good, well above my expectations.
An interesting moment came about an hour before landing at Beijing International Airport, when the cabin crew handed out immigration documents. To say the least, they seemed to ask for every single piece of information possible about us. The funny part was that when we finally got to immigration, the hall was completely empty. Only our group was there, so the whole process for the ten of us took no more than ten minutes. Totally unexpected, and it left a surprisingly welcoming impression.
After immigration, everything was a piece of cake. The airport is professionally laid out, with English everywhere, so finding your way around was no issue at all.

Us at Beijing International Airport. Photo: IOAI 2025 Organizers.
The Weather
The scorching heat combined with nearly 90% humidity hit us instantly. It felt like stepping into a Finnish sauna just as it starts heating up. As we soon learned, this weather is pretty much standard throughout August in China, so there was no hope of cooler days during our seven-day stay.
For me, though, the Chinese climate was actually more bearable than back home in Hungary, simply because of the lack of pollens I’m allergic to. Being able to breathe freely, even with humidity through the roof, was an amazing feeling. By the end of the week, swapping out T-shirts two or three times a day became the norm. Luckily, air conditioning is almost everywhere, which made things much easier to handle.

A rather gloomy, but calm Beijing afternoon. Photo: Me 😊.
Beijing National Day School (BNDS)
I honestly can’t put into words how welcoming, positive, and friendly everyone was at BNDS, the school that hosted our students in its dorms. Since we were the first team to arrive and check in, we probably got the best treatment of all and it truly felt like everyone was always available and ready to help.
The school itself had just about everything you could imagine, even a rope-climbing and bouldering wall. I quickly befriended the local climbing teacher at the school gym, despite the fact that he didn’t speak a word of English and I didn’t speak a word of Chinese. Somehow, we still managed to communicate, and at one point he even invited me to join one of his climbing classes. He also gave me some liquid chalk and challenged me on the monkey bars to see how fast I could get across.

Chinese orange cat on campus in the scorching heat. Photo: Me 😊.
The school cafeteria and convenience store were both great. The food was decent, and most groceries were incredibly cheap compared to what I’m used to.
I also got to try out their sports facilities, which were impressive: four basketball courts, three football fields, and no less than twenty ping-pong tables. One afternoon I even ended up playing cards in the school library, which felt on par with a university library back home in Hungary.
The Dorms
Team leaders were stationed in a hotel about 12 km away from BNDS, but I still got to experience the dorms for a night when I snuck in and slept in one of our contestants’ rooms. The beds were rough and rock-solid, but since I’m used to sleeping on the floor, I actually found them more comfortable than expected.
The rooms had pretty much everything you’d expect from a dorm, on par with what you’d find at a Hungarian university. One curious detail I learned was that the sink and shower water allegedly contained heavy metals like lead (?!). That struck me as very strange, so I avoided washing my face and hair with it. Fortunately, each floor had a machine that dispensed both hot and cold drinking water, which made things easier.
And then there was the highlight: one of our contestants somehow found a cigarette-shaped hug pillow. That was the moment I realized the students at BNDS weren’t so different from Hungarian students after all. Same sense of humor, same attitude.

A fat rip. Photo: Vince Ungár.
The Hotel
Our team leader hotel, Wanshou Hotel Beijing, was rated four stars, though I’d say it felt more like a solid three. Maybe it truly was four stars… about 20 years ago. Don’t get me wrong, it had everything you’d need for a comfortable stay, but the rating scale definitely felt different compared to what I’ve experienced in places like Saudi Arabia.
Some things didn’t quite live up to expectations: the pool and gym facilities were closed (also a familiar sight from Saudi hotels), and our toilet had a faint sewage smell that was a bit unsettling. The room itself also showed some mold in spots, but with 90% humidity, keeping a building completely mold-free must be an uphill battle.
On the bright side, the beds were great, and the food was spot on with plenty of fruit options every day. One day they even served ice cream that came surprisingly close to authentic Italian gelato, which was an unexpected treat.

A glimpse into our hotel room. At least the smell is not visible. Photo: Me 😊.
Cultural Programs
The cultural programs organized by the host committee were nothing short of amazing, well thought out and smoothly executed, without any major hiccups. Naturally, there were a few events I didn’t connect with as much. On our first days, for example, we visited a technology center. While our guide did their best, everything was written in Chinese, which made free exploration nearly impossible. The exhibition was mostly a showcase of China’s technological innovation and advancements, half of which felt more like flashy “gaslighting” than real innovation, but still, it was impressive in its own way.

Holowness in extravagance. Photo: Me 😊.
One of the highlights was experiencing traditional Chinese opera. Not only did we get to watch a performance, but we were also given the chance to try it ourselves putting on opera costumes, learning a few movements (badly, in my case), and painting napkins with traditional designs. I chose yellow, the emperor’s color, which according to our guide could historically only be created for imperial robes. The dye itself came from dried gardenia plants, mixed with turmeric and pagoda tree flowers during the Ming and Qing dynasties.

Whatever this came out to be. Photo: IOAI 2025 Organizers.

First choice: starts on red. Classic. Photo: Me 😊.
Another standout was a lively evening in Haidian Park. The park was spotless, grass trimmed with scissor, like precision, cicadas singing all around, and we enjoyed free food, drinks (sadly no alcohol), and great music. Two art expos added to the charm: one focused on AI-generated art, the other on traditional Chinese block printing and calligraphy.

Broccoli tree in Haidian Park. Photo: Me 😊.
Our final organized outing was the Summer Palace, also in Haidian. And what an experience that was. The heat was brutal, but somehow it didn’t bother us at all. The place was packed with tourists (mostly Chinese) but unlike at home, the crowds didn’t ruin the experience for me. We started off with Team UAE and Team Pakistan, but halfway through they gave up, retreating to malls and AC-cooled dorms. That turned out to be a blessing: since our group was last in the rotation, our guide let us explore freely with the two volunteers assigned to the Hungarian teams. It meant we could wander at our own pace, linger where we wanted, and even climb up to the Palace itself (apparently harder for foreigners to get tickets for than passing immigration). We did lose track of our contestants four times during the adventure, but miraculously, everyone made it safely back onto the bus in the end.

Was really cool to see all the boats on the lake from the top of the Summer Palace. Photo: Me 😊.

A shot of us while approaching the palace on a boat. Photo: Random Awesome Chinese Person.
Exploring on Our Own
Outside the official program, we tried exploring Tiananmen Square. What we didn’t expect was that entry required tickets, even though they’re free. By the time we arrived, all tickets were gone, so we settled for wandering the surroundings. It was, honestly, a frustratingly linear experience: heavy security, barricades everywhere, and constant checks. We were stopped three times for passport and bag inspections. The only real highlight was a striking musical theater set on an artificial lake nearby, where we managed to take some pictures.

Professional photographer. Hit me up with inquiries. Photo: Me 😊.
We also ventured into a massive mall in Haidian District, which felt straight out of a utopian sci-fi movie. Seven floors, two cinemas, trampoline rooms, squash courts, basketball courts, endless food courts, and a dizzying number of shops. At the time, we were still skeptical of Chinese food, and without volunteers to help with the language barrier, we chickened out and tried Burger King instead. That in itself was an experience: ordering could require facial recognition, which immediately connected you to your Alipay account (please don’t). The food was cheap too: about half the price of Hungary. Still, one thing became clear: Western brands cost Western prices, but local Chinese brands were two or three times cheaper for the same quality. The wildest find was a refrigerator for only 40 euros, which would cost at least 200 back home.

Inside the monumental mall. Photo: Me 😊.
One particularly memorable outing was to the Buddha Temple, which I visited with my supervisor and the Romanian and Polish teams. Witnessing the Nepali Buddhist ritual firsthand was moving. With the locals’ help, I even mimicked parts of the ceremony, gaining a small but meaningful sense of spiritual connection. The complex had four temples, each representing a different stage of spiritual exploration, with countless offerings and plaques (some with English translations) making the symbolism easier to understand.

Burning incense at Buddha Temple. Photo: Me 😊.

A bustling street near Buddha Temple. Photo: Me 😊.
And then came the culinary highlight of the trip: Beijing duck. Our incredible volunteers organized a dinner at a local restaurant, far from the tourist crowds. We had our own private VIP room, quiet and tidy, where everything was freshly prepared for us. Even the passion fruit juice was squeezed in front of us. The duck itself was extraordinary, easily one of the best meats I’ve ever eaten. The chef carved it at the table into tender slices, while the rest was turned into a rich duck soup. Alongside it, we enjoyed bread with quince cheese and caviar, fish, pork belly, lamb, and countless other traditional dishes.

Caviar on top of quince cheese and bread. Photo: Me 😊.
The evening was full of small, beautiful moments: from hearing a nearby group of men singing a Chinese song (and playfully joining their applause), to ending the night with Beijing beer and uncontrollable laughter over the leaked source code of the Hungarian school administration system (KRÉTA). The infamous badwords.xml file (meant to filter swear words) was coded in the most hilariously clumsy way, with endless duplicates and bizarre entries like “nagyon segg” (“very ass”).

A highlight for sure after the award ceremony. Photo: Me 😊.
Before this trip, I wasn’t exactly a fan of Chinese food. But after experiences like this, I realized I had simply never found the right dishes for my taste. In Beijing, I finally did.
Beijing
Cultural shock, to say the least. The whole city felt incredibly green compared to what I’m used to in Hungary. Everywhere you look there are green spaces, between buildings, alongside cultural sites, even next to malls. An extensive watering system keeps it all thriving, and I noticed plenty of gardeners at work.
Although many of the buildings are monumental and monolithic, the greenery softens the stark, often grey architecture. The city itself is very walkable, with separate lanes for public transport and bicycles. What struck me most was the absence of things I take for granted in European cities: I didn’t see a single homeless person, no shady figures, not even an alcoholic on the streets. The infrastructure is impressive, modern and efficient, though the sheer number of people makes traffic a constant challenge.

A tiny but cozy street in Beijing. Photo: Me 😊.
The Event
The second edition of IOAI was an incredible experience, from the host school to the overall organization. Our team was lucky to be paired with two amazing volunteers, Linlan and Marilyn, who were available for us 24/7 on WeChat. They helped our students navigate the campus, stay on schedule for events, and overcome language barriers. Along the way, we exchanged songs and movies, got to know each other’s cultures, and formed real friendships. Saying goodbye was tearful but joyful. We truly hope to see them again in Hungary, where we’d love to return the hospitality. Thank you for everything, Linlan and Marilyn! You were the best!
The competition kicked off with the Team Challenge, a robotics task set in a MuJoCo environment. Teams had to use the Galbot framework, pathfinding, and inverse kinematics to locate objects, pick them up, and place them in a target zone in sequence. Out of 60 teams, 10 qualified for the live Galbot round, including our Team 1. The live round was organized with impressive precision: each team had its own environment, objects, and dedicated helpers who reset robots and equipment. The final event was timed, with the jury scoring both accuracy and speed. Our students performed brilliantly, finishing 4th overall 🏅, just missing the podium. The result was especially impressive given that the Galbot challenge came immediately after the grueling 10-hour individual contest. Competing for 12 straight hours in one day is no small feat, and seeing our team push through with such determination was inspiring.
The individual rounds began with task translations at BNDS, starting at 7:00 AM, meaning team leaders had to be up by 5:00 AM. The first day was a nightmare: each country received a machine-translated version of the tasks, and the Hungarian version was a disaster. I had to rewrite nearly every second sentence of a 26-page document in just two hours. Another frustration was that countries with two team leaders weren’t allowed to work together, putting smaller-language nations at a disadvantage. After raising this with the organizers, the rule was adjusted, and on the second day both team leaders could participate. Thankfully, because only then were we able to complete the translation on time.
The individual competition had mixed reviews, mostly because of the platform: Bohrium. It became the bane of everyone’s existence. Computing nodes crashed, VSCode wouldn’t run, packages failed to install, and uploads either froze or sat in queue for hours with no feedback. It was a universally frustrating experience, though in some sense that leveled the playing field, since everyone suffered almost equally.
The tasks themselves were a mix of excellent and questionable. The worst was a toilet-sign classifier with a test set of only 10 datapoints, two of which were rare outliers. The scoring was normalized between the lowest and highest performer: anyone who got the baseline 8/10 correct scored zero, while the single student who hit 10/10 scored a perfect 100. This design massively skewed results.
On the other hand, some tasks were creative and well thought out. A semi-supervised learning challenge on fake vs. original antiquities required clever use of pseudo-labeling and clustering. Other problems covered radar data processing, density estimation, multi-label segmentation, and an inventive twist on the board game Concept. Instead of guessing a sentence from clues, students had to generate better clues for a model through an API. The most interesting part was that contestants could submit multiple hints, forcing them to design variation: different phrasings carrying the same meaning.
Overall, I’d rate the second edition of IOAI a significant improvement over the first. Yes, there were flaws, technical issues, translation headaches, and some questionable task design, but the passion and effort of the scientific committee were clear. They genuinely tried to make the event meaningful and to support the contestants as best they could. Despite the struggles, no one left with a sour taste. What shone through was the energy, dedication, and community spirit, exactly what an Olympiad should be about.

The second day of the Team Challenge. Photo: Me 😊.
The Closing Ceremony
The closing ceremony was truly top notch, held in a beautiful event hall with engaging talks and enjoyable programs. One of the most memorable moments came when the main developer behind the Bohrium system gave a presentation. To everyone’s surprise, his very first slide featured a meme created by one of our contestants on the community Discord, poking fun at Bohrium as “the stealer of a fun competition.” The room erupted in applause and it received the loudest reaction of the night, and for me it deserves its own honorable mention.

Our table at the closing ceremony (+ some polish snacks that were amazing). Photo: Me 😊.
As for results, our students did incredibly well: 2 silver medals 🥈, 4 bronze medals 🥉, and an additional honorable mention 🏅. For this, we owe thanks not only to our students but also to the entire organizing body, our contributors, and the dedicated private tutors who supported them along the way. During the evening, students also exchanged cultural gifts and stories, adding a warm, human touch to the formal ceremony. A special congratulations goes to our neighbors, the Polish team, who took home the absolute first place.

Our contestants in one lovely photo after the ceremony. Photo: László Gulyás.
End of the Line
In just one week, I experienced so many unique people, situations, and sights that I could easily fill an entire book. But perhaps that’s exactly the point of IOAI: to give everyone something unforgettable to take with them, a positive memory that lasts a lifetime.
感谢你,中国!

Our Hungarian delegation, completed by the volunteers who made the success possible with us. Photo: IOAI 2025 Organizers.
Onto the United Arab Emirates in 2026!
6117 Words
04/30/2025 (Last updated: 2025-08-27 16:43:01 +0200)
9935d47 @ 2025-08-27 16:43:01 +0200
← Back to posts