I used Claude to analyze my uni’s program-picker app.

On my own, this would have been a fleeting thought; with Claude, it turned into an investigation.

Introduction

Today, lunchtime conversation amongst the members of the KdVI was dominated by an email we received about a quiz that helps the future students pick their programs. It seems that no matter how hard people tried, they could not get the program to output Wiskunde as their top choice. For me, it was in the first few of the fourth batch of 15 results, so somewhere between 46th and 60th place.

Later, I decided to investigate how this game worked — with the help of Claude Code — which led to this whole rabbit-hole.

The Studyscanner quiz interface

The game is very simple.

  1. Students are given 20 pairs of words to choose between. This produces twenty ‘tags’.
  2. Each programme has some number of tags (about 9 on average). It then computes the percentage of the tags for the programs that the student picked and ranks the programs accordingly.
  3. It outputs the programmes in a Tinder-like format for students to swipe through.

Which tags does this game associate with math? We can answer it by looking at the code.

How I Downloaded the Files

When we view websites, the browser downloads client-side code and data that allow the page to be displayed and interacted with. This can include HTML, CSS, JavaScript, images, and data files such as JSON. Most of the time, this code runs inside the browser’s sandbox and does not infect your computer. Because the browser receives this code, we can often inspect it using tools such as “Inspect Element” or the browser’s developer tools. The Studyscanner quiz is not special in this respect.

So, I just went through the game and then downloaded the .js files that looked like they might be responsible for the game.

Finding the JavaScript file in browser developer tools (step 1) Finding the JavaScript file in browser developer tools (step 2)

These files were very long, so I used Codex and Claude to process the code and extract the tags associated with each programme and the 20 pairs of code words. Then, I compared them in SageMath to make sure they are the same.

The twenty pairs that the students are shown appear in Table 1.

Table 1: The twenty pairs of words; students must choose exactly one tag from each pair.
Option AOption B
mensdata
cijferstaal
wereld-verbeterengeld-verdienen
kunst-cultuurnatuur
debatterensocial-media
klimaatkinderen
bitcointheater
puzzelsboeken
creativiteitstructuur-regels
computercode-schrijvenkunstwerk-analyseren
lange-tekstenlaboratorium-werken
voorspellenmensen-helpen
lichaamgeest
mensenlijk-gedraggezondheid
romeinenrobot
klaskantoor
maatschappijindividu
nationaalinternationaal
veldwerkverschillende-dingen-leren
nieuwe-dingen-uitvindenadviseren

I also made a list of programmes and their tags, which can be found in programme_tags.csv.

Looking at the Tags in Detail

There are 55 distinct tags. But only 40 are shown to students, so there should be 15 ‘phantom’ tags — tags which do not appear in the quiz. In fact, there are 20 such tags. There are actually 5 tags which are shown to the player in the game, but which are not tags for any program. That’s right, students are asked about ‘bitcoin’, ‘kinderen’, ‘klimaat’, ‘robot’, and ‘veldwerk’, but they never appear in the tags of any program.

The twenty phantom tags are the following:

‘programmeren’, ‘toekomst’, ‘oudheid’, ‘mensen-coachen’, ‘Psychology’, ‘gelijke-kansen’, ‘politiek’, ‘eigen-bedrijf’, ‘Language and Communication”’, ‘Law and Economics (PPLE) [2]”’, ‘duurzaamheid’, ‘onderzoek-buiten’, ‘veel-rekenen’, ‘artificial-intelligence’, ‘moleculen’, ‘onderzoek-achter-je-bureau’, ‘Culture and Politics”’, ‘Technology & Innovation”’, ‘specialist’, ‘sterren kijken’.

No, I didn’t get confused; ‘Law and Economics (PPLE) [2]”’ is the name of a programme but it is also a tag for Politics.

We can do a frequency analysis of the phantom tags where we count how many programs have each phantom tag, see Table 2. The most common are ‘specialist’ and ‘politiek’; we can see which programmes are affected by having them as tags and present the full table of phantom tags and their programmes in Table 3.

