Computer Science is taught by Ms. Taricco. We learn Java and the course prepares us for the AP Computer Science A exam. We have worked with arrays, Java Applets, ArrayLists, loops, conditionals, etc.

We also worked on novel apps in the Apps for Good project, which is aimed at helping members of the community. My team decided to build an app to help food pantries and food-insecure clients. More details on the project can be found below.

## Line Art

One of my favorite programs was an Applet program that created a pattern consisting of repeating lines. It gave the illusion of being in 3D.

Check out my code and its output below:

## Bulgarian Solitaire

Another of my favorite programs is a simulation of a card game called Bulgarian solitaire. The premise of the game is as follows. Take a deck of cards with size n, where n is a triangular number. (Note: a positive integer n is called triangular if it can be represented as the sum of the first k positive integers, where k ≥ 1 and k ∈ ℕ. In other words, n = 1 + 2 + … + k.) Split the deck into some arbitrary number of piles, with a random number of cards in each deck. (Any configuration works here.) After that, we play a round of Bulgarian solitaire. To do this, we remove one card from each existing deck and group these removed cards together into a new pile. If a pile has 0 cards after a round, then it is no longer considered to be a pile. Then, the same action is applied to the new set of piles. This process is repeated until all the piles have sizes 1, 2, 3, …, k. Note that the piles are not necessarily in this order, though.

It has been proven that playing Bulgarian solitaire will eventually lead to a set of piles with sizes from 1 through k. It’s a rather curious property! I am interested in understanding why this always occurs.

I coded a program in Java that runs Bulgarian solitaire for any triangular number (the smallest being 1). An output for the triangular number 45 (which equals 1 + 2 + … + 9) is below.

See the code behind the simulation and its output below:

## Apps for Good

Problem

Food pantries in the U.S. face high demand and often do not have enough workers. This causes organizational issues with tracking food, as well as increases the demand on volunteers and management. Many food pantries lack a proper organizational system, and those that do often use different organizational systems, causing an inconvenience for clients. Competitors on the market either have inconsistent storage systems or have high setup costs.

Target Audience

Our app is targeted towards two main audiences. The first is food pantries, who use our application for organizing their inventory and handling clients. The second is food clients themselves, who see the pantries around them and the specific goods they offer. Overall, we wanted anyone in need of food to be able to access valuable information through this application.

Solution & MVP

Our application, Pantry Access, solves the problems mentioned above by serving as an inventory management system for food bank volunteers, allows for requests to flow between client and food bank, and prevents the use of inconsistent storage software.

For our minimum viable product, we provided a user interface and database (using Google Firebase and Firestore). This allowed us to contain multiple food banks in the website.

The three core features of Pantry Access are (in order of precedence):

1. Collect and manage the inventory of food banks into a database that tracks current inventory, quantities, and locations of the foods.
2. Allow clients to access and view the inventories of food banks through a user-friendly interface.
3. Create unique profiles for clients, food banks, or donors to foster stronger client-food-bank or donor-food-bank relations.

Design & Implementation

The upshot of the user interface is that food pantries can create inventories and share information about themselves to clients, as well as see and handle requests from clients. Clients, in turn, can browse information about the pantries and make requests to them.

Clients and donors begin with logging in or registering for an account. Next, they will be directed to their respective client or food bank web portal, where they can edit their profile, see food banks or their inventories, and make/see requests.

The web portal is hosted on Firebase, with use of the Firestore No-SQL database. Furthermore, the portal uses Firebase Authentication services to register and manage user accounts.