I have a lot of small projects from the many CS courses I've taken. Here are the most interesting ones.

- Machine Learning Models
- Created an Adventure Game in Java
- Numerical Analysis Implementation in Python
- Created an Uber Simulation in Python
- Implemented Huffman's Compression Algorithm in Python
- Simulated a File Visulaizer in Python
- Created Sokoban in Assembly
- Fall 2024 Courses

Over our Introduction To Machine Learning class, we built multiple ML models from scratch, including kNN, decision trees, linear and logistic regression, neural networks, naive bayes, random forest, k-means and bag of words. This included hypertuning and analyzing our results.

For our class project, we had to implement many of these models to classify cities by their characteristics. In particular, I created a model with 90% test accuracy.

This whole course was a great foray into simple Machine Learning and provides a great foundation for future ML endeavours.

Over our Introduction to Software Design course, we worked on a text-based adventure game. We built the base game in Java, then added UI via JavaFX, added more complex features and handling accessibility concerns. At the end, we customized our game while following the Agile methodology. In particular, I lead sprints and our team used UML and design patterns to streamline this process.

We turned our Adventure Game into a game role-playing a UTM student where we have to manage our health, intellect and charisma, all while trying to pass our final exams.

This project taught me how to use Java and get comfortable with the Agile methodology, UML, design patterns and working with others.

Over our Numerical Analysis course, we had to implement many algorithms discussed in lecture. Here's a list of some of the interesting algorithms I had to write for this class:

- A floating-point system with a radix of 2, precision of 4 and an exponent range of [-3,3]
- Whether a system of 3 equations has no, one, or infinitely many solutions
- Calculating the 2-norm and condition number of a matrix
- Solving linear least squares via Normal Equations
- Root finding algorithms via Bisection search, Fixed Point iteration, Secant method and Newton's Method
- FInding the minimum of an equation on a unimodal interval via Golden Section search, Parabolic Interpolation and Newton's Method

This course combined theory with code wonderfully. Alongside my data structures and algorithms class, this made me confident in my ability to code advanced and difficult algorithms.

In this project, we were asked to create a very simple Uber simulation. There were riders and drivers who each request more drivers and riders. Our simulation takes the list of requests that happen and runs the simulation given information about these events, riders and drivers.

We had to simulate time moving, a grid system and other restrictions in addition to information about drivers and riders. For example, drivers have a max speed and riders have a max patience.

This project implements simple Object Oriented Programming in addition to ADTs such as Priority Queues.

In this project, we were asked to implement the Huffman Compression algorithm. The Huffman Compression algorithm compresses files by minimizing the amount of bits necessary to represent a commonly occuring character/byte through binary tree magic.

Given a file, we were expected to build the Huffman tree that maximizes the compression for that specific file. Then, we had to compress the file using our Huffman tree. Finally, we had to decompress a compressed file. And indeed, it works astoundingly well on text files, as expected.

This project implements more Object Oriented Programming and recursion in addition to ADTs such as binary trees.

In this project, we were asked to visualize a folder on our local disk using treemaps. In addition to the original visualization, we were able to increase and decrease the size of visualized files (not changing original ones), delete, duplicate, copy and paste visualized folders and files.

Given a folder, we implemented the treemap as a tree and changed the tree as required. In this project, the problems regarding implemntation were the finer details such as selecting visualized files with our mouse, rather than the complexity of the project itself.

This project implements more Object Oriented Programming and recursion in addition to ADTs such as binary trees.

We used a program called Ripes that used the RISC-V32 architecture to build Sokoban. We control a character and have to push a box into a goal. While a simple concept, all the code was in assembly. I efficiently used memory registers to keep track of all the moving pieces, implement loops to keep the game running and implement a 2D array which is the game board.

In my Fall 2024 semester, I am taking:

- An algorithm analysis course where we learn even more techniques to solve problems in CS. We are learning greedy algorithms, dynamic programming, randomization, approximation algorithms and more.
- An introduction to databases course where we learn relational algebra, SQL, database design and more.
- A course on formal methods in software design to create code that is machine checkable for accuracy and correctness, all for use in mission critical softwares.