Freshman Year
Principles of Computer Science I
The course is a concept--oriented introduction to programming and algorithmic problem-solving principles.
Topics include top--down design; searching and sorting strategies; recursion; computational complexity and analysis of algorithms; and the limits of computation.
Aspects of computer organization; computer solutions to problems in graphics, user interfaces, and file manipulation.
Computer programming solutions to several laboratory exercises.
Tic Tac Toe
Create an interactive GUI to play a basic 3x3 Tic-Tac-Toe game. This was the final project of the semester, where we learned how to make GUIs in Scala, along with making a basic Tic
One Time Pad (OTP) Encryption
A One Time Pad (OTP) cipher is a method of encryption that is completely unbreakable (if done correctly). It is very similar to the "offset" or "Caesar" cipher that I did previously in class. However, instead of using the same offset for every character, in an OTP a different, randomly chosen offset is used for each character during encryption. Because the offsets are all different and random, without knowing which offsets were used in which order it is impossible to decrypt the message. In order to actually decrypt the message you must know what offsets were used, which are often called the keys.
Minesweeper
This was a script that generated a Minesweeper board. It accepted 3 user inputs from STDIN: the number of rows, number of columns, and number of mines desired for a random minesweeper game. I was able to generate a grid of any size and place the correct number of mines within the grid.
Principles of Computer Science II
Focus on object-oriented programming and the development of software to solve larger problems that can benefit from this approach.
Abstraction, polymorphism, multithreading, and networking.
Program correctness and program verification, algorithm analysis, and computational complexity.
User defined structures, data types. Abstract data types including stacks, queues, linked lists, trees, and heaps.
Computer programming solutions to several laboratory exercises
Space Game
This was a project we worked on over the course of the semester, slowly updating and improving it throughout the year. Written in Scala, it is essentially a Galaga-like game that features a ship that moves around the screen, shooting at enemies. It included different types of enemies and waves, as well as a time-reversal system that allowed the user to move back in time.
Unit Conversions
This was a very basic project in which we were to write a program that would take in a number and a unit, and convert the value into a different unit.
Deque and other Abstract Data Types
Throughout the semester, we created various Abstract Data Types in Scala. While we made the typical Stack and Queue, we also made a Double-Ended Queue, and a Double-Ended Priority Queue.