The issue was that the first selection didn't update the tile counts, so you could end up with one extra copy of the tile. Solved by extracting the function that solve was using to handle that logic into the top level and then calling that function. Because we're no longer iterating over impossible boards, we doubled the performance while we were at it.
The issue was that the first selection didn't update the tile counts, so you could end up
with one extra copy of the tile. Solved by extracting the function that solve was using to
handle that logic into the top level and then calling that function. Because we're no
longer iterating over impossible boards, we doubled the performance while we were at it.

I left the extra validation in place, but put it behind a conditional based on a constant
so it would get compiled out.

Tim-Tom/scratch,Tim-Tom/scratch,Tim-Tom/scratch,Tim-Tom/scratch,Tim-Tom/scratch,Tim-Tom/scratch,Tim-Tom/scratch,Tim-Tom/scratch,Tim-Tom/scratch,Tim-Tom/scratch