Ahmed Mohamed Abdelaal's Projects
A full hardware implementation of the AES using Verilog, supporting SPI communication between all modules.
Booker is a website that serves as a library management system, allowing its users to reserve books, track their activity, and see all available workshops/events.
Simple AI built using the Minimax algorithm, which can play variants of Connect4 having arbitrary board sizes and winning conditions.
A divide and conquer algorithm which efficiently computes the Convex Hull/Envelope of a set of points.
Contains an implementation of an OS scheduler, utilizing various scheduling algorithms and IPC techniques.
Contains an analysis of GloVe word vectors on intrinsic measures such as modelling analogies, polysemy, synonyms, antonyms, and bias. Furthermore, compares GloVe vectors with count-based vectors extracted from the Reuter's corpus.
A secure Image Processing pipeline based on Homomorphic Encryption, capable of performing various central tasks. Most notably, it includes matching encrypted images using the SIFT algorithm.
Solves two variants of the Interval Scheduling Maximization Problem (ISMP): Weighted and Unwieghted.
An Arduino line following maze solver which utilizes PID control to ensure stability. The robot can record the shortest path to the exit, and follow said path in future rounds.
Implementation of AI agents for the classic version of the Pac-Man game utilizing minimax and expectimax search, coupled with a uniquely crafted evaluation function. Agents include Pac-Man itself, as well as all of its adversarial agents (ghosts). Contains solutions of the "Games" assignment of Stanford's CS221 course.
A desktop application capable of solving any ODE of any order given suitable initial conditions using 7 different numerical methods, and plots the result.
An implementation of the Pohlig-Hellman Algorithm, and using it in solving the Discrete Logarithm Problem in the group of units modulo a prime, with large values.
Implementations of standard discriminative machine learning algorithms, some of which are solutions to selected coding problems from Stanford's CS229 course.
An implementation of the Radix-2 Decimation-In-Time (DIT) form of the Cooley-Tukey FFT algorithm, as well as its inverse. The algorithm is used to multiply 2 polynomials and compute the convolution of 2 vectors in O(nlogn) time.
My solution to the "Route" assignment of Stanford's CS221 course, focused on search problems. The repository explores finding optimal paths between selected destinations on a real map of Stanford's campus.
Data Structures and Algorithms (CMPN102) Project.
A board game which combines the rules of Snakes and Ladders with Monopoly.
An implementation of the van Emde Boas tree data structure, yielding extremely fast asymptotic runtime complexities for queries: O(log(log(n)))
A real-time chess game built using x86 assembly, supporting a chat module and wireless play.