【MCD4710】Introduction to Algorithms and Programming

You are likely already familiar with a plethora of prehistoric paint programs. These all have a simple premise: you draw a colour on the canvas, and this overwrites, or sits on-top of, the existing canvas colours.
Some applications support transparency, allowing you to blend colours. Some allow you to draw
shapes, and others allow you to click and drag certain elements. None of them have the liveliness that
the FoA Admin team is looking for however. We want to be able to paint sparkles, or a rainbow, on
top of our images. Rather than painting with colours, we want to paint with Eff ects !
Throughout this assignment, you'll be working on a paint application, with the following features:
Multiple diff erent ways to combine eff ects, and paint with such eff ects
Undo/Redo
A painting replay
A special action
In doing this, you'll need to demonstrate knowledge on the following topics:
Stacks, Queues, Lists
Applications of the Data Structures above
Before you get working on the application, please read these tips & tricks to ensure you don't get lost,
or lose any silly marks!
Common Mistakes
You are marked on correctness in Ed . It doesn't matter if your code passes locally, it needs to
pass in Ed. Contact a TA if you are having trouble achieving parity. Be careful of the specifi c
Python version used, and don't import any other third party modules excluding those already
in requirements.txt .
Follow the rules regarding ban on lists, other collections and use the given data_structures
almost always. Check the task speciff c page to see what collections are banned for that feature.
Write clear and concise docstrings for methods you introduce, and type-hint all methods /
variables. If introducing new classes, consider using dataclasses to simplify this deff nition.
Separate your code into small methods of at most 20 lines, and try to abstract logic if you ff nd
lots of duplicated work. Almost all methods in the sample solution are 10 lines or less. (Please
ignore the mess that is main.py :} )
Initial Setup + Running Tests
To get up and running you want to do a few things:
Import the template repository into your own - Follow the instructions in the Getting Started
with Git page.
Optional Make a virtual environment for the project: python3 -m pip install virtualenv
&& python3 -m venv venv (And then activate the virtual environment) (You may need to
change python3 to python or py depending on your Operating System and Python version)
Install the required packages: python3 -m pip install -r requirements.txt (Same deal
here with python3 )
Test it is working by running python3 main.py or python3 -m visuals.basic (These will
probably raise NotImplemented errors if you haven't implemented anything, but if your setup
didn't work you'll get errors complaining packages aren't installed.)
To run tests, call python run_tests.py . Note that you can restrict which tests are run using a second argument.
You can always assume there at most 20 Layers in the application, but design the time
complexity of your solution around an unbounded amount.
dataclasses are used in some of the scaff old code. In short, they do a lot of the initialisation
boilerplate for you by inspecting the type hinting for class variables. You can read more about it
here .
This project also uses abstraction with the abc module. You can read more about it here .
Since this is a paint app, here's some recommend listening while you knock these tasks out of
the park!

相关推荐
元Y亨H5 分钟前
开发者必须掌握的十大核心算法
算法
元Y亨H9 分钟前
深度解构:数据结构与算法的理论基石与工程演进
数据结构·算法
元Y亨H23 分钟前
数据结构与算法的通俗指南
数据结构·算法
2301_7644413337 分钟前
用动力学系统(微分方程)为 Kernberg 的客体关系单元提供数学化的操作定义,把“自体—客体“这对心理结构建模成一个二维耦合系统
数据结构·python·算法·数学建模
林泽毅39 分钟前
PyTRIO快速入门(二):Datum构建
人工智能·算法·产品
keep intensify1 小时前
最长有效括号
算法·leetcode·动态规划
CoderYanger1 小时前
A.每日一题:1979. 找出数组的最大公约数
java·程序人生·算法·leetcode·面试·职场和发展·学习方法
猫头虎1 小时前
什么是ZCode for GLM-5.2?
开发语言·人工智能·python·科技·算法·ai编程·ai写作
长不胖的路人甲2 小时前
什么是赫夫曼树(哈夫曼树 / Huffman Tree)
python·算法·霍夫曼树
Warren2Lynch3 小时前
掌握 UML 构造型、标记定义与标记值:面向领域特定建模的 UML 扩展全面指南
大数据·算法·uml