Constraints drive creativity. I consider that solving mathematical problems within the constraints of computer hardware is a fascinating challenge with practical application. The tension between the abstract field of mathematics and the tangible hardware of computers is at the core of computer science. For my first EPQ, I wrote a chess engine using Rust. I found that by storing chess positions adjacently in memory and evaluating them sequentially, cache lines are used more effectively thus reducing the frequency of slow main memory reads. The book 'Numerical Recipes: Third Edition' by Press et al helped me realise other subtle ways in which hardware can affect the efficiency and precision of mathematical algorithms and how software can account for and overcome these limitations. To learn more about hardware, I built my own 8-bit computer using a 6502 microprocessor. At present, it consists of the 6502, 32KiB ROM and an output interface register connected to an LCD character display. To reduce cost, I made logic gates from transistors, used multiple clock signals to overcome hardware limitations and built my own ROM programmer. This project developed problem solving skills and inspired a lasting interest in hardware which I continue to pursue by modifying and improving the computer. For my second EPQ, I created a guide for how to cross-compile a Linux based operating system from scratch. Understanding how a Linux system works internally gave me the ability to customise and experiment with my desktop OS. It satisfies a desire to better understand the software I use every day. I plan to build my next primary desktop OS from scratch so that I will not rely on a distribution to hide how my system works internally. I enjoy the academic nature of EPQs and feel ready for the challenge of degree level study. In 2020, I participated in GCHQ's 'Cyber Discovery' course where cyber security concepts were taught through a series of varied challenges. I was one of 500 students to progress to the final 'Elite' phase where we participated in a 2-day capture the flag competition and learnt from industry experts about binary exploitation. I developed a particular interest in cryptography and invented an algorithm to generate secure Vernam cipher one-time-pads of arbitrary length from a short passphrase. I enjoy designing and testing novel methods for 3D rendering and lighting. My latest experiment approximates a 3D scene with voxels. The first pass in my deferred render pipeline draws the gbuffer using a unique combination of rasterisation and ray casting. Because the scene is made up of voxels, ray traced lighting for the second pass can use an algorithm similar to 3D-DDA for ray-scene intersection. Monte Carlo light samples are accumulated over multiple frames using a method of my own invention which combines the advantages of screen space and world space irradiance caching. In this project, I was able to apply concepts learnt in my A-Level further mathematics class: trigonometry for generating weighted random ray directions, statistics for approximating irradiance from finite samples and matrices for transforming 3D vectors. To see through a compiler's abstractions, I wrote a clone of the game 'pong' using x86-64 assembly; understanding software at a low level reignited my interest in binary exploitation. I wrote a C program and exploited it by overflowing a buffer on the stack and manipulating the call stack to return into libc and open an interactive shell. I enjoy using my skills for the benefit of my local and wider community. For example, in 2020 I made an Android and IOS app for my local food bank; staff can use it to update a list of which products are needed most. I have also contributed significantly to the open source 'cglm' 3D maths library. I look forward to continuing my studies at university, meeting like-minded people and joining a chess society.