Alex Holton
Picture of Alex Holton

I'm a software developer based in Christchurch, New Zealand with a degree in Computer Science from the University of Canterbury.

GitHub LogoLinkedIn Logo
Picture of Alex Holton
Picture of Alex Holton

When I'm not programming, I enjoy fencing, a sport I compete in at a national level. I also referee fencing nationally and I had the privilege of refereeing at the 2024 Junior and Cadet Commonwealth Fencing Championships.


Technical Skills
Playwright
Playwright
I used Playwright in our group project for automated end to end testing of our web application. It tested for clicking inputs, loading pages and checking if data was entered when using the front end of our site.
Courses:
Python
Python
I learned Python in High School, where I used it for web development with Flask. Then at University I used Python in multiple courses to implement common algorithms and learn about network protocols and AI.
Java
Java
I first learned Java in my second year of University. I learned how to develop a basic gui application. Then in my third year I learned how to develop a web application with Springboot in a group project and about software development best practices like testing procedures.

My Projects
Picture of Swiss Tournament System
Swiss Tournament System

I made this program in React to help my fencing club run tournaments using the Swiss Tournament System. People can be entered using the input field at the top and removed using the cross next to their name. By clicking on the "Start Round" or "Shuffle Bouts" button, people are randomly assigned an opponent for the round, favouring opponents on the same number of points as them that they have not faced before. The winner is then entered by clicking on their name to highlight it. Once the results for the round are completed, the points table is updated, with the winners gaining one point and the tiebreakers being updated. The table is sorted first by number of points, then by the tiebreakers Strength of Schedule and Strength of Victory. Strength of Schedule is the first tiebreaker and is the sum of points scored by that person's opponents. Strength of Victory is the sum of points scored by people that person beat.

The program randomly selects a number of potential pairings, and then chooses the one that scores best against a number of metrics. The score will increase by one for every point difference between two opponents. It will increase by 1.5 for every time someone has an opponent they have already faced. It will increase by 1000 if a person who has already recieved a bye gets another bye to ensure that people can only have one bye. The program then selects the set of pairings with the lowest score.

GitHub Logo
Picture of Frog Problem Solver
Frog Problem Solver

I created this program for my grandpa to help kids visualise the optimal solution to the frog problem. In this problem, there are a number of red frogs and a number of blue frogs with a single lily pad in between. A frog can move forward (right for the red frogs and left for the blue frogs) on to a lily pad either directly in front of it, or by leaping over one frog. Frogs cannot move backwards or jump over multiple frogs at once. The problem asks for the fewest moves to get all of the red frogs to the right and all of the blue frogs to the left.

In this program, the red frogs are represented as R1, R2..., the blue frogs are represented as B1, B2... and the lily pad is represented using an underscore. It stores the state after each move as a list of strings, and each state is then added to a list. It then follows an algorithm to move the frogs, adding each state to the list of states as they change. If the process to find a solution takes more than five seconds, the program will terminate and only the computed moves will be displayed on the screen. The results are displayed using React-Window to ensure the browser doesn't need to load every state at once.

GitHub Logo
Picture of Flips Paper
Flips Paper

I wrote a program to help my grandpa with research for a mathematical paper he was writing. He had found some research into 'Flips', numbers that when multiplied by a specific number would result in the digits in reverse order (e.g 1089 * 9 = 9801). However, this research only covered flips in base 10, and he wanted to see if similar numbers exist in other bases. I wrote a Python program to find these numbers in other bases. The neighbouring screenshot is from one of many text files generated by my program. The linked website is a simplified web version of the program I was using.

The Python version of this program checks every number up to half of the number of digits it was calculating in a base, then finds the other half of the digits using the flip number and then checking to see if it is a flip. If the number is a flip, it writes the output to a file in the format shown in the image. I will link the paper here once it officially releases.