An exhaustive search would be infeasible. I was fortunate that I could reduce much of the outer-totalistic rule into computing a 4-input logic gate, and 2^2^4 = 65536 so it was feasible to perform a breadth-first search. On the other hand, the number of 9-input logic gates is 2^2^9 = 13407807929942597099574024998205846127479365820592393377723561443721764030073546976801874298166903427690031858186486050853753882811946569946433649006084096.In the Scripts thread, A for awesome wrote:I wonder what employing a similar method for non-totalistic rules would result in. Possibly there could result some Boolean circuits small enough to adapt for use in apgmera?calcyman wrote:Also, I computed minimal Boolean circuits for all 65536 four-input gates; the output is used by rule2asm.py (in apgmera) to convert outer-totalistic 2D CAs into efficient x86 assembly code.
Of course, optimality isn't strictly necessary -- it just needs to be reasonably efficient. It's possible to realise any 4-input logic gate (which embodies 16 bits of information) into a circuit of at most 7 logic gates. So, theoretically speaking, each of the 2^102 isotropic rules should be realisable using no more than about 50 logic gates (and maybe run at half the speed of totalistic avxlife).
Now, 102 < 128, so I'm hoping that one can apply some clever sequence of logic gates to summarise the 9 inputs as 7 bits, ensuring that distinct neighbourhoods map to distinct bit-sequences. (Clearly, the centre cell can be one of those 7 bits; we need only compress the 8 neighbours into 6 bits.) Once reduced to a 7-input function, I suspect that a greedy search would result in something reasonable.
Any suggestions?
(The results of this effort would also speed up ntzfind significantly.)