There are two similar implementations of this simulation. - `basic`. Using simple primites - `improved`. Using more advanced features such as the `time` module to avoid unnecessary computations (i.e., skip steps), and generator functions.