GoL Catalyst search utility based on LifeAPI library.
Run make
, and then ./CatForce inputfile.in
. Currently only tested with clang
.
See examples/p83.in
etc. Some useful lists of catalysts are given in catlists/
.
Parameters are separated by " "
- i.e. space. Parameters in
parentheses are optional.
Line | Parameter | Description |
---|---|---|
max-gen |
n |
Overall maximum generation |
start-gen |
n |
The min gen the first encounter occurs |
last-gen |
n |
The max gen the first encounter occurs |
num-catalyst |
n |
The number of catalyst to place |
num-transparent |
n |
The number of catalysts marked transparent that may appear |
stable-interval |
n |
Gens the catalysts must remain untouched to be considered stable |
search-area |
x y w h |
Search area |
pat |
rle |
The active pattern |
(dx dy) |
Offset applied to the active pattern | |
cat |
rle |
A catalyst |
max-active |
Number of generations in a row the catalyst may be missing | |
dx dy |
Offset applied centre the catalyst, typically negative | |
symmetry-char |
Character denoting the symmetry of the catalyst (see below) | |
(forbidden rle x y) |
Forbidden pattern around the catalyst (see below) | |
(required rle x y) |
Cells of a catalyst that must stay ON in every generation | |
(antirequired rle x y) |
Cells of a catalyst that must stay OFF in every generation | |
(locus rle x y) |
Cells of a catalyst that must interact first | |
(must-include) |
Solutions must use at least one mustinclude catalyst |
|
(transparent) |
Marked as transparent for the purposes of num-transparent |
|
(check-recovery) |
Always check the catalyst is recovered after exactly max-active gens |
|
(sacrificial) |
Does not need to recover | |
output |
filename |
Output filename |
(and/or)filter |
genOrRange rle dx dy |
Filter that must be matched for the solution to be accepted (see below) |
match |
genOrRange rle |
Filter that checks whether the pattern occurs anywhere |
max-junk |
n |
For filters, the maximum non-matching non-catalyst population |
full-report |
filename |
Output filename for solutions ignoring all pattern filters |
max-category-size |
n |
Maximum output row length before more solutions are dropped |
fit-in-width-height |
w h |
Only allow solutions where all catalysts fit in a w by h rectangle |
also-required |
rle x y |
Require rle to be present in every generation |
symmetry |
symmetry-code |
Global symmetry of the entire pattern (see below) |
Catalyst Symmetry: A character specifying what transformations are applied to the catalyst:
|
: reflect across y, for D4x catalysts (e.g. ship)-
: reflect across x/
: reflect diagonally, for D4+ catalysts (e.g. table on table)\
: reflect diagonally the other wayx
: reflect diagonally both ways, for C2 symmetrical catalysts (e.g. snake)+
or@
: rotate all 90 degree increments, for D2- or D2/ catalysts (e.g. boat)*
: all transforms, for C1 catalysts
Filters: Every potential solution will be checked against the
provided filters: only solutions that match the filters will be
kept. There are two variants: andfilter
and orfilter
. Every
andfilter ...
must match and at least one orfilter ...
must match
for the solution to succeed. A match
filter pattern-matches the
solution for the specified pattern, and succeeds if the pattern occurs
anywhere (and otherwise behaves like an andfilter
).
Filters that use a range of generations will only succeed after every catalyst has interacted.
Forbidden: Checks for rle
in the same location as the
catalyst. If rle
is matched in any generation, the solution is
dropped. You can see forbidden
as a "catalyst attached filter",
i.e. the filter location is based on the catalyst location. Intended
to exclude eaters/boat-bits and similar unwanted garbage. You may have
several forbidden patterns per catalyst. See the files in catlists
for examples.
Check Recovery: Catalysts with the check-recovery
attribute are
immediately tested for whether they recover in max-active
generations, without the support of any further catalysts. This is
useful for catalysts with a bait still life that has a long recovery
time, like the hive-pushes or the loaf-spin catalysts.
symmetry s
automatically applies the symmetry s
to the active
pattern and catalysts. The options for s
are:
- D2 symmetries:
D2|
(reflect across x = 0),D2|even
(x=-0.5),D2-
(y=0),D2-even
(y=-0.5),D2\
(y=x) andD2/
(y=-x) - C2 symmetries:
C2_1
(bounding box odd by odd),C2_2
(odd by even),C2_4
(even by even) - C4 symmetries:
C4_1
, (odd by odd)C4_4
(even by even) - D4 symmetries:
D4_+1
,D4_+2
(odd by even),D4_+4
,D4_x1
, andD4_x4
- D8 symmetries:
D8_1
andD8_4
The options D2 follow
LLS, while the
rest of the symmetries follow
Catagolue. LifeWiki
has a more in-depth explanation, though the notation there is slightly
different. (They choose C2_2
to be even by odd not odd by even).
There are LLS-inspired alternatives for the other groups:
- D2 symmetries: as above
- C2 symmetries:
C2 C2even C2|even C2-even
- C4 symmetries:
C4 C4even
- D4 symmetries:
D4+ D4+|even D4+-even D4+|even D4x D4xeven
- D8 symmetries:
D8 D8even
The default is "odd" transformations, i.e. those that fix the cell at
(0,0); verticaleven
and horizontaleven
(referring to bounding box
dimensions) are recognized as equivalent to -even
and |even
,
respectively.