A profile picture of Josh Heng

Josh
Heng

Featured image of GCSE Grader

GCSE Grader

Written by Josh Heng on
EducationWebsiteEntertainmentProgramming

The Covid-19 pandemic has led to the cancellation of almost everything, including GCSEs and A-Levels in the UK. Instead of us sitting an exam, our teachers were asked to submit what they thought each pupil would get, which would then be put through a mysterious algorithm which would standardise them nationally.

This led to lots of uncertainty, especially for schools which had not done so well in the past. I was joking around about it on a Discord server when a user by the name of Picapi had the brilliant idea of making a slot machine which would do an equal or better job than this algorithm...

...and a day later, I had a completed product!


I knew that this would be done client side in JavaScript, but at first I overcomplicated it by trying to utilise React and Vue. I soon realised, however, that this was overkill and decided to go with simple HTML/CSS/JS without any compiling or server rendering.

It began with a basic slot machine design with just three slots, but I went through multiple iterations to then improve the product further:

  • Allowing users to choose their own subjects
  • Allowing users to enter their predicted grades which would weight the grade allocation algorithm
  • Making the site responsive
  • Persisting the users' input in local storage
  • Adding sound effects
  • Generating a fake 'printout' with the results

For the grade allocation algorithm I used percentages from previous years and weighted it by the user's predicted grade. I made it impossible to get higher than the predicted grade and multiplied grades below that in a scale.

This is the end result. I was pretty happy with it, although the code could do with a bit of tidying up.

Oh, and it's also open source on GitHub if you want to take a look at how it works in the background. As there is no compilation, though, you should be able to see all the source straight from the browser.