CSC111
README.md

Assignment 1 - February 1, 2023

Blockchain

Total Mark 44 / 44 (100%)

In this assignment, I worked on conceptual application of linked lists to a popular and novel area of computing: blockchain and cryptocurrencies.

alt text

Handout

Assignment 2 - March 1, 2023

Wordle AI

Total Mark 55 / 55 (100%)

Worked on two-player variation of Wordle called Adversarial Wordle with implementation of artificial intelligence. I applied fundamental application of trees: representing the state of a system, and branching decisions that lead from one state to another.

alt text

Handout

Assignment 3 - March 22, 2023

Graphs & Networks

Total Mark 60 / 60 (100%)

Using graph abstract data type, I worked on the problem domain of interconnection networks. The assignment involved Ring topology, Torus topology, Star topology, and Routing Algorithms like Shortest-Path Ring Network, Shortest-Path Torus Network, and Shortest-Path Star Network. Finally, I worked on Interconnection Network Discrete-Event Simulation and Greedy Channel Routing Algorithm as well as Greedy Path Routing Algorithm.

alt text

Handout

What I've Learned

Below are some materials that I learned from CSC111. For additional information, please visit Course Notes.

12. Interlude: Nifty Python Features

12.1 Sequences Revisited: Ranges, Indexing, and Slicing
12.2 String Interpolation with f-strings
12.3 Functions with Optional Parameters

13. Linked Lists

13.1 Introduction to Linked Lists
13.2 Traversing Linked Lists
13.3 Mutating Linked Lists
13.4 Index-Based Mutation
13.5 Linked List Running-Time Analysis

14. Induction and Recursion

14.1 Proof by Induction
14.2 Recursively-Defined Functions
14.3 Introduction to Nested Lists
14.4 Nested Lists and Structural Recursion
14.5 Recursive Lists
14.6 Application: Fractals

15. Trees

15.1 Introduction to Trees
15.2 Recursion on Trees
15.3 Mutating Trees
15.4 Running-Time Analysis for Tree Operations
15.5 Introduction to Binary Search Trees
15.6 Mutating Binary Search Trees
15.7 The Running Time of Binary Search Tree Operations

16. Case Study: Abstract Syntax Trees

16.1 Introduction to Abstract Syntax Trees
16.2 Variables and the Variable Environment
16.3 From Expressions to Statements
16.4 Abstract Syntax Trees in Practice

17. Graphs

17.1 Introduction to Graphs
17.2 Some Properties of Graphs
17.3 Representing Graphs in Python
17.4 Connectivity and Recursive Graph Traversal
17.5 A Limit for Connectedness
17.6 Cycles and Trees
17.7 Computing Spanning Trees
17.8 Application: Control Flow Graphs

18. Sorting

18.1 Sorting Lists and Binary Search
18.2 Selection Sort
18.3 Insertion Sort
18.4 Introduction to Divide-and-Conquer Algorithms
18.5 Mergesort
18.6 Quicksort
18.7 Running-Time Analysis for Mergesort and Quicksort
18.8 Application: Scheduling Events
18.9 Generalized Sorting

19. Average-Case Running Time (optional reading)

19.1 Introduction to Average-Case Running Time
19.2 Average-Case Running Time of Linear Search