Programming Portfolio

Note: All of these projects can also be found on my Github profile.

//Naive Bayes Classifier

A Naive Bayes Classifier is a simple, but extremely powerful, machine learning algorithm used for classification. Built around Bayes’ Rule in Python, the classifier assigns classifications by estimating probability of an instance being of class C, by determining how probable it is that an instance of class C has the same attribute values as the test instance. This math is made much simpler by assuming that all of the attributes being tested are conditionally independent given class (an assumption that gives the classifier its “naive” name). While extremely simple mathematically and fairly simple to implement, the NBC is a powerful classification tool, and one which can serve as the foundation for a lot of algorithmic customization.

View the Naive Bayes Classifier source code here.

//CPU Simulation

This program uses a fairly simple configuration of pipes, along with a single fork(), to simulate a CPU along with main memory in C++, and simulate a simplified instruction cycle. Complete with a simple language of machine code instructions, segregated user and system memory and stacks, and even a rudimentary interrupt system, this simulation is a tool for understanding the fundamental operations of a computer. The machine code language allows for fairly complete programming, even allowing for some ASCII art.

View the CPU Simulation source code here.

//Trie Spell-Checker

This program utilizes a trie data structure to create a spell-checking application in Java, allowing a user to dynamically edit a dictionary of words, and to use that dictionary to detect the validity of a given input. Tries are commonly used in modern spell-checking software, due to the extremely quick speed with which entries can be added to the trie, and searched for within the trie (O(n) in both cases, where n is the length of the string being added/searched for). The Spell-Checker also proposes a list of alternative, correct words for every incorrect input.

View the Trie Spell-Checker source code here.

//Thread and Semaphore Experiment

This C++ project uses the metaphor of people entering and exiting an elevator to demonstrate the fundamental concepts of multithreaded programming, including using semaphores, and avoiding deadlocks. Mutlithreading is a powerful tool allowing programmers to maximize their usage of modern multiprocessor computer and OS design, but it’s also very easy to mess up, causing logically confusing programs or, worse yet, threads that simply prevent one another from progressing. The project is simple and requires no arguments, and outputs a simple text summary of the simulation.

View the Thread and Semaphore Experiment source code here.

//Rock, Paper, Scissors AI

This Java program plays Rock, Paper, Scissors with the user via a simple text interface. A simple AI drives the computer player, which is designed to develop a Markov Chain of the game based on repeated games against the human player. By playing many times with the same user, which is enabled by the ability to save and load the AI’s memory, the Markov Chain will eventually be a solid representation of the user’s play style, allowing the AI to properly counter the player input.

View the Rock, Paper, Scissors AI source code here.


This is a fairly simple, text-interface implementation of the game Mastermind, where the player attempts to guess an arrangement of white and black pegs as randomly generated by a simple function.

View the Mastermind source code here.