Table 2: Frequency of phantom tags.
ProgrammesPhantom tag
20specialist
16politiek
8oudheid
8onderzoek-buiten
7artificial-intelligence
5moleculen
5gelijke-kansen
3toekomst
3onderzoek-achter-je-bureau
3duurzaamheid
2veel-rekenen
2eigen-bedrijf
1sterren kijken
1programmeren
1mensen-coachen
1Technology & Innovation
1Psychology
1Law and Economics (PPLE)
1Language and Communication
1Culture and Politics
Table 3: Phantom tags and their associated programmes.
Phantom TagProgrammes
specialistSign Language Linguistics (Taalwetenschap), Linguistics (Taalwetenschap), Religiewetenschappen, Spaanse en Latijns-Amerikaanse studies, Franse taal en cultuur, Hebreeuwse taal en cultuur, Griekse en Latijnse taal en cultuur, Muziekwetenschap, Duitslandstudies, Filosofie, Slavische talen en culturen, Scandinavie studies, Italie studies, Nieuwgriekse taal en cultuur, English Language and Culture, Arabische taal en cultuur, Kunstgeschiedenis, Oudheidwetenschappen, Nederlandse taal en cultuur, Theaterwetenschap
politiekGeschiedenis, Spaanse en Latijns-Amerikaanse studies, Franse taal en cultuur, Hebreeuwse taal en cultuur, Griekse en Latijnse taal en cultuur, Duitslandstudies, Europese studies, Slavische talen en culturen, Scandinavie studies, Italie studies, Nieuwgriekse taal en cultuur, English Language and Culture, Arabische taal en cultuur, Nederlandse taal en cultuur, Theaterwetenschap, Global Arts, Culture and Politics
oudheidArcheologie, Religiewetenschappen, Hebreeuwse taal en cultuur, Griekse en Latijnse taal en cultuur, Italie studies, Arabische taal en cultuur, Kunstgeschiedenis, Oudheidwetenschappen
onderzoek-buitenArcheologie, Geschiedenis, Muziekwetenschap, Nieuwgriekse taal en cultuur, Kunstgeschiedenis, Oudheidwetenschappen, Theaterwetenschap, Biologie
artificial-intelligenceWiskunde, Media and Information, Muziekwetenschap, Computational Social Science, Media en cultuur, Artificial Intelligence, Global Arts, Culture and Politics
moleculenPsychobiologie, Scheikunde, Biomedische wetenschappen, Science, Technology & Innovation, Biologie
gelijke-kansenCognition, Language and Communication, Europese studies, Filosofie, Literary and Cultural Analysis, Global Arts, Culture and Politics
toekomstMedia and Information, Europese studies, Media en cultuur
onderzoek-achter-je-bureauMedia and Information, Informatica, Literary and Cultural Analysis
duurzaamheidScheikunde, Global Arts, Culture and Politics, Biologie
veel-rekenenWiskunde, Artificial Intelligence
eigen-bedrijfInformatica, Media en cultuur
sterren kijkenNatuur- en Sterrenkunde
programmerenComputational Social Science
mensen-coachenCognition, Language and Communication
Technology & InnovationScience, Technology & Innovation
PsychologyPolitics, Psychology, Law and Economics (PPLE)
Law and Economics (PPLE)Politics, Psychology, Law and Economics (PPLE)
Language and CommunicationCognition, Language and Communication
Culture and PoliticsGlobal Arts, Culture and Politics

What does this mean for the game?

The Wiskunde program has 10 tags: artificial-intelligence, cijfers, computercode-schrijven, creativiteit, data, geld-verdienen, puzzels, structuur-regels, veel-rekenen, and voorspellen. There are 10 tags, but only 8 appear in the game; artificial-intelligence and veel-rekenen are phantom tags. So it looks like the maximum possible is 8, however one of the pairs is ‘creativiteit’ vs ‘structuur-regels’, of which the students can choose at most 1. Thus the maximum number of tags the students can choose is 7 out of 10, for a maximum of 70% match with this program.

This looks bad, but it is actually worse. Wiskunde cannot ever be the top choice for any student, no matter how they answer the questions, because “Econometrics and Data Science” has 8 tags (all of which appear in the game): data, cijfers, geld-verdienen, puzzels, computercode-schrijven, voorspellen, mensenlijk-gedrag, maatschappij. Six of these are the exact same tags you’re forced to pick for Wiskunde (to achieve our maximum match). So whenever we match with Wiskunde with the 70%, Econometrics automatically gets at least 6/8 = 75%.

Now we can compute the maximum percentage for each program. We need to find its number of tags, how many tags actually appear in the game, number of conflicts (pairs where both tags in the program), and compute the maximum percentage match possible. This is Table 4.

