Projects

School

IB Computer Science IA

IAImage

Organization: IB Computer Science, Upper Arlington High School


Language: Java


The objective of the IA was to design, implement, and document an algorithm for a client. My client was looking for a way in which to accurately and quickly determine whether a series of rectangular designs could be fit on a printing sheet and leave the sheet able to be guillotine cut.


As head of the Chroma Department of Art Brands––a company that prints designs on to fabrics––my client needed a way in which they and their employees could easily and quickly estimate whether a series of designs could fit on a printing sheet, beyond solely calculating and comparing the areas. My algorithm utilizes the guillotine cut requirement to simplify the solution. Guillotine cuts by nature are recursive, cutting across the entirety of the sheet. Following this process when a design gets placed on a sheet, the design is "cut" out using guillotine cuts, creating two smaller sheets in the process. This recursion continues until all designs are placed on a sheet, in which case they fit, or there is no sheet that fits at least one of the designs.


The process can be conceptualized in terms of a tree where each node is placing a design on a sheet. This tree grows very large very quickly, so some heuristics were applied to choosing designs and the order of the designs preventing the algorithm from checking every branch of the tree.


[GitHub]

Maze Escape

SoftwareDesignProjectImage

Organization: Foundations of Engineering Honors, The Ohio State University


Language: C++


The objective of Maze Escape itself is to get the cyan block from the yellow square to the red square in the shortest time possible. There are 3 difficulties for the player to choose between, and only after completing the maze may the player return to the home screen.


The objective of the project was to, with a partner, create a game that used our knowledge of the C++ language to fulfill specific requirements and make a game that was fun for children and would improve thier critical thinking, problem solving, and spacial reasoning.


There are 6 mazes: 3 for Easy Mode, 3 for Medium and Hard Modes. Each maze is stored in a file and is randomly selected when the player picks a difficulty. Cells in the maze are stored as integers 0-15––numbers corresponding to wall configuration. Since 3 mazes do not provide enough randomness for the game to provide long lasting fun, the start and end blocks are also randomized.

Easy Difficulty: Mazes are 10x15 blocks.

Medium Difficulty: Mazes are 20x30 blocks (4x bigger than Easy Difficulty).

Hard Difficulty: Mazes are 20x30 blocks, AND the player cannot retreat without resetting to the beginning.

Note: Collisions with walls are punishing at all difficulties, resulting in the player being reset to the start.


[u.osu Website]


Personal

Dice Game

Project Image

Organization: Personal


Language: Java


A game created for the stats nerds.


Rules of the game are: you (the player) have 6 types of dice––4-sided, 6-sided, 8-sided, 10-sided, 12-sided, and 20-sided. If the dice rolls a 1 it is removed from the play, however if it rolls the maximum number possible for that type of die then another die of that type is added. The goal is to guess which which type will be the last one standing.


This project is a simulation of this game, created orignally to analyze the probabilites of each type winning. However there are several more intriguing statistics that can be gleaned from the game. The chance of ties, average length of games, and average number of rounds each type took to win are examples of statistics I used data from the simulation for. These statistics also change when the amount of each type of die at the beginning is changed.


[GitHub]