https://users.cs.cf.ac.uk/ShiQ8/CODE_22041903/ComputationalThinking.html