Nellie Mullane

UC Berkeley Computer Science and Mathematics student

Languages

TypeScript, JavaScript, Python, Ruby, SQL, HTML, CSS, Java, C, C++, Go, Julia, MATLAB, x86 Assembly, RISC-V Assembly

Technical Skills

Next.js, React, PostgreSQL, Ruby on Rails, Socket.io, Git, Cucumber, JUnit, SIMD, OpenMP, OpenMPI

My Favorite Projects


note: some of the demos of the below projects are under construction!

AlgoRacer – Real-Time Multiplayer Coding Race

Jan 2025 - Present (Personal Project) Full-Stack Web Application – Next.js, React, TypeScript, PostgreSQL, Socket.io



Skills: Next.js, React, TypeScript, PostgreSQL, WebSockets, Socket.io, Authentication, SMTP, Cloud Deployment


Check Out the website and Enter a Race! : Visit AlgoRacer 🚀

Action Map Website Development

Jul 2024 - Aug 2024 (Associated with University of California, Berkeley) CS 169A: Software Engineering– Ruby on Rails, JavaScript, HTML



Skills: Ruby on Rails, JavaScript, HTML, Team Management, Web Development, CI


NGram Viewer

Oct 2022 (Associated with University of California, Berkeley) CS 61B: Data Structures – Java



Skills: Java, Data Structures

Computer Graphics Projects

Jan 2024 - Apr 2024 (Associated with University of California, Berkeley) CS 184: Computer Graphics – C++



Skills: C++, Computer Graphics


Build Your Own World

Nov 2022 - Dec 2022 (Associated with University of California, Berkeley) CS 61B: Data Structures – Java



Skills: Data Structures, Java


Optimized Matrix Convolution

Apr 2023 - May 2023 (Associated with University of California, Berkeley) CS 61C: Great Ideas of Computer Architecture – C Programming



Skills: C, SIMD, OpenMP, OpenMPI

Secure File Storing and Sharing Platform

Mar 2024 - Apr 2024 (Associated with University of California, Berkeley) CS 161: Computer Security– Golang



Skills: Go, Cybersecurity

Tiger Team: Identifying Web Server and Codebase Vulnerabilities

Jan 2024 - Apr 2024 (Associated with University of California, Berkeley) CS 161: Computer Security – x86, SQL



Skills: x86 Assembly, SQL, Cyber Defense

Build CPU

Mar 2023 - Apr 2023 (Associated with University of California, Berkeley) CS 61C: Great Ideas of Computer Architecture – RISC-V, Logisim



Skills: RISC-V, Logisim, Computer Hardware

Zero Approximation Algorithm

Nov 2022 (Associated with University of California, Berkeley) Math 128a: Numerical Analysis – MATLAB



Skills: MATLAB

Creative Logic and Mathematics

Cantor Set Proof


My proof addresses the claim: "The Cantor set is compact and equal to the set of its cluster points."

This proof seeks to go beyond standard explanations of this claim by eliminating logical jumps and ensuring all claims are rigorously justified.
That is, many proofs of this result rely on statements that are left unexplained or are considered "trivially true," which I sought to avoid entirely.

The Cantor set is an interesting mathematical construct that, despite being uncountably infinite (having a cardinality equal to that of the real numbers), possesses a Lebesgue measure of zero, meaning it occupies no length on the number line. This paradoxical nature—being vast in terms of cardinality yet negligible in measure—offers profound insights into set theory and the concept of infinity.

In less mathematical terms, this claim states that the Cantor set is both well-contained within finite boundaries and made up entirely of points that are "densely surrounded" by others, even as we zoom infinitely into its structure.

Key terms explained in the proof include:


You can view the full proof below:

View Cantor Set Proof (PDF)

Turing Machines


the following sections are Turing Machines that I designed and Implemented!

A Turing machine is a theoretical computational model that manipulates symbols on an infinite tape according to a set of rules. It serves as a fundamental concept in theoretical computer science, helping to define the limits of what can be computed.


Key Components:


The Turing Machines I have implemented can be categorized into two types:


For a more detailed exploration, refer to the Wikipedia article on Turing machines.


How to use and interpret the below simulations


In the below Turing Machine simulators, you can input a string that serves as the initial content of the Turing machine's tape.

The simulation processes this input step by step, displaying the tape's content and the position of the read/write head at each stage.

The symbol ^ indicates the current position of the head, allowing you to observe how the machine reads, writes, and moves across the tape during its computation.

Language Decision: MOD 2

Description: This Turing machine decides whether the number of '1's in the input is even (MOD 2). It accepts if the number of '1's is even and rejects otherwise.

Final State:

Final Tape:

Steps:

Result:

Function Computation: push

Description: This Turing machine computes the function push: {0, 1}* → {0, 1, $}*, where push(w) appends a '$' character to the beginning of string w (e.g., 101 → $101).

Final State:

Final Tape:

Steps:

Result:

Language Decision: Palindromic Strings Around #

Description: This Turing machine decides whether the string on the left side of the '#' is the same as the string on the right side. For example, it accepts '0110#0110' but rejects '011#110'.

Final State:

Final Tape:

Steps:

Result:

Function Computation: plus1

Description: This Turing machine computes the function plus1: {0, 1}* → {0, 1}*, interpreting the input as a binary number from least-significant bit (LSB) to most-significant bit (MSB). It outputs the binary representation of the input number plus one, processed bit by bit. For example, 101 (binary for 5) → 011 (binary for 6).

Final State:

Final Tape:

Steps:

Result:

Function Computation: unary2binary

Description: This Turing machine computes the function unary2binary: {1}* → {0, 1}*, converting unary strings to their binary representation. The binary representation is processed and printed from least-significant bit (LSB) to most-significant bit (MSB), appearing reversed to us. For example, 111 (unary representation of 3) → 11 (binary representation of 3, printed as 11 from LSB to MSB).

Final State:

Final Tape:

Steps:

Result:

Language Decision: {aibjck | i, j, k ∈ Z≥0, i < j < k}

Description: This Turing machine decides the language L = {aibjck | i, j, k ∈ Z≥0, i < j < k}. It checks whether the counts of 'a's, 'b's, and 'c's satisfy the strict inequality i < j < k (e.g., abbccc is accepted, but aabbccc is rejected).

Final State:

Final Tape:

Steps:

Result:

Language Decision: {ak | k is a power of 2}

Description: This Turing machine decides the language L = {ak | k is a power of 2}, where k ∈ {1, 2, 4, 8, ...}. It identifies strings of 'a' whose lengths are powers of 2.

Final State:

Final Tape:

Steps:

Result: