roughly 10x performance boost (on my machine at least) by not blindly iterating over every possible next state

instead, it now takes into account that many new tile spawns are equivalent, so long as you constrain movement to one direction
this leaves just a fraction of the possible states to iterate over

currently, the code in general is a total mess. this optimization in particular is even worse. much clarity, and likely some additional performance boosts, would be obtained by reworking a bunch of this stuff. i'll try and do that son