Other Projects

Floodfill maze solver

Inspired by a video posted by a youtube channel called Veritassium, I created a maze solver that attempts to explore as little of a maze as necessary to find the shortest route to the goal. This solver enters the maze knowing nothing of the maze and sees only the walls immediately next to it. To implement this project I first had to procedurally generate a good looking and difficult maze. This took almost half the time I dedicated to the project to get right. The second part of the project, making the solver, was done using my own implementation of a flood fill algorithm. (the dotted line is the fasted path found yet and it is made using A* or Dykstra's algorithm.

Wordle Solver

After the Wordle became a phenomenon in early 2022, I wanted to make program to play the game. I did this successfully but inefficiently. The program would simply have a list of possible words, guess a word from that list. Using the clue, it would remove all of the words that clue eliminated and guess another word from that list until it was successful. This worked fine and was fast but it certainly wasn't optimal. 

A year later I was inspired to try again, but this time with the goal of having the program make a far more optimal guess. It functioned much like the previous iteration, but this time calculated how each guess and result combination would effect the resulting list of options. This significantly optimized it's strategy. 

(Here you can see it make the unusual guess "tumps", presumably to test the consonants T,M, and P)

Keypad Code Generator

For this project I was in a class focusing on combinatorics. I came up with a problem that seems simple but is far from it. I spent plenty of office hours with my professor working on a solution. 

The problem is this, You want to know how many possible combinations might need to be tested to break into a keypad combination lock. You can see, from wear and tear, which keys must be a part of the combination. You also happen to know the length of the combination. So given "k" keys are in play, and the combination has a length of "l", how many combinations could there be.

I wrote this program to determine what the correct answer would be so that any formulas my professor and I came up with could be tested. The program would simply create a list of all the correct combinations and give us the length of that list. Unfortunately it proved difficult to do this because the size of that list went up drastically due to the factorials somewhere in the elusive formula. Generating all 12 digit numbers and eliminating those that didn't work was simply not an option. I ended up conceiving of a recursive algorithm that could generate the list without doing any redundant work. 

This helped my professor and I in finding a solution. There was no simple formula that could solve the problem, but I found an algorithmic approach to creating a case-specific formula that could calculate the correct solution.

Stable Matching Visualization

Having just learned about stable matching, I was still struggling to understand exactly how it worked. When I struggle to understand an algorithm or concept I find it best to try to create my own implementation of it so I will have explored every part of it. This is one of many projects where I implement something I learned in class on my own time to deepen my understanding. So for this I created an animated stable matching program where the color of a dot shows its satisfaction with its pairing. Proposers are shown on top, while proposees are underneath.

Most traversed path

This was my first-ever attempt at making a maze solver. At this point I was not familiar with any graph traversal algorithms at all. Given a grid of obstacles, I wanted my program to find the shortest path. I did this using what I now know to be BFS. I realized that I could let it do this many times overnight, with a new start and destination each time, and i could color the squares by how frequently they were traversed. The result was a program that showed the optimal layout for highways and roads for the given map.