Using QuFince, mvr did a high-powered glider collision search a while back, with a
simple but sophisticated detection scheme for still lifes worth reporting: inflate still lifes along the Von Neumann neighborhood, then deflate twice along the Moore neighborhood, and whatever survives is probably worth looking at. Additionally, find all still lifes where there's a line of five in a row. This gets rid of all of the very common still lifes, with only the fourteener passing the second filter at an unwanted rate.
I got nerd-sniped by the problem of finding a more complete heuristic, and ideas for doing this better are welcome. The most complete way to census QuFince results is to do object separation, but that's too computationally expensive for the amount of junk that QuFince can pump out. The inflation and deflation method can be thought of as applying three INT rules in sequence:
So how about finding a more fine-tuned set of rules? I set up a banlist of all objects with a frequency of at least that of the cis-mirrored bookend (so everything with a more than 1 in ~1 million rate of occurrence), minus the pentadecathlon, plus some constellations that tripped up earlier rules and a 200x200 or so patch of genuine life ash for completeness. There's also maximizelist of all 18-bit still lifes that cost at least 9 gliders to synthesize at the time that I grabbed the figures from catagolue. That's 13630 of them. The attached script, which contains a bunch of hardcoded garbage and misleading comments/variable names, randomly mutates from the three rules from a known starting point (an unreadable very large 280-bit integer) to achieve the following:
1. Applying them in sequence completely deletes the contents of the banlist.
2. Applying them in sequence preserves at least one cell in as many of the xs18s as possible.
The script is greedy and uses whatever improvement it finds as the next starting point during the run. It puts the details of the current best finding into the clipboard. I didn't make it user-friendly; it's being presented here for tinkering interest.
After some experimenting, I found that the following set of INT rules catches 12815/13630 of the expensive xs18s, roughly a 94.0% success rate:
Code: Select all
B3ckqry4-cei5ceijr6ek/S2n3eikq4cikz
B2ekn3-cenr4-ei5-ceiq6ci7/S2e3-aeik4-jnqty5aejqy6akn7c
B2ak3-jkq4aeijkw5ejknq6-ek8/S2cei3cenq4-aiqrt5-ajq6acn7e8
I'm not sure how computationally expensive it is to apply complicated INT rules like this, but it's definitely easier than full object separation. This is also overfitted to the xs18s, but it's a starting point for a broader maximizelist.
There's no particular reason to use only three rules, but when excluding b0, an INT rule has 101 possible bits to set. 303 bits is probably enough to design a good no-common-objects filter!