Saka wrote:drc wrote:Please be patient, or try and update the stuff yourself.
It would be very nice to see this.
I'd definitely like to get that script into Golly 3.0, if only to have an impressively weird and suboptimal way to show what rules with B0 are really doing. Golly is now hiding that so successfully that it's kind of confusing.
As far as I know, though, the script should work fine with half of all MAP rules already. Nobody has seen any problem with the 2^511 non-B0 MAP rules, have they?
dvgrn wrote:Will fix that... relatively soon.
I'm usually pretty careful to hedge my promises, and in this case "relatively soon" should be considered on a geologic timescale, as in,
"relatively soon, [total] solar eclipses won't be possible".
Would anyone care to help out this project by working on some code to write out an .mc file directly for any selected pattern, based on an .mc file containing just a few megacells, enough to show
all the required combinations of ON and OFF quarter-cells? This would make it possible for Golly to build much bigger patterns without running out of memory in the composition stage.
(Now I remember why I've been avoiding this...)
I think the thing to do would be to paste two OFF cells and two ON cells into an empty universe, like so:
Code: Select all
x = 32, y = 32, rule = B/S012345678
7b2o$6b4o$5bob2obo$4bo2b2o2bo$3bo3b2o3bo$2bo4b2o4bo$bo5b2o5bo$16o$17o$
bo5b2o5b4o$2bo4b2o4bob2obo$3bo3b2o3bo2b2o2bo$4bo2b2o2bo3b2o3bo$5bob2ob
o4b2o4bo$6b4o5b2o5bo$7b17o$7b18o$6b4o5b11o$5bob2obo4b7ob2obo$4bo2b2o2b
o3b6o2b2o2bo$3bo3b2o3bo2b5o3b2o3bo$2bo4b2o4bob4o4b2o4bo$bo5b2o5b4o5b2o
5bo$32o$32o$bo5b2o5bo2bo5b8o$2bo4b2o4bo4bo4b7o$3bo3b2o3bo6bo3b6o$4bo2b
2o2bo8bo2b5o$5bob2obo10bob4o$6b4o12b4o$7b2o14b2o!
Then write out an .mc file. It says in Golly Help (and I checked a while back and it's true) that the sub-hashtiles will line up correctly if the pattern is aligned to (0,1). That means that each of the eight tile types will be represented in the .mc file, with no hashtiles representing overlaps between partial tiles.
In other words, there will be a largest hashtile pointing to four smaller hashtiles, each of which points to four hashtiles the next size down. And it will be possible to see this in the actual file. Let's try it with a larger sample to make sure this works:
Code: Select all
x = 64, y = 64, rule = B/S012345678
15b2o$14b4o$13bob2obo$12bo2b2o2bo$11bo3b2o3bo$10bo4b2o4bo$9bo5b2o5bo$
8bo6b2o6bo$7bo7b2o7bo$6bo8b2o8bo$5bo9b2o9bo$4bo10b2o10bo$3bo11b2o11bo$
2bo12b2o12bo$bo13b2o13bo$32o$33o$bo13b2o13b4o$2bo12b2o12bob2obo$3bo11b
2o11bo2b2o2bo$4bo10b2o10bo3b2o3bo$5bo9b2o9bo4b2o4bo$6bo8b2o8bo5b2o5bo$
7bo7b2o7bo6b2o6bo$8bo6b2o6bo7b2o7bo$9bo5b2o5bo8b2o8bo$10bo4b2o4bo9b2o
9bo$11bo3b2o3bo10b2o10bo$12bo2b2o2bo11b2o11bo$13bob2obo12b2o12bo$14b4o
13b2o13bo$15b33o$15b34o$14b4o13b19o$13bob2obo12b15ob2obo$12bo2b2o2bo
11b14o2b2o2bo$11bo3b2o3bo10b13o3b2o3bo$10bo4b2o4bo9b12o4b2o4bo$9bo5b2o
5bo8b11o5b2o5bo$8bo6b2o6bo7b10o6b2o6bo$7bo7b2o7bo6b9o7b2o7bo$6bo8b2o8b
o5b8o8b2o8bo$5bo9b2o9bo4b7o9b2o9bo$4bo10b2o10bo3b6o10b2o10bo$3bo11b2o
11bo2b5o11b2o11bo$2bo12b2o12bob4o12b2o12bo$bo13b2o13b4o13b2o13bo$64o$
64o$bo13b2o13bo2bo13b16o$2bo12b2o12bo4bo12b15o$3bo11b2o11bo6bo11b14o$
4bo10b2o10bo8bo10b13o$5bo9b2o9bo10bo9b12o$6bo8b2o8bo12bo8b11o$7bo7b2o
7bo14bo7b10o$8bo6b2o6bo16bo6b9o$9bo5b2o5bo18bo5b8o$10bo4b2o4bo20bo4b7o
$11bo3b2o3bo22bo3b6o$12bo2b2o2bo24bo2b5o$13bob2obo26bob4o$14b4o28b4o$
15b2o30b2o!
Paste this into a new layer, then use Shift+S to move it (-32,-31) to put the upper left corner of the SE sub-hashtile at (0,1). Switch to the hashlife algo and save as an .mc file:
Code: Select all
[M2] (golly 3.0b1)
#R B/S012345678
.......*$......**$.....*.*$....*..*$...*...*$..*....*$.*.....*$*......*$
.......*$......*$.....*$....*$...*$..*$.*$********$
.......*$.......*$.......*$.......*$.......*$.......*$.......*$********$
4 0 1 2 3
*$**$*.*$*..*$*...*$*....*$*.....*$*......*$
*$*$*$*$*$*$*$********$
*$.*$..*$...*$....*$.....*$......*$********$
4 5 0 6 7
********$.*$..*$...*$....*$.....*$......*$.......*$
********$.......*$.......*$.......*$.......*$.......*$.......*$.......*$
*......*$.*.....*$..*....*$...*...*$....*..*$.....*.*$......**$.......*$
4 9 10 0 11
********$*$*$*$*$*$*$*$
********$......**$.....*.*$....*..*$...*...*$..*....*$.*.....*$*......*$
*......*$*.....*$*....*$*...*$*..*$*.*$**$********$
4 13 14 15 3
5 4 8 12 16
5 0 0 8 0
********$**$*.*$*..*$*...*$*....*$*.....*$*......*$
*......*$.*.....*$..*....*$...*...*$....*..*$.....*.*$......**$********$
4 19 10 6 20
********$......*$.....*$....*$...*$..*$.*$*$
*......*$*.....*$*....*$*...*$*..*$*.*$**$*$
4 13 22 23 0
5 4 21 12 24
********$********$********$********$********$********$********$********$
********$********$******.*$*****..*$****...*$***....*$**.....*$*......*$
********$*******$******$*****$****$***$**$********$
4 26 27 28 3
********$*******$******$*****$****$***$**$*$
4 26 30 30 0
5 29 8 12 31
6 17 18 25 32
Now comes the exciting part! We can use this .mc file to build any pattern we want that's made out of the level-4 pieces of this pattern. If we have a script write out the new .mc file directly instead of making Golly do it for us, then Golly never has to represent the entire huge pattern as a cell list at all, so it becomes possible for the script to megafy much larger patterns without any memory issues.
Look at the last lines of the above sample file. "6 17 18 25 32" is the only level-6 hashtile. It points to the four level-5 hashtiles, the ones that start with "5" -- lines 19, 20, 27, and 34 of the actual .mc file, thanks to the two header lines. The order is always NW, NE, SW, SE.
Each of those four level-5 lines points to four previous lines specifying its level-4 hashtiles, in the same order:
Code: Select all
5 4 8 12 16
5 0 0 8 0
5 4 21 12 24
5 29 8 12 31
There are only eight different hashtiles in the pattern at this level, so there's some duplication, but we can make a little table:
Code:
Select all
x = 64, y = 64, rule = LifeHistory
15.2A$14.4A$13.A.2A.A$12.A2.2A2.A$11.A3.2A3.A$8.D.A4.2A4.A2.3D13.3D
13.3D$7.2DA5.2A5.AD3.D11.D3.D11.D3.D$6.D.D6.2A6.D3.D11.D2.2D11.D2.2D$
5.D.AD6.2A7.3D12.D.D.D11.D.D.D$5.5D5.2A6.D.A.D11.2D2.D11.2D2.D$5.A2.D
6.2A6.D2.AD11.D3.D11.D3.D$4.A3.D6.2A7.3DA12.3D13.3D$3.A11.2A11.A$2.A
12.2A12.A$.A13.2A13.A$32A$33A$.A13.2A13.4A$2.A12.2A12.A.2A.A$3.A11.2A
11.A2.2A2.A$4.A10.2A10.A3.2A3.A$4.DA3.3D3.2A3.D4.3D3.2A4.A2.3D13.3D$
3.2D.A.D3.D2.2A2.2D3.DA5.2A5.AD3.D11.D3.D$4.D2.A4.D2.2A3.D3.D6.2A6.D
3.D11.D2.2D$4.D3.A2.D3.2A3.D2.A4D3.2A7.3D12.D.D.D$4.D4.AD4.2A3.D.A.D
3.D2.2A6.D.A.D11.2D2.D$4.D4.DA4.2A3.DA2.D3.D2.2A6.D2.AD11.D3.D$3.3D2.
5D2.2A2.3D3.3D3.2A7.3DA12.3D$12.A2.2A2.A11.2A11.A$13.A.2A.A12.2A12.A$
14.4A13.2A13.A$15.33A$15.34A$14.4A13.19A$13.A.2A.A12.15A.2A.A$12.A2.
2A2.A11.14A2.2A2.A$11.A3.2A3.A10.13A3.2A3.A$8.D.A4.2A3.3D4.D3.4A3D3A
3D3.2A4.A2.3D$7.2DA5.2A2.D2.AD2.2D3.3AD3ADADA2.D2.2A5.AD3.D$6.D.D6.2A
6.D3.D3.7ADAD3.D2.2A6.D3.D$5.D.AD6.2A5.D.A2.D3.6AD2A.4D2.2A7.3D$5.5D
5.2A4.D3.A.D3.5AD2A5.D2.2A6.D.A.D$5.A2.D6.2A3.D5.AD3.4AD2A6.D2.2A6.D
2.AD$4.A3.D6.2A2.5D2.3D2.3A5D2.3D3.2A7.3DA$3.A11.2A11.A2.5A11.2A11.A$
2.A12.2A12.A.4A12.2A12.A$.A13.2A13.4A13.2A13.A$64A$64A$.A13.2A13.A2.A
13.16A$2.A12.2A12.A4.A12.15A$3.A11.2A11.A6.A11.14A$4.A10.2A10.A8.A10.
13A$4.DA3.3D3.2A3.3D3.A.D7.DA3.3D3.5A3D4AD$3.2D.A.D3.D2.2A2.D3.D.A.2D
6.2D.A.D3.D2.4AD3AD2A2D$4.D2.A4.D2.2A6.DA.D.D7.D2.A4.D2.8ADA2.D$4.D3.
A2.D3.2A5.DA.D2.D7.D3.A2.D3.6A2DA3.D$4.D4.AD4.2A4.DA2.5D6.D4.AD4.8AD
3.D$4.D4.DA4.2A3.DA6.D7.D4.DA4.4AD2A.D3.D$3.3D2.5D2.2A2.5D4.D6.3D2.5D
2.5A3D3.3D$12.A2.2A2.A24.A2.5A$13.A.2A.A26.A.4A$14.4A28.4A$15.2A30.2A!
#C [[ THUMBNAIL THUMBSIZE 2 ZOOM 8 HEIGHT 600 ]]
So then we can build any pattern we want, of any size, out of those level-4 hashtiles, just by starting with
exactly the same macrocell file -- all but the last line, which we throw away and replace with whatever highest-level definition we want. Example: replace the mostly-empty NE level-5 hashtile with a copy of the NW tile, to get a modified level 6... and then have the final level 7 pattern be four copies of that newly-defined level 6 hashtile:
Code: Select all
[M2] (golly 3.0b1)
#R B/S012345678
.......*$......**$.....*.*$....*..*$...*...*$..*....*$.*.....*$*......*$
.......*$......*$.....*$....*$...*$..*$.*$********$
.......*$.......*$.......*$.......*$.......*$.......*$.......*$********$
4 0 1 2 3
*$**$*.*$*..*$*...*$*....*$*.....*$*......*$
*$*$*$*$*$*$*$********$
*$.*$..*$...*$....*$.....*$......*$********$
4 5 0 6 7
********$.*$..*$...*$....*$.....*$......*$.......*$
********$.......*$.......*$.......*$.......*$.......*$.......*$.......*$
*......*$.*.....*$..*....*$...*...*$....*..*$.....*.*$......**$.......*$
4 9 10 0 11
********$*$*$*$*$*$*$*$
********$......**$.....*.*$....*..*$...*...*$..*....*$.*.....*$*......*$
*......*$*.....*$*....*$*...*$*..*$*.*$**$********$
4 13 14 15 3
5 4 8 12 16
5 0 0 8 0
********$**$*.*$*..*$*...*$*....*$*.....*$*......*$
*......*$.*.....*$..*....*$...*...*$....*..*$.....*.*$......**$********$
4 19 10 6 20
********$......*$.....*$....*$...*$..*$.*$*$
*......*$*.....*$*....*$*...*$*..*$*.*$**$*$
4 13 22 23 0
5 4 21 12 24
********$********$********$********$********$********$********$********$
********$********$******.*$*****..*$****...*$***....*$**.....*$*......*$
********$*******$******$*****$****$***$**$********$
4 26 27 28 3
********$*******$******$*****$****$***$**$*$
4 26 30 30 0
5 29 8 12 31
6 17 17 25 32
7 33 33 33 33