this is pretty neat! I can't believe you could have implemented a graph isomorphism algorithm without it getting pretty nasty though, so props for that!
Thank you!
The isomorphism algorithm started simple enough when I only needed to ensure that it wouldn't get exponential over the specific outputs of the levels. But once I introduced infinite loop detection that compares arbitrary execution states, it became much more involved. It was pretty fun to implement, actually!