Finished up to problem 12 with success (so far). Some solutions might not be fully optimised.