Table 4: Maximum match potential for each programme.
Programme Total tags In game Conflicts Max matches Max match %
Computational Social Science (6-tag)641350.0%
Global Arts, Culture and Politics1160654.5%
Biologie1071660.0%
Media en cultuur1071660.0%
Cognition, Language and Communication1181763.6%
Science, Technology & Innovation1081770.0%
Arabische taal en cultuur1070770.0%
Archeologie1081770.0%
Artificial Intelligence1081770.0%
Europese studies1070770.0%
Griekse en Latijnse taal en cultuur1070770.0%
Hebreeuwse taal en cultuur1070770.0%
Italie studies1070770.0%
Kunstgeschiedenis1070770.0%
Literary and Cultural Analysis1081770.0%
Media and Information1070770.0%
Muziekwetenschap1070770.0%
Nieuwgriekse taal en cultuur1070770.0%
Oudheidwetenschappen1070770.0%
Theaterwetenschap1070770.0%
Wiskunde1081770.0%
Politics, Psychology, Law and Economics (PPLE)750571.4%
Biomedische wetenschappen981777.8%
Duitslandstudies1080880.0%
English Language and Culture1080880.0%
Filosofie1080880.0%
Franse taal en cultuur1080880.0%
Geschiedenis1080880.0%
Informatica1080880.0%
Nederlandse taal en cultuur1080880.0%
Psychobiologie1091880.0%
Religiewetenschappen1080880.0%
Scandinavie studies1080880.0%
Scheikunde1080880.0%
Slavische talen en culturen1080880.0%
Spaanse en Latijns-Amerikaanse studies1080880.0%
Geneeskunde771685.7%
Medische informatiekunde771685.7%
Sociologie771685.7%
Universitaire Pabo van Amsterdam771685.7%
Business Administration881787.5%
Business Analytics881787.5%
Interdisciplinaire sociale wetenschap881787.5%
Onderwijswetenschappen881787.5%
Sociale geografie en Planologie881787.5%
Actuarial Science991888.9%
Economics and Business Economics10101990.0%
Information Science (Informatiekunde)10101990.0%
Linguistics (Taalwetenschap)1090990.0%
Natuur- en Sterrenkunde1090990.0%
Sign Language Linguistics (Taalwetenschap)1090990.0%
Beta-gamma (Natural and Social Sciences)9909100.0%
Communicatiewetenschap6606100.0%
Computational Social Science (9-tag)9909100.0%
Cult. antropologie en ontw.sociologie5505100.0%
Econometrics and Data Science8808100.0%
Fiscaal Recht7707100.0%
Fiscale Economie8808100.0%
Future Planet Studies5505100.0%
Liberal Arts and Sciences (AUC) [1]9909100.0%
Liberal Arts and Sciences (AUC) [2]9909100.0%
Pedagogische wetenschappen6606100.0%
Politicologie7707100.0%
Psychologie7707100.0%
Rechtsgeleerdheid7707100.0%
Tandheelkunde6606100.0%

Since no math note is complete without an exercise for the reader, I will leave it to the reader to find the other programs which, like Wiskunde, cannot appear as the top choice no matter how the user answers.

The programme most affected by this is Computational Social Science. It has 6 tags, but only 4 are in the game; artificial-intelligence and programmeren are never shown to the users. Even worse, students have to choose between ‘data’ and ‘mens’, so their maximum is 3, which is half.

A Bias in the Phantom Tags?

There are 20 programs with ‘specialist’ and 16 with ‘politiek’, with 13 having both. I’ve listed them here.

Table 5: Programmes with specialist and politiek tags.
Programmespecialistpolitiek
Global Arts, Culture and Politicsy
Arabische taal en cultuuryy
Duitslandstudiesyy
English Language and Cultureyy
Europese studiesy
Filosofiey
Franse taal en cultuuryy
Geschiedenisy
Griekse en Latijnse taal en cultuuryy
Hebreeuwse taal en cultuuryy
Italie studiesyy
Kunstgeschiedenisy
Linguistics (Taalwetenschap)y
Muziekwetenschapy
Nederlandse taal en cultuuryy
Nieuwgriekse taal en cultuuryy
Oudheidwetenschappeny
Religiewetenschappeny
Scandinavie studiesyy
Sign Language Linguistics (Taalwetenschap)y
Slavische talen en culturenyy
Spaanse en Latijns-Amerikaanse studiesyy
Theaterwetenschapyy

It would appear these are all humanities courses, which raises questions about how the tags were assigned.

Conclusions

Choosing a study programme is an important decision for prospective students, and tools like this can shape their first impressions. The analysis shows that the quiz has some structural issues worth addressing — phantom tags, conflicts, and uneven coverage mean that some programmes are systematically disadvantaged in the rankings.

Beyond the structural issues, the tag choices themselves are worth revisiting. My personal tags as a mathematician would include: puzzels, creativiteit, nieuwe-dingen-uitvinden and, evidently, computercode-schrijven, but also mensen-helpen and gelijke-kansen.

Both "structuur-regels" and "creativiteit" are tags for math, so putting them in the same question sets up a bit of a false dichotomy. Wordsworth's sonnet "Nuns fret not at their convent's narrow room" advertises the sonnet, with all its rules and structural constraints, as a vehicle for creativity. No one would say Mozart was not creative because he wrote in sonata-allegro form. Across literature, music, and mathematics, some of the most interesting work comes from creativity within constraints, not in spite of them.

The mathematical community is known for being welcoming to people who may feel like outsiders in other settings. And, as we see here, the same critical thinking that powers mathematics can also be used to question how things works — even in a lighthearted quiz.

AI Usage

I used Claude Code to guide me through downloading the .js files and to extract the data I needed. I also used it to preview the findings. However, all results presented in this note, including the tables, were (re-)computed by me independently in SageMath.