Hacking apgsearch

For scripts to aid with computation or simulation in cellular automata.
User avatar
muzik
Posts: 5648
Joined: January 28th, 2016, 2:47 pm
Location: Scotland

Re: Hacking apgsearch

Post by muzik » August 5th, 2017, 9:54 am

Has anyone tried modding apgsearch so we can search on a torus? This would make rules like drylife searchable, at the expense to spaceships, puffers, etc.

Code: Select all

x = 100, y = 100, rule = B37/S23:T100,100
2ob3ob4ob4o3b2o3bo2b2obo2bo4bo2bo5b2ob4ob3obob2o2b2o2bo3bo2bo3bo3bobo
2b4obo4bo$obo2b3obo3b2o3b4o2b2o2b2o2bobobo2bob2o2bo3b3obo2bobob3ob4obo
b3o4b2ob2obo5b2obob3obo$2b3o2b2o2bob3o7b4obobobo4b2ob5o2b2obo2b2o3b2ob
obob2ob7o3b5ob2o8b3ob2o$2o2b2o5bo6bob2obob3o2bob7obob3o5b2o3b2obob2o4b
2ob2obo4bobo3b2obob2obobo3bobo$o3bob5obobob4o3b2obobobob2o2b2ob3o2b3o
3bo2b3obobo3b3ob2o4b5ob5o2b3o2b2ob2ob2o$bobob2o3b6obob2obob2ob3o3b4ob
3o2bobob2obobo3bo2bob5obobo5bo6b2o2bo2b6o3bo$2obo3bo3bob2o2bo2b2ob3o2b
o2b2o2b4o5b3o3b2obo2bobo2b9o3bo2b4o3b6o2b5o2bo$4o3b2o2bobobo2bob2o2bo
3bob4o4bo4b2o2b2ob2o4bo2b2o2bo2b3o2bobo5b2ob3ob2o2bob2o2b3o$bo2b2o2b2o
b4o2b2o2bo2b4ob3o2bob3o8b5obo3bo2bobo2bobo2bo2b2o2bo2b4o2b2obo4bo2bo$o
2b2ob2o2b2o3bo2b3obo3bob4o2b4ob2o2bo3bob2o2b2ob2obo2bob6obo2b3ob2obobo
2bob4o2bo4bo$bo2bobob2o4b2o3bob3obo3bobo3bob2obo2b2ob4ob2o2b2obo7b2o2b
4o5b2ob3obob2o3b3obo$2obo6bo2bob3ob3o3bo3bob8obobobobo4bo2bo4b5o2bobo
8bobob2obob4ob2o2b2obo$3b2o3bobobo2b2obobo2bo2bo4bo3b2ob2obob2ob3obo2b
2obobob2o4b7ob2o6b2o4bo6bob2o$o2bob2o6b4o2b2ob2obobo2bo2bo2b2o4bobo3b
3o2b4ob3ob3o5bo3bo2b3ob2o4b4obob2obo$b2obob3o5bobo2b2o2b4ob2obo2bob2o
3bo4bob2obobob4ob3o6bob6obob2ob2ob4o5b5o$2obo2b4obo5bob5o2bo2bo6bob2o
8b3o2bo4bo2bo2b3ob2obo2bobobobo2b4ob2obobobo$4o2b3o3bob2obo3b3obobobob
obob6o2b2o2bo7bobobob2o5bobob2ob3ob2obob2o2b3obo3bo$2o2bobobob4ob3ob3o
bob2o2bob2o2b3o3bobob3ob2o4b3o2b3obob8obo2b2ob2o2bo2b3o2b2o2b3o$obobo
3b3o6b2o2b2obob2o5b2ob4o6b5ob3o2b2obob6obobobo2b4o2b5ob2ob3o2bo2bo$4bo
2bobob2ob2obo2b4o3bo2bobobob2o2b2o2b2o4b4ob2o2b4ob2o4b2o4bo2bo3bo5bo2b
2obob2o$3ob2o2b4ob2obob5obo3b3o2bob2o6b2ob3o3bob2ob2ob7o3bo3bob2obo2b
3ob3o2b2obob2o$o9b3o3b2obobo2bob2ob3ob4o5b2o2b2ob3ob2o2b3obo2b3o3b2o3b
2ob6ob2ob2o6b2o$obo5bo3bob3ob2o2b3obob4ob2obo3b4o2bo4b3o3bo2bobo4bo3b
2ob5o4bo2bobob2ob3ob3o$ob2o2bo2bob3o3bob3o4b3o3bobobo3b2obo2bo3b4obob
3o4b4obob2o2b4obo2bob2obobo2bo3b3o$3bob3o2bo2bo2b3o5bo3bo2b7o2b3obob7o
5b2o2bobo2b2ob2o3bo2bo2bo2b4o4b7o$4bo2b2ob4o2bo2b2ob2o9b2o2bo2bob3o2b
2obobo7bobobob2o4bobobo2b3o2bobob2o5bo3bo$bobobobobobobo3b2ob2o2bobo3b
obob3o2bo2b2o2bob2obo3bob7obo2bobo2bob3ob2o4bobo2bo3bo$2b3ob2ob4o3b2o
2b6ob2obob3ob2ob5o2bo5bo2b3obo3bob4o9bobo5bob2obo4b2obo$2obob2o5b3ob3o
bobob4o2b2o2bo4b3obobob2o3bo4b3ob4o3b4ob3obob2o3bo2b4o3b6o$b2o2bo2b2o
2bob2obo2bo2bobobo2b2obob3o2b3ob3o2bob3obo2b3obobob2ob4o3b4o3bobo2b3o
4bob2o$bob4o2b2obo3b3obob6ob3obo5b4o2b3obo2bobobo5bo2b4o5b6o2bo5b3obo
3b2obo$2bo2b2o2b2obob3obob2obobo2b2o3b2o2bo2bobobobob2o5bo2b2obob2obob
obobo8bo8bob3o3b2o$2bobob2o2bo2b2ob5o3bo2bobo5bo2b2obobo2bob2o2bo3bo2b
obo6bobob3ob2o2b7o3bo2b2o4bo$obo2b2o4bo3bobob2ob2o2bobobo4bo2b4ob5o5b
5ob2obo3bobo2bob2o2bo2bo2b4ob5obo3b2o$2bob2o7bo4bobob2o2b3o2bob2o2b3o
2b4obob3ob2ob4obob3obo2b3ob2o2b11obobobo2bobo$2ob2o4b4obo2b5obobo2b2ob
o4bo2bob2obo2b2ob4o2bobob2o3bobo7b3o2bobo6bo4b3o$o3b3o3b3obo4bob3ob4ob
4ob2o2b2o3b2ob2o4bo2b2o2bob11o3bo2bob2obob6o4b3o$o3bob2o3bob2ob2o7bob
2o2b3o2bo5bobobo2bo2b2obo9b2obob5o2b6o2b5obo2bo3bo$3o3b2ob3obo2b2o2b5o
b2o4bobob2o7bo3bob3obo2bo3bo2b2o2b2o3b3obob4o2b2o2b4obo2bo$ob3obobo2bo
bo3b2obob4ob2obo5b2o6b4ob2ob2obob2o4bo5bobo2bo3b4ob3obob3o4bo2bo$2bo2b
obobobo2b3ob3o4b2o2b6o3b3ob2o3bob3o2bobobob2o3b2o2b3o2b5o4b2obo2bo2bo
3b3o$bo4b5o3b9o2bobo2bobob2ob2obo2bob4obobo6bob3ob2ob3o2b3o7b2obob4obo
b4o$3b3obo3b3obob3o3b2o6bo3bo2bobobobob3ob3o3bo4bo3bo2b2ob4o4bo2b3o2b
2obo2bobo3bo$5o5bob3obo2b4o2b2ob2obob4o2bo2bo2b5obobo6bob2obo2b2obo2bo
2b3ob3ob5o2bob2o3bo$2o2b4obo7b2ob3obobo3bo2bo6b2obob3ob2ob2o5bob3ob4o
5b2o5bo4b2o2b2obo2b4o$bo2b3o4b3o3bobob6ob2obobo2b2o4b2o2b2o2b2o3b4obob
2ob2o2b2obo2bo2bo4b3obo6b2ob3o$3ob2o4bo2b2ob4o3bobo2bo2bo3bob3ob2o2b2o
b4obob2obobo7bobo2b3o2b3obo2b4ob3o2b4o$2ob2obob5ob2obo2b5o2b2obob2ob4o
b2o2bo2bo2bobo7bo2b2o2bobobo2b2ob2obobo2b2obo3b3obobo$ob2ob4o2b2ob3o3b
obo4bob3obobo2bob2obo5b3ob3o2bobo2bobo2bo2b5o3b2o4b4o3b4ob2o$2bo2b4o3b
obo4bo2bob5obo3bo2bob2o2b2obobo2bo4b2ob3o2bob2o2bo6bo3b4ob3o6bo2b2o$2b
ob2ob2o2b2ob2o3b2obob2obob4obob5ob2ob2o4bob2o3bo4bo5b2ob2obo2b4o5b2obo
2b2o3b2o$b8ob2o2bob3ob2obobo2bo2b3ob5ob2ob2ob10o3bo2bo2bo2b3ob5o4bob2o
3b2o2bobobobo$2o2bo2bobo2b2o3b2o6bobob3ob2ob2ob2obobo2b2ob2o2b2o2bo4b
3obo4bo3b2ob2o2b4o4bobobobo$3ob2o5b3obo2bobo2b2o4b2ob2o2bobo4bo2b3obo
10b4obob2obo3bo6b2ob5obobo2bobo$3b4obo2bo2bo3bo4bobob5o2bo2bo3b5o2bo3b
o2bobob4o2bob4obobobobobo4b3o2bob4obo$o2bobob8obo4bobobob3obobobo3b4o
3bob2obob2obo4bo2bo6b2obo2b4o2b12o4bo$2b3o3bo2b6o2b3o3bobob4o2b2o2bo2b
o3b3ob2ob2o2bo3bobob2o2bob2obo4b2o4b6ob3obob2o$4b3o2b4o2b4obobob3o3bob
obo3bo2b3ob3ob3o3b2ob3o3bo5bob2o2b7o2bob4o2bo2b4o$2b4o4bo2bo5bo2bobob
2o2bob2o3bo2bobo2b4obobob3ob3o4b2obobobob3ob2o2b2o5b5o$4bob6o3b2obo2bo
bobobobo2bobob4o3bo4bo2bob2obob2o2bob2ob4ob2obo2bob2ob4o3b2obob4o$ob3o
bobo2b2o5b2o3b4ob2o5bo2bobobo2b2obobobo4bob3o7bo3b2o4b3obobobobo4b3obo
$b2obo3bobob2obob3obob8o2bobobobob6o3b4obob7o6b2obobo2b2o5b2ob4ob4obo$
obobobob2obobo2b2o2bo4bo3b2o5b3obo2bob3obobobo2b2o4bo3bo2bo5bo11bo4b5o
b2o$3o4b3obo2b2obo2b2o2b2o2b2o2b3ob7obob6obob2obo3b2ob4o3bo4bo3b7obo2b
obobob2o$ob3ob8o5b2o2bobob2o2bobobobobo2b2ob6ob3obo3b3ob3o2b3ob2o2bo2b
ob3o5bobob2o3bo$o2b3o2b2o2bo5b2o3b2ob3obobo3b4o5b5ob2o2bo2bo3b2o4b12ob
2ob3o4bob6o$bo4b2ob2ob2o2bobo4bo3b3ob2ob2obob2o2bo2bobobo2b2o2b2o2b4ob
o2bob2o2b2ob2o2b3o2b2o3b2o3b3o$3o2bo3bob4ob2o6b3obob2o7bobo2b3o2b4o4bo
b3ob2obob3o2b3o2b3obo5bob2o2b2o2b2o$ob2ob2o2b2o3b2ob2obo3b6o3b5o2bo2b
4obo2bob2obob3ob5obo3b2ob4o2b2o3b3obo2bo4b2o$bobobob2o3b2obobob2obo4b
3obobobo2b2obobobo2b2ob4obob3ob2obob2o3bo4bo2bob4o2bo5bob4o$ob5o2b3ob
2obobob2o2b4obobob3ob2o3bob2o5b3o7b2o2b5obob3o2b2ob6o2b2o2bo2b4o$obo3b
4o2b4o4b5obob3o2bo2bo2bo2b2o2b2obo2bobo2bobo4bobo2b2obobob2o2bo2b2obo
2bobo3b2obo$bobo3b4o2bobo4bo2bo4bo6b2obob2obob3o2bo2b2o2b2obobo2b2o2b
2o3b3o2bobobob2obo2bob4o2bo$2b2o4bo6b2obob4obob5o2bo2bo3bo3b2o3bo2b2ob
obo4bobo4b2o4bo2bo2b2o2bobobob2obo$o5bobo2bo2bobobo2b2obob2obobo2b2o2b
3obobobobo3b3obobob2ob2o3bo3bob2o2bobo5b5ob5obo$bob2ob2o9b4o2bobob2obo
b7ob3o3bo3bo3bob2obobo3b3o4bob2o2bo3bo4b5ob2obo2bo$11b2o8bob4ob2o2bo2b
obob2o3bobob8o3bo2b2o3b2o2bo3b3obob2o2bob2obo2b4ob2o$o2b3o4b2obobobob
2obo2b2obo2b3o2b3ob2o4b3ob3ob3ob2ob2ob2obob5ob6o3bob3obobo2b5o$bobo3bo
bo6bobobo6bob2obo3bobobob2ob4ob8obob6ob2o3b5o2bo2b2o2b2o2bobob3obo$2bo
bob2o2bo2bobo2b2ob2o3bo3b5ob2o5bo2bo5b3ob2ob3o4b2ob2ob2o3b3o4b2o4bob5o
bo$b4o3bo2bobo2b4obo4bob2o3b3obobo3bo3bo2b2ob3obo4b2o3bo4bo3b3obob2ob
2ob2obob2o2bo$2bob5obob6o3b3obo4b2obo2b2obobo4b2o3bob5o3bo4bo2bo2bo2b
5o4bobob3o2bob5o$o2b3o2bo2bob2o3b5o3b2o2bobobobo3b4obob2obob2obo2bobob
obob3o2bob3o4b2o3b2obobobobob3o$o3bob6o3bob2o2bo2bo2b3obob4ob3ob2o2bo
2bo3b2obo4b4ob3o4b2obobo2b2obobobobo3b3obo$ob3obo3bobobo4bo3bo3bob2obo
b2ob2obo2bo3b3o10b2o4bob3ob4o4bob2o2b3obo2bo2b2obo$4bobobo3b5ob2obob4o
bob3o3b2o2bo2b2o3bo2bob4obo2bobob3ob7obo8b3o2bo2bo2bobo$ob2o5b4obo2bo
2b3o3bo2bobob2ob2o2bo3bo2bo2bo3b2o3bo2b2o7b7o4bo2bobobob3obo2bo$b2o6b
2obobo2b2o2b3o5b2o2bob3o2bo3bo2bob2o5b2o2b6o2bobobo3bobo2bo5b2obobob2o
2b2o$ob3o3b2o4b3ob2o2bo2b3o2b5o2b2o2b2ob3obo3b3ob5obob2ob3ob3o9b2o2bob
o3bobobobo$o2bo2bo3b3o4bo2b2o2b4obo3b2o2b4obobo3b3o4b2ob2ob2ob4ob2o2b
3ob3ob3obob2ob3obobo2bo$o3b2o4b4obo5b3ob5ob2ob2obo2bo4bo2b4o2bobo4b2ob
2o3b2ob4o2b4o2bo4b3ob3o$4obob2ob3obobobob2ob2o3b2o2b2ob2obobo7bobobob
2ob2ob2o2bob6ob2obobob4o3b2o4b3o2b2o$3b4ob2o7bo2bobobob2obo4bobo2b2obo
b2ob3ob7ob2o3bob2ob2obobobobo2b6obo3bo2b2o2bo$2b2o2bob4obobo2bo5b2ob2o
2b5ob3obob6obobo5bobo3b3ob2o4b2o5b2obob2o3b3ob2o2bo$b8o2b3obo2b2o2b2ob
2ob2o2b2ob2o2bobob4obo3b3obo6b2obob2o3bob3o2b3o3b3o2b3ob3obo$bo2b2o3bo
bob3ob2obobobobo3b3ob2obobo2b2obob2o4bob2o2bob5ob2o3bobob2o3bob8o2b2o$
3o4b10o2b3obob4o2bo3b7obobobobob3o7b3obo5b3obo5bob2obo2bob4o2b2o$2bo2b
ob3o3bob2ob2obo2b4ob3o5bob5o3bo4bo6b2o4bo2b3o6b2obob3o2b4ob5ob2o$b2ob
2o5bo4b2obob2o2bo2bob3ob2o2b2obo3bob2obobob2o3bo3b2o3b2o3b3o3b2o3b2ob
2obo4bob2o$2b2obobob3o5bo3bo2b2ob4ob2o6bob2ob3obo2bobob2obo2bobobobo2b
5o5b2ob3o2b2o2b2ob3o!

User avatar
toroidalet
Posts: 1514
Joined: August 7th, 2016, 1:48 pm
Location: My computer
Contact:

Re: Hacking apgsearch

Post by toroidalet » August 5th, 2017, 10:53 am

wwei23 wrote:Yeah, but then 1.0 won't be superior anymore!
It stopped being superior after apgsearch V4 was started. The old version is still going to be intact, right?
Any sufficiently advanced software is indistinguishable from malice.

wwei23

Re: Hacking apgsearch

Post by wwei23 » August 5th, 2017, 10:54 am

toroidalet wrote:
wwei23 wrote:Yeah, but then 1.0 won't be superior anymore!
It stopped being superior after apgsearch V4 was started. The old version is still going to be intact, right?
I think so.

User avatar
calcyman
Moderator
Posts: 2936
Joined: June 1st, 2009, 4:32 pm

Re: Hacking apgsearch

Post by calcyman » August 5th, 2017, 11:18 am

@muzik Good idea. The ulife algorithm in v4.x will be able to run either:
  • A virtually-unbounded flat plane, as is the case in 3.x;
  • A fixed rectangular torus with width divisible by 16 (at least 48) and height divisible by 32 (at least 64).
...at exactly the same speed (comparable to, and maybe slightly faster than, apgmera's vlife algorithm).

If you run on a small torus (e.g. 64x64), you might still be able to capture spaceships whose paths loop around the torus unobstructed -- but of course these will be much rarer than on an unbounded plane. I'm still not sure how to handle things such as this, and the glider_block_cycle, and any other oscillators which don't embed nicely onto a flat plane -- apgcodes implicitly assume that the patterns actually have a bounding box! Maybe they should be handled similarly to oversized patterns, so the glider_block_cycle on a 64x64 torus would earn the name 'mc_p236':

Code: Select all

x = 64, y = 24, rule = B3/S23:T64,64
29b2o2b2o$28bobo2bobo$30bo2bo3$31b2o$31b2o16$o62bo$o62bo!
Regarding v1.x 'superiority', Aidan's hacked Python script will still have the advantage of non-totalistic rules. They might be added to a later v4.x release, but not the initial v4.0 release.
What do you do with ill crystallographers? Take them to the mono-clinic!

User avatar
muzik
Posts: 5648
Joined: January 28th, 2016, 2:47 pm
Location: Scotland

Re: Hacking apgsearch

Post by muzik » August 5th, 2017, 1:22 pm

Other searchable rules would include this right here:

Code: Select all

x = 3, y = 4, rule = B367/S23
bo$obo$3o$b2o!

Code: Select all

x = 48, y = 64, rule = B367/S23:T48,64
2o3bo3b9o2b2ob6o2bo2bo2b2obo2bo3bo$o2b3o5bobob4ob3o2bo2bo2b3o4b2ob2obo
b2o$o3b3o4bo3bo2b5obo3b3obob3obobob4obo$ob2o4b2o4b2o3b3o3b3o3b2o2bo2b
2o3b2o2bo$bo2bo5b2o2b2ob2ob3o2bobobob4obo4bobo2bo$4ob2o2b2ob3obo2b3ob
2o4bo5bobo2bobo4bo$obob2obo2b4ob4obob2ob4o2b2o2bobo3b2obobo$3o2b2o3bob
o2b2obo3b2ob4ob2ob5obobo3bobo$2b2obo3bo3bob2ob3ob3o2b2ob4o2b3obob5o$2o
3bob3obo7b2ob3ob3o2b2obo4bo4b3o$bobobo7bob2o3bo3b2o2bobo3bo4b3o4b2o$o
2b2obobob2o4bobo3b2o2bobo4bobobobo2b2ob3o$ob2o6b3o3bob2o4b3o2bo2b3obob
o3bobob2o$o3bob6obobo2b2obobo3b3obobobo6b2ob3o$o3b3ob7o2b2o2bobobobo3b
2obo4bobo4bo$bobob2ob3ob6obo2bob2ob2o5b3o2b4ob3o$o2bo2b2o2bo2b3obobo2b
ob2o2bobo3bob3o2bob2ob2o$3obo2b2ob2obobo2bo3bobo5b4o4b3obo2bobo$3o2bo
2b2obo3bobo3b2o3bo2bobobob2o2b6o$2b2ob2o3b2ob5obo2bo2bobob2o3b4o3bo5bo
$2bob3obobo2bo2b4o2bo4bo2b2obo2bob2o3bobobo$3b5obo4bobob3o2b3o2bobob2o
b5o2bo2b2o$3o4bo3b2o2bobobo2bob3ob3ob2obob2ob2o2bo$5bobo2bobobo3bobob
6o3b3ob2obo3bob3o$o4b2o3bo8b2o3b2obo2b2o2bobobob5o$bo2bobobo3bo4b2o4b
3obo3bob4o3bo5b2o$6bob3o3bo2bo3bobobobo3bob2ob4o4b2obo$2ob5obobo3bobo
3bob2o2bob2o2bo4b3ob2ob2o$2bo2bo2b3ob2ob2o2b3o6bob4ob2o2bob2ob3o$2obo
2bo2b3obob2o2b3obob2o2b6obobob2o2bo$2ob2o2bo3bo2b2ob2obo3bo3bobob2o3bo
b2obo2b3o$3ob2obo3b3obob7o3bob2ob3obo2bobo2bob2o$2o4b3ob2ob2ob7o2b3ob
2ob5o6b2ob2o$2obob5o2b2o2b4o2b2o3bob5o2bob3o5bo$b2o3bo2bo3bob2ob3ob3ob
2o6b3obob2o2b3o$4bobo4b2o2bob2obobo2bob2obo2b9obob2o$3bo2bo3b2obo2bo3b
5o3b4obo3bo4b2o$2b2o3b2o2b2o2b2o3b2o2b2obob2o2bobo3b2o3bo$2ob2o3bob2ob
2o2bobo3b3o2bo2bo3bo4bo5b2o$4obo2bob2obob2ob2ob5o2bob2ob4ob2ob2o2bobo$
2bobob2obo4b4o2bobo2bo6bobob2o2b6obo$bo2bob3o3bo2bobo2bo3b2o5bo2bo2b2o
3bobobo$o5bo3bob2o2bo4b5o3b2ob2o2b4obo3b3o$2o3bob6o2bob3o2bobo4bo2bob
3o2bo2bo2bobo$bob4o3b2o2b2ob3o2b4ob2o2bo2b5obobob4o$bo3bobob2o6bo2b2ob
3o4bo3b2o2b3o2bo$3bobo8bobob5obo3bo2bo2bo2bo2bob2o2b2o$bob4o2b2ob2o3b
4o2b4obo3b3o3bo2b4o$ob2o2b2o3b2o2b3ob4o3b2o3bob2ob3obo3b2o$obo2bob6obo
4b6o3bo3bo3bo3b4o3bo$2ob2ob3ob3o2bobobo2bob4o4bobob3o4bob3o$b2ob2o2bo
2b2o2bob3obo2b3ob2ob2o2bob2o5bobo$5o5bobo2b3o3b2ob2obob2o8bob2ob3o$4bo
bob2o3bo2b2o4bob3o2b5ob2obo6b3o$2obo2bo2b2obobo5b3o2b3obo5b3obo2b2obob
o$o2bobo5b4ob2o4b2o4b2o3b2o4bo2bo3bo$obo2b4o4b2ob2o4bobobo3bo6bobobo2b
obo$2o3b2obob3o2bo3bo2b2o4b2o3b3obo3bob5o$2o5b3o3b3o3b2o2b7ob2obo2bob
3ob3obo$obob2obobobo4b3o6bo3b2obobo3b5o3bo$obob3o2b3ob4o2bo2bo4bobo2b
2ob3o3b4o2bo$bo3bo2bo5b2ob2o2bo6bo2b5o2b2o2b3o$3obo2b4ob10obobobo6b2ob
o2bo5b2o$3b2obo2b3o2bo2b3ob6o3b2o3bobob2obo2bo!

..assuming the plane size is small enough. I think i got lucky with this specific case, since i tried it on a 100x100 torus and it lasted for over 40000 gens:

Code: Select all

x = 100, y = 100, rule = B367/S23:T100,100
o2b3o4bobo2bo2bo5bo4bob3ob2obob5ob5obo2bo5bob2o2b3obo2bo2bobo3bo3b2ob
2o2bobob2o$b5o5b2o2b2obob2o3bo2b2o3b2o4b4obobobobobo3b4o2bobob2ob2o2bo
bo2b2o2b3obobobobo3bo$ob4obo4bo2bo5b3obob2o4bo3b3obob2ob3obob2ob2obo2b
2o2bobobob3ob2ob7ob3ob2ob2o2b2o$ob2ob3ob3ob4o3bobo2b2o2bo2bobob2obo3b
3o2b2o7bo3bobobo3b3o3b3ob2obobo3bo5bob4o$b2o3b4o3b2o2bobo2b2o2bo5bobo
2b2o2b2o3bob3o2b4obo3b3ob3obo2bo2bobobo6bob6obo2bo$ob2o5b2o2b6o4b5obob
3o3b2o2b2o2b3ob2ob3ob4ob3ob2obo2bo2bob2o3b2o4bobob3ob5o$bob2obo2b4o4b
7o2bo4b2ob2ob3obo2bo2bob2obob4o3b2ob4o4bo2b3o2bobo2bobo4bobo2bo$obobo
4bo3b2o2b3o3bo4b3obo4b2ob3ob2o2b5o6b4ob2obo2bo4b2obobobo3b4o2bo2bob3o$
6b2obobo4bobobo3bo2bobo2b2o4bo2b2o2bo2bob3obo2b2o4b3obobobo5b4o2b2o3b
6o3bo$2o2bobo2bobobo2bob2obobo5bo4b2ob5obo2b3obob2obo2b2obob3o3b4obob
2ob4o2bo2b3ob5ob2o$obo2bob2o4b4obo11bo2b2o2b2ob3o2b2obo2b4ob2ob3ob2ob
3o2b3o4bo4b2obo6bob2o$2ob3ob4o3bo2b7ob4o2bo2bo2bo3b4o2bo3b3obobo5b2ob
4obobob3ob3obobo4bob5o$2bobobobo4b4obobob4o2bo4b3ob4ob2obob2obob3o4bo
3b3o3b2o2bo3b2obobob2ob2ob3obo2bo$bob2ob2o8b2o10b7o3b2o2b3o4b4ob2o4b3o
2b3o3b2o5b3obob3o2bobobobob3o$2b2o3bob2o2bo2bo2bo2bo2bo2bobobo4bo2b4ob
2obobob2o5b7o3b3obob2ob2o2b2o3bob3ob2o4bo$o2bo2bo2bob3obo2b2o2b8o2b3ob
obo2bob2obo4b2ob2ob2obob2obob4ob3o5bob2obo3b2obo2b5o$o2bob3o4b3o6b2obo
2b4ob2o2b4obobo4bobo4bo6bo3bo2bo2b2obo3bo2b3obo2bo2b3obo$o2bob2o4bo2bo
b2o2b3o3bo6b3o3bobob6ob2o3bo3b3ob3ob2o3b2ob2obob2o3b2ob3o2b3obo$6bo7bo
2b2obo2bo2b2o3bo3b9o2b2ob6o2bo2bo2b2obo2bo3bobobo3bob2o2b3o2b2ob2o2bo$
ob7o3b2o2bo3bo3bobo2b3o5bobob4ob3o2bo2bo2b3o4b2ob2obob2o3b15o2bobo$obo
bobob2o2bo4b2obobob3o3b3o4bo3bo2b5obo3b3obob3obobob4obo2b3ob6o3bob4ob
4o$bo5bo4b3o2b4obo3bob2o4b2o4b2o3b3o3b3o3b2o2bo2b2o3b2o2b2obobobob2ob
6o3b3o2bo$o3bo2b2o2b2o3b2obo3bobobo2bo5b2o2b2ob2ob3o2bobobob4obo4bobo
2bobob2o2bo4bob2obob4obo$b4obo5bo4b2o3b2ob5ob2o2b2ob3obo2b3ob2o4bo5bob
o2bobo4bobobobobo3bobobobo2bob3o$3b2obobo3bobob2o2bob3obobob2obo2b4ob
4obob2ob4o2b2o2bobo3b2obobobo3bo2b2obob3obobo2bo$3bobo3bo2bobo2bo5b2ob
3o2b2o3bobo2b2obo3b2ob4ob2ob5obobo3bobob4obob4o5bob4ob2o$bob4o7bo2b3o
2bob2o2b2obo3bo3bob2ob3ob3o2b2ob4o2b3obob5obobob2ob5ob2obo2b5o$obobobo
b2o2b2ob4obobobob2o3bob3obo7b2ob3ob3o2b2obo4bo4b3o4b6o2b5ob4o$ob2o3b2o
bobo2bo2b2o7bobobo7bob2o3bo3b2o2bobo3bo4b3o4b3obo3b2o2bobobo2bobob4o$
3bob2obo3b4o2bob2ob2obo2b2obobob2o4bobo3b2o2bobo4bobobobo2b2ob3o2b4o2b
12ob2obo$ob2o3bo2b2obo2b3obo2b2obob2o6b3o3bob2o4b3o2bo2b3obobo3bobob2o
b2o6b4obo2bo2b4o$3b5o3b4ob4o4bobo3bob6obobo2b2obobo3b3obobobo6b2ob3obo
b3o3bo9b4obo$bobobob4o7bob2ob2obo3b3ob7o2b2o2bobobobo3b2obo4bobo4bo3b
5o3b3o2b5o2b4o$2o2bo2bobo3bob4o2bo3bobobob2ob3ob6obo2bob2ob2o5b3o2b4ob
3o2b4o4bob3ob3ob6o$2obob3o2b2o2b6obo2bobo2bo2b2o2bo2b3obobo2bob2o2bobo
3bob3o2bob2ob6ob6obob3obob2o2bo$b5o3bo4bo2b2o2bo2b5obo2b2ob2obobo2bo3b
obo5b4o4b3obo2bob2o3bo2b4ob2ob2obob6o$bo2bob3obo3b2ob2ob2o2b5o2bo2b2ob
o3bobo3b2o3bo2bobobob2o2b6o3bob2obob3o2b3o2b4o3b2o$bo2bo2bo2b2o2bobobo
2b2ob2o2b2ob2o3b2ob5obo2bo2bobob2o3b4o3bo5bo3b4obobob5obob5o$ob2ob2o2b
2ob4ob2o4b2o3bob3obobo2bo2b4o2bo4bo2b2obo2bob2o3bobobobo2bo2b3o2bob4ob
2ob2o$ob2o4b2o7b6o6b5obo4bobob3o2b3o2bobob2ob5o2bo2b2o2bob6o4b2o3bo3b
3o$2obo2b2obo6bo2bobobob4o4bo3b2o2bobobo2bob3ob3ob2obob2ob2o2bo3bobobo
bobo2b3o2b5o2b2o$o2b2o2bo3bob2o2bo2b2obo7bobo2bobobo3bobob6o3b3ob2obo
3bob3o2bo2bo5bob5ob6o$4o2b3o3b4obo3bobo2bo4b2o3bo8b2o3b2obo2b2o2bobobo
b5o3b2o2b3o4bob3o7bobo$5bob2obo2bo2bob6obobo2bobobo3bo4b2o4b3obo3bob4o
3bo5b6o5b3o2b3o6bo$o3b3obob2o3bobobo2b2o8bob3o3bo2bo3bobobobo3bob2ob4o
4b2ob4obo2bo4bobob2o2b3obo$3bobob2obo2bob2obo3b2o2b2ob5obobo3bobo3bob
2o2bob2o2bo4b3ob2ob2o2bo3bo3b4ob2o3bo3bobo$2bo3b3ob4obob2ob2o2b2o2bo2b
o2b3ob2ob2o2b3o6bob4ob2o2bob2ob3o16b3obobob2o$b2obo2b2o11b2ob2ob2obo2b
o2b3obob2o2b3obob2o2b6obobob2o2bo4bob3o7b2o8b3o$o3bob2o4b4o3bob2ob4ob
2o2bo3bo2b2ob2obo3bo3bobob2o3bob2obo2b3ob3o2bo2bob4obob2o2bob2o$o2b2ob
3o2b3ob5o3b2ob3ob2obo3b3obob7o3bob2ob3obo2bobo2bob2ob2ob2o3bobob4o3bob
2o$obobobob2ob2o4b2o2bo3b3o4b3ob2ob2ob7o2b3ob2ob5o6b2ob2obobob2o3b2o3b
obobob2ob2o$bobobobo2bob2ob4ob5ob2obob5o2b2o2b4o2b2o3bob5o2bob3o5bo3bo
4b3o2b3obo4bo2bo$bobobobob3o3bo3bob5ob2o3bo2bo3bob2ob3ob3ob2o6b3obob2o
2b3o3bo2b4obobob2ob2obob4o$2b2o3bob2o6bo2b4o6bobo4b2o2bob2obobo2bob2ob
o2b9obob2ob2o3b3ob3obo2bo2bo3bo$2bo2b4ob2ob2obobobob3o4bo2bo3b2obo2bo
3b5o3b4obo3bo4b2o9b7obo2bo4bob2o$obobo3b2o2b2ob2o3b2obo4b2o3b2o2b2o2b
2o3b2o2b2obob2o2bobo3b2o3bo3bo2b2o2b2o6b3obo2bobo$2obo3bobo2bob2o2bob
4ob3ob2o3bob2ob2o2bobo3b3o2bo2bo3bo4bo5b9o5b3o2b3obo3bo$2o3bo3bo2b3o4b
obo2bob4obo2bob2obob2ob2ob5o2bob2ob4ob2ob2o2bobob8o2b2obo2bo2bo4bo$2bo
b2o3b3o2bobobo3b3o3bobob2obo4b4o2bobo2bo6bobob2o2b6obo3b6o4bo2bobobobo
b2o$2b2ob3ob4o5bob2o3bobo2bob3o3bo2bobo2bo3b2o5bo2bo2b2o3bobobo2b3o3bo
bob3o2bob2ob2o$2ob2o2b2obobo2bob2o3bob3o5bo3bob2o2bo4b5o3b2ob2o2b4obo
3b3ob2obo6bobo8bo$3b5obo2bo2bobobo2b2ob3o3bob6o2bob3o2bobo4bo2bob3o2bo
2bo2bobob2ob2o2b2o2bob5obo2b3o$b2o2bobobobobobob4ob2obobob4o3b2o2b2ob
3o2b4ob2o2bo2b5obobob9obob4ob3obo2bo4bo$bob2ob2ob2o4bob4o2bobobo3bobob
2o6bo2b2ob3o4bo3b2o2b3o2bo4b2o3bobo3bob8o3bo$3b4o4bobob3o4b3o4bobo8bob
ob5obo3bo2bo2bo2bo2bob2o2b2o4bob2o5bob2o2b2o2bobo$2o4bo2bobobob3obo2bo
2bobob4o2b2ob2o3b4o2b4obo3b3o3bo2b4o5bo5b2o2b2o2b3o$2ob6obob2o2b2o6b3o
b2o2b2o3b2o2b3ob4o3b2o3bob2ob3obo3b2o2bobo5b2o3b7o2bo2bo$3b2o3b3obobo
2b2o2b6obo2bob6obo4b6o3bo3bo3bo3b4o3b2ob2ob2o4b3ob2o4b5o$b2obo3b2obobo
bo2b2ob4ob2ob2ob3ob3o2bobobo2bob4o4bobob3o4bob12obo2b2o3bob3ob2o$b4o3b
ob2o4b4ob2obo2b2ob2o2bo2b2o2bob3obo2b3ob2ob2o2bob2o5bobo5bobobobo2bo3b
5ob2o$bo2b2o2b2obobo2b9ob5o5bobo2b3o3b2ob2obob2o8bob2ob3o5b2o3bobob6ob
2o2bo$2o2b2obob3o3bo5b2ob2o4bobob2o3bo2b2o4bob3o2b5ob2obo6b4ob2obob7o
5bo4bo$obo3b3o2b2o2bobobo3b2ob2obo2bo2b2obobo5b3o2b3obo5b3obo2b2obobo
6bo4bo2bo2bo2bob2obo$obobobo3bo3b6ob3o2bo2bobo5b4ob2o4b2o4b2o3b2o4bo2b
o3bobobo2bo5b2ob4o3bob2o$o2bob2o2bo5b2ob4obo2bobo2b4o4b2ob2o4bobobo3bo
6bobobo2bobo3b5o2bobob2o2bo2b2obo$bo3b2ob4o2b4obo4bob2o3b2obob3o2bo3bo
2b2o4b2o3b3obo3bob6obob2ob2o2b3obo3b7o$3o2bob6o2bo5b7o5b3o3b3o3b2o2b7o
b2obo2bob3ob3obo2b3o3bob3obo2b3ob3o$b2o3bob2ob3o3b2ob3o3bobob2obobobo
4b3o6bo3b2obobo3b5o3bob2o2bo2b2o2bob3o2bobo2bobo$ob3obo5bo3bob2ob6obob
3o2b3ob4o2bo2bo4bobo2b2ob3o3b4o2bo2bob3o3b4obo4b4obo$3o2b2ob2ob2o3bo4b
o2b2obo3bo2bo5b2ob2o2bo6bo2b5o2b2o2b3o4b2o3bo3b2obobobo3bob3o$2b2obo2b
3ob2ob2obobob7obo2b4ob10obobobo6b2obo2bo5b3o2bo3b4o6b5obobo$o2b2obo3b
5ob4ob2o6b2obo2b3o2bo2b3ob6o3b2o3bobob2obo2bo4b2obo5b3ob2ob5o$ob2o5b2o
3b3o2b3o2bo4bob2o2bob3o2b2o4b6o2b6o4b2o3b2o2bo6bo3b4o3bo2bo$b2obobo6b
3o2b2o2b2o7b2o3bo2b2obob5o2b2ob7ob3o2b3ob2o2bo2bob2obob3ob4o3bobo$obob
o3b2o9bo2bob2o2b2o2bob2obob5ob6obo2bobo3bobo2b2o2b4ob6o2b3o5b3o3b2o$o
3b4ob2obob2obo5bob2o3b4obo2b2obo2b2ob4ob3ob2o2bobobo5b3obobo5bo2b2ob2o
bobobo2bo$2obo4bob3ob2o3bo2bo2b3o3bo3b4o3b2ob2o3b2o2bob2obobobobo4b3o
2bob2o7b2ob2obo3bo2bo$2b4o2b3obobo2b3o4b3o3b6o2b2obo3b3obo2bobo3bo2bo
2bobo2b2ob2o2bo2bo2b2obo4bo2bob2o$7b2ob2ob3o2bo4b5obobo4bo3bob2o6b3o4b
2ob6ob2o2bobob3obob7ob2ob2ob3obo$b2ob2o2b3o3b2obo2b4o2bo2b2obobob4ob5o
b4ob4o8bob2obobo2b2o3b2ob3obobo2b4ob4o$2o7b3ob3obob3ob2obo4b5o3b2obobo
bo2b5o2b5ob2obobobobo3b3ob4o2bobo3bo2bo3bo$2b3obobobobobo3bo2bob4o2bo
4bobobobo6b2o2bo3bobobobob2ob2ob3ob3ob5o2b2o4bobo2b2o2bo$b5ob2ob2o3b2o
b3ob6o2bobobo2bo6b3ob2obobob2o2bo5b2obo3bo4bobo2b2ob5o4bob3o$o4bob2o2b
3ob2ob4obob4o3bo3b3o3bo2bo5bo4bo4b2o2b4ob4o3bobob3obo5b2ob3ob2o$2obob
2ob2o4bobo4b4ob2o2b2o3b3o2b2obob2o2bo2b3ob4o2b2o6b3o3b2ob2obo4b4o3b3ob
2o$3o5bo4b4obobo2b4o3bob2o2bo2b2ob3ob3o3b2obobo2b2ob2o2bobob6ob2o2b4o
4bob4o$b3obob2o6bob2o2b4obo6b8o3b2ob4ob2obo11b2ob2obobobobobobo2b8ob5o
$3o5b5o4b2obobo2bobo2b3o3bob3ob2o2bobobob6ob2o3b2obobo2b3o2bo2b2ob3obo
3bo3b2o$ob4ob4o2bo2bob2o5bob2o2b2o3b5obob2ob2o2b3obob4obobo2b2o2b5obo
3b2o3b4obobobo$3obob3o2b2obobobob3obo3bo2bob2obo2bo2bob2ob3o2b4obobobo
b5obo3b4obo2b2ob2ob3o2bo3bob2o!
EDIT: what would happen in the unlikely event we caught a c/1 toroidal spaceship?

Gamedziner
Posts: 795
Joined: May 30th, 2016, 8:47 pm
Location: Milky Way Galaxy: Planet Earth

Re: Hacking apgsearch

Post by Gamedziner » August 5th, 2017, 4:49 pm

muzik wrote:I think i got lucky with this specific case, since i tried it on a 100x100 torus and it lasted for over 40000 gens
625475 gens to be exact.

Code: Select all

x = 81, y = 96, rule = LifeHistory
58.2A$58.2A3$59.2A17.2A$59.2A17.2A3$79.2A$79.2A2$57.A$56.A$56.3A4$27.
A$27.A.A$27.2A21$3.2A$3.2A2.2A$7.2A18$7.2A$7.2A2.2A$11.2A11$2A$2A2.2A
$4.2A18$4.2A$4.2A2.2A$8.2A!

User avatar
praosylen
Posts: 2443
Joined: September 13th, 2014, 5:36 pm
Location: Pembina University, Home of the Gliders
Contact:

Re: Hacking apgsearch

Post by praosylen » August 6th, 2017, 12:24 pm

apgsearch-2017-8-06-v0.54+0.3i.py.zip
(160.1 KiB) Downloaded 354 times
Just decompress and run in Golly — no need to pre-generate rule tables or anything. There's no need to use underscores in rule names anymore, slashes work just fine.

Separation of pseudo-objects is now much more authentic and separates combinations of overlapping but non-interacting oscillators such as pentadecathlons, tlife p160s, etc. Unfortunately, the separation process is now extremely slow due to long Python computations, resulting in a speed reduction on Golly 2.7-. (For Golly 2.8+, the advantages of using QuickLife/HashLife instead of RuleLoader more than compensate for this, so that the net result is usually still an increase in speed.)

Lastly, pretty much everything photon-related is better: rules with photons are now supported, and xq1s won't show up on Catagolue unless they're actually xq1s.

Warning — the first few pages of soups may take an extraordinarily long time to run. This is normal, and is to be expected. Speed will typically increase following this.

EDIT: Fixed date.
EDIT 2: Forgot to mention that if you still have Golly 2.7- for whatever reason, you will need to change the global variable

Code: Select all

g2_8
on line 55 to

Code: Select all

False
.
Last edited by praosylen on August 11th, 2017, 12:35 pm, edited 3 times in total.
former username: A for Awesome
praosylen#5847 (Discord)

The only decision I made was made
of flowers, to jump universes to one of springtime in
a land of former winter, where no invisible walls stood,
or could stand for more than a few hours at most...

User avatar
muzik
Posts: 5648
Joined: January 28th, 2016, 2:47 pm
Location: Scotland

Re: Hacking apgsearch

Post by muzik » August 6th, 2017, 1:12 pm

Let's test this out.

Also, why does it still say 2016?

User avatar
praosylen
Posts: 2443
Joined: September 13th, 2014, 5:36 pm
Location: Pembina University, Home of the Gliders
Contact:

Re: Hacking apgsearch

Post by praosylen » August 6th, 2017, 1:23 pm

muzik wrote:Also, why does it still say 2016?
Because I'm stupid and updated everything but the date. Will fix.

EDIT: Fixed.

Also, coincidentally, today is exactly 18 months after the previous update. Sorry I'm so lazy, everyone.
former username: A for Awesome
praosylen#5847 (Discord)

The only decision I made was made
of flowers, to jump universes to one of springtime in
a land of former winter, where no invisible walls stood,
or could stand for more than a few hours at most...

User avatar
Apple Bottom
Posts: 1034
Joined: July 27th, 2015, 2:06 pm
Contact:

Re: Hacking apgsearch

Post by Apple Bottom » August 6th, 2017, 1:56 pm

A for awesome wrote:apgsearch-2017-8-06-v0.54+0.3i.py.zip
Excellent! Thanks a lot for your continuing work on this; I'll take it for a spin right away.

If you don't mind a request: now that wwei23's 4x64, 2x128 and 1x256 pseudo-symmetries have officially been blessed by Calcyman, could we add these to your version of apgsearch? The diff of wwei's version of 1.1 against vanilla is here.

EDIT: after preliminary tests with two rules, using Golly 3.0b3, I've found that:

1. B2i3-ck/S02-i3-ck is about twice as fast to search as with 0.54+0.21i-update. Excellent!

2. B2e3ai4arw5678/S3-an4ar5i678 (SlugWorld), on the other hand, is very slow to search now (~2 soups/sec; previously it was ~25), and in fact has just triggered the following bug:
apgsearch-2017-8-06-v0.54-0.3i.py-error.png
apgsearch-2017-8-06-v0.54-0.3i.py-error.png (22.37 KiB) Viewed 13515 times
If you speak, your speech must be better than your silence would have been. — Arabian proverb

Catagolue: Apple Bottom • Life Wiki: Apple Bottom • Twitter: @_AppleBottom_

Proud member of the Pattern Raiders!

User avatar
muzik
Posts: 5648
Joined: January 28th, 2016, 2:47 pm
Location: Scotland

Re: Hacking apgsearch

Post by muzik » August 6th, 2017, 3:54 pm

Object separation still isn't perfect; https://catagolue.appspot.com/object/ov ... e7cs2-i34q

User avatar
praosylen
Posts: 2443
Joined: September 13th, 2014, 5:36 pm
Location: Pembina University, Home of the Gliders
Contact:

Re: Hacking apgsearch

Post by praosylen » August 6th, 2017, 3:56 pm

muzik wrote:Object separation still isn't perfect; https://catagolue.appspot.com/object/ov ... e7cs2-i34q
Thanks for pointing that out! I'll hopefully get around to fixing that soon.

EDIT: It looks like T tagalongs aren't being handled correctly (the likely cause of a recent PATHOLOGICAL in B367/S2-i34q); that should be fixed soon too.
former username: A for Awesome
praosylen#5847 (Discord)

The only decision I made was made
of flowers, to jump universes to one of springtime in
a land of former winter, where no invisible walls stood,
or could stand for more than a few hours at most...

User avatar
Apple Bottom
Posts: 1034
Joined: July 27th, 2015, 2:06 pm
Contact:

Re: Hacking apgsearch

Post by Apple Bottom » August 7th, 2017, 7:52 am

BTW, wwei23's version supporting his new symmetries (1x256X2+1 etc) is also available here. (Previously including a little easter egg for the unsuspecting. :))

Here's the diff against the original, unmodified apgsearch-2015-05-25.py:

Code: Select all

--- apgsearch-2015-05-25-unmodified.py  2017-08-07 13:50:54.170005500 +0200
+++ apgsearch-2015-05-25-wwei23-v2.py   2017-08-07 13:50:54.272011300 +0200
@@ -164,7 +164,7 @@
         d = 2
     else:
         d = 0
-
+
     for j in xrange(32):

         t = ord(s[j])
@@ -172,19 +172,61 @@
         for k in xrange(8):

             if (sym == '8x32'):
+
                 x = k + 8*(j % 4)
                 y = int(j / 4)
+
+            elif (sym == '4x64'):
+
+                x = k + 8*(j % 8)
+                y = int(j / 8)
+
+            elif (sym == '2x128'):
+
+                x = k + 8*(j % 16)
+                y = int(j / 16)
+
+            elif (sym in ['1x256', '1x256X2', '1x256X2+1']):
+
+                x = k + 8*(j % 32)
+                y = int(j / 32)
+
             else:
+
                 x = k + 8*(j % 2)
                 y = int(j / 2)

             if (t & (1 << (7 - k))):
-
+
                 if ((d == 0) | (x >= y)):

                     thesoup.append(x)
                     thesoup.append(y)

+                if (sym == '1x256X2+1'):
+
+                    thesoup.append(-x)
+                    thesoup.append(y)
+
+                if (sym == '1x256X2'):
+
+                    thesoup.append(-1-x)
+                    thesoup.append(y)
+
+                if (sym == '32x32'):
+
+                    thesoup.append(x+16)
+                    thesoup.append(y)
+                    thesoup.append(x)
+                    thesoup.append(y+16)
+                    thesoup.append(x+16)
+                    thesoup.append(y+16)
+
+                if (sym == '75p'):
+
+                    thesoup.append(16-y)
+                    thesoup.append(x)
+
                 elif (sym == 'D4_x1'):

                     thesoup.append(y)
@@ -2441,8 +2483,8 @@
         tlist = sorted(self.objectcounts.iteritems(), key=operator.itemgetter(1), reverse=True)
         results += "<p><center>\n"
         results += "<table cellspacing=1 border=2 cols=2>\n"
-        results += "<tr><td>&nbsp;Object&nbsp;</td><td align=center>&nbsp;Common name&nbsp;</td>\n"
-        results += "<td align=right>&nbsp;Count&nbsp;</td><td>&nbsp;Sample occurrences&nbsp;</td></tr>\n"
+        results += "<tr><td> Object </td><td align=center> Common name </td>\n"
+        results += "<td align=right> Count </td><td> Sample occurrences </td></tr>\n"
         for objname, count in tlist:
             if (objname[0] == 'x'):
                 if (objname[1] == 'p'):
@@ -2454,7 +2496,7 @@
             else:
                 results += "<tr bgcolor=\"#FFCECE\">"
             results += "<td>"
-            results += "&nbsp;"
+            results += " "

             # Using "open:" link enables one to click on the object name to open the pattern in Golly:
             rlepath = objectspath + objname + ".rle"
@@ -2463,12 +2505,12 @@
             # If the name is longer than that of the block-laying switch engine:
             if len(objname) > 51:
                 # Contract name and include ellipsis:
-                results += objname[:40] + "&#8230;" + objname[-10:]
+                results += objname[:40] + "…" + objname[-10:]
             else:
                 results += objname
             if (objname[0] == 'x'):
                 results += "</a>"
-            results += "&nbsp;"
+            results += " "

             if (objname[0] == 'x'):
                 # save object in rlepath if it doesn't exist
@@ -2520,27 +2562,27 @@
                     except:
                         g.warn("Unable to create object pattern:\n" + rlepath)

-            results += "</td><td align=center>&nbsp;"
+            results += "</td><td align=center> "
             if (objname in self.commonnames):
                 results += self.commonnames[objname][0]
-            results += "&nbsp;</td><td align=right>&nbsp;" + str(count) + "&nbsp;"
+            results += " </td><td align=right> " + str(count) + " "
             results += "</td><td>"
             if objname in self.alloccur:
-                results += "&nbsp;"
+                results += " "
                 for soup in self.alloccur[objname]:
                     results += self.save_soup(root, soup, symmetry)
-                    results += "&nbsp;"
+                    results += " "
             results += "</td></tr>\n"
         results += "</table>\n</center>\n"

         ilist = sorted(self.soupscores.iteritems(), key=operator.itemgetter(1), reverse=True)
         results += "<p><center>\n"
         results += "<table cellspacing=1 border=2 cols=2>\n"
-        results += "<tr><td>&nbsp;Soup number&nbsp;</td><td align=right>&nbsp;Score&nbsp;</td></tr>\n"
+        results += "<tr><td> Soup number </td><td align=right> Score </td></tr>\n"
         for soupnum, score in ilist[:50]:
-            results += "<tr><td>&nbsp;"
+            results += "<tr><td> "
             results += self.save_soup(root, soupnum, symmetry)
-            results += "&nbsp;</td><td align=right>&nbsp;" + str(score) + "&nbsp;</td></tr>\n"
+            results += " </td><td align=right> " + str(score) + " </td></tr>\n"

         results += "</table>\n</center>\n"
         results += "</body>\n</html>\n"
@@ -2641,13 +2683,16 @@
     # ---------------------------------------------------------------------------------------------------

     # Sanitise input:
-    orignumber = max(orignumber, 100000)
-    orignumber = min(orignumber, 100000000)
+    #orignumber = max(orignumber, 100000)
+    #orignumber = min(orignumber, 100000000)
     number = orignumber
     initpos = 0
-    if symmstring not in ["8x32", "C1", "C2_1", "C2_2", "C2_4", "C4_1", "C4_4", "D2_+1", "D2_+2", "D2_x", "D4_+1", "D4_+2", "D4_+4", "D4_x1", "D4_x4", "D8_1", "D8_4"]:
+    if symmstring not in ["1x256X2+1", "1x256X2", "32x32", "25p", "75p", "1x256", "2x128", "4x64", "8x32", "C1", "C2_1", "C2_2", "C2_4", "C4_1", "C4_4", "D2_+1", "D2_+2", "D2_x", "D4_+1", "D4_+2", "D4_+4", "D4_x1", "D4_x4", "D8_1", "D8_4"]:
         g.exit(symmstring+" is not a valid symmetry option")

+    if symmstring in ["25p"]:
+        g.exit(symmstring+" is faulty and DOES NOT WORK CORRECTLY")
+
     quitapg = False

     # Create associated rule tables:
@@ -2670,7 +2715,12 @@

         # Peer-review some soups:
         for i in xrange(5):
-            apg_verify("b3s23", "C1", payoshakey)
+            apg_verify("b3s23", "32x32", payoshakey)
+            apg_verify("b3s23", "4x64", payoshakey)
+            apg_verify("b3s23", "2x128", payoshakey)
+            apg_verify("b3s23", "1x256", payoshakey)
+            apg_verify("b3s23", "1x256X2", payoshakey)
+            apg_verify("b3s23", "1x256X2+1", payoshakey)

         # The 'for' loop has been replaced with a 'while' loop to allow sqrtspp
         # to vary during runtime. The idea is that apgsearch can apply a basic
@@ -2757,7 +2807,7 @@

     g.new("Symmetry test")

-    symmetries = [["C1", "8x32"],
+    symmetries = [["1x256X2+1", "1x256X2", "32x32", "25p", "75p", "C1", "8x32", "4x64", "2x128", "1x256"],
                   ["C2_1", "C2_2", "C2_4"],
                   ["C4_1", "C4_4"],
                   ["D2_+1", "D2_+2", "D2_x"],
If you speak, your speech must be better than your silence would have been. — Arabian proverb

Catagolue: Apple Bottom • Life Wiki: Apple Bottom • Twitter: @_AppleBottom_

Proud member of the Pattern Raiders!

wwei23

Re: Hacking apgsearch

Post by wwei23 » August 7th, 2017, 9:56 am

Apple Bottom wrote:BTW, wwei23's version supporting his new symmetries (1x256X2+1 etc) is also available here. (Previously including a little easter egg for the unsuspecting. :))

Here's the diff against the original, unmodified apgsearch-2015-05-25.py:

Code: Select all

--- apgsearch-2015-05-25-unmodified.py  2017-08-07 13:50:54.170005500 +0200
+++ apgsearch-2015-05-25-wwei23-v2.py   2017-08-07 13:50:54.272011300 +0200
@@ -164,7 +164,7 @@
         d = 2
     else:
         d = 0
-
+
     for j in xrange(32):

         t = ord(s[j])
@@ -172,19 +172,61 @@
         for k in xrange(8):

             if (sym == '8x32'):
+
                 x = k + 8*(j % 4)
                 y = int(j / 4)
+
+            elif (sym == '4x64'):
+
+                x = k + 8*(j % 8)
+                y = int(j / 8)
+
+            elif (sym == '2x128'):
+
+                x = k + 8*(j % 16)
+                y = int(j / 16)
+
+            elif (sym in ['1x256', '1x256X2', '1x256X2+1']):
+
+                x = k + 8*(j % 32)
+                y = int(j / 32)
+
             else:
+
                 x = k + 8*(j % 2)
                 y = int(j / 2)

             if (t & (1 << (7 - k))):
-
+
                 if ((d == 0) | (x >= y)):

                     thesoup.append(x)
                     thesoup.append(y)

+                if (sym == '1x256X2+1'):
+
+                    thesoup.append(-x)
+                    thesoup.append(y)
+
+                if (sym == '1x256X2'):
+
+                    thesoup.append(-1-x)
+                    thesoup.append(y)
+
+                if (sym == '32x32'):
+
+                    thesoup.append(x+16)
+                    thesoup.append(y)
+                    thesoup.append(x)
+                    thesoup.append(y+16)
+                    thesoup.append(x+16)
+                    thesoup.append(y+16)
+
+                if (sym == '75p'):
+
+                    thesoup.append(16-y)
+                    thesoup.append(x)
+
                 elif (sym == 'D4_x1'):

                     thesoup.append(y)
@@ -2441,8 +2483,8 @@
         tlist = sorted(self.objectcounts.iteritems(), key=operator.itemgetter(1), reverse=True)
         results += "<p><center>\n"
         results += "<table cellspacing=1 border=2 cols=2>\n"
-        results += "<tr><td>&nbsp;Object&nbsp;</td><td align=center>&nbsp;Common name&nbsp;</td>\n"
-        results += "<td align=right>&nbsp;Count&nbsp;</td><td>&nbsp;Sample occurrences&nbsp;</td></tr>\n"
+        results += "<tr><td> Object </td><td align=center> Common name </td>\n"
+        results += "<td align=right> Count </td><td> Sample occurrences </td></tr>\n"
         for objname, count in tlist:
             if (objname[0] == 'x'):
                 if (objname[1] == 'p'):
@@ -2454,7 +2496,7 @@
             else:
                 results += "<tr bgcolor=\"#FFCECE\">"
             results += "<td>"
-            results += "&nbsp;"
+            results += " "

             # Using "open:" link enables one to click on the object name to open the pattern in Golly:
             rlepath = objectspath + objname + ".rle"
@@ -2463,12 +2505,12 @@
             # If the name is longer than that of the block-laying switch engine:
             if len(objname) > 51:
                 # Contract name and include ellipsis:
-                results += objname[:40] + "&#8230;" + objname[-10:]
+                results += objname[:40] + "…" + objname[-10:]
             else:
                 results += objname
             if (objname[0] == 'x'):
                 results += "</a>"
-            results += "&nbsp;"
+            results += " "

             if (objname[0] == 'x'):
                 # save object in rlepath if it doesn't exist
@@ -2520,27 +2562,27 @@
                     except:
                         g.warn("Unable to create object pattern:\n" + rlepath)

-            results += "</td><td align=center>&nbsp;"
+            results += "</td><td align=center> "
             if (objname in self.commonnames):
                 results += self.commonnames[objname][0]
-            results += "&nbsp;</td><td align=right>&nbsp;" + str(count) + "&nbsp;"
+            results += " </td><td align=right> " + str(count) + " "
             results += "</td><td>"
             if objname in self.alloccur:
-                results += "&nbsp;"
+                results += " "
                 for soup in self.alloccur[objname]:
                     results += self.save_soup(root, soup, symmetry)
-                    results += "&nbsp;"
+                    results += " "
             results += "</td></tr>\n"
         results += "</table>\n</center>\n"

         ilist = sorted(self.soupscores.iteritems(), key=operator.itemgetter(1), reverse=True)
         results += "<p><center>\n"
         results += "<table cellspacing=1 border=2 cols=2>\n"
-        results += "<tr><td>&nbsp;Soup number&nbsp;</td><td align=right>&nbsp;Score&nbsp;</td></tr>\n"
+        results += "<tr><td> Soup number </td><td align=right> Score </td></tr>\n"
         for soupnum, score in ilist[:50]:
-            results += "<tr><td>&nbsp;"
+            results += "<tr><td> "
             results += self.save_soup(root, soupnum, symmetry)
-            results += "&nbsp;</td><td align=right>&nbsp;" + str(score) + "&nbsp;</td></tr>\n"
+            results += " </td><td align=right> " + str(score) + " </td></tr>\n"

         results += "</table>\n</center>\n"
         results += "</body>\n</html>\n"
@@ -2641,13 +2683,16 @@
     # ---------------------------------------------------------------------------------------------------

     # Sanitise input:
-    orignumber = max(orignumber, 100000)
-    orignumber = min(orignumber, 100000000)
+    #orignumber = max(orignumber, 100000)
+    #orignumber = min(orignumber, 100000000)
     number = orignumber
     initpos = 0
-    if symmstring not in ["8x32", "C1", "C2_1", "C2_2", "C2_4", "C4_1", "C4_4", "D2_+1", "D2_+2", "D2_x", "D4_+1", "D4_+2", "D4_+4", "D4_x1", "D4_x4", "D8_1", "D8_4"]:
+    if symmstring not in ["1x256X2+1", "1x256X2", "32x32", "25p", "75p", "1x256", "2x128", "4x64", "8x32", "C1", "C2_1", "C2_2", "C2_4", "C4_1", "C4_4", "D2_+1", "D2_+2", "D2_x", "D4_+1", "D4_+2", "D4_+4", "D4_x1", "D4_x4", "D8_1", "D8_4"]:
         g.exit(symmstring+" is not a valid symmetry option")

+    if symmstring in ["25p"]:
+        g.exit(symmstring+" is faulty and DOES NOT WORK CORRECTLY")
+
     quitapg = False

     # Create associated rule tables:
@@ -2670,7 +2715,12 @@

         # Peer-review some soups:
         for i in xrange(5):
-            apg_verify("b3s23", "C1", payoshakey)
+            apg_verify("b3s23", "32x32", payoshakey)
+            apg_verify("b3s23", "4x64", payoshakey)
+            apg_verify("b3s23", "2x128", payoshakey)
+            apg_verify("b3s23", "1x256", payoshakey)
+            apg_verify("b3s23", "1x256X2", payoshakey)
+            apg_verify("b3s23", "1x256X2+1", payoshakey)

         # The 'for' loop has been replaced with a 'while' loop to allow sqrtspp
         # to vary during runtime. The idea is that apgsearch can apply a basic
@@ -2757,7 +2807,7 @@

     g.new("Symmetry test")

-    symmetries = [["C1", "8x32"],
+    symmetries = [["1x256X2+1", "1x256X2", "32x32", "25p", "75p", "C1", "8x32", "4x64", "2x128", "1x256"],
                   ["C2_1", "C2_2", "C2_4"],
                   ["C4_1", "C4_4"],
                   ["D2_+1", "D2_+2", "D2_x"],
Hey! It's not even Easter yet!

User avatar
muzik
Posts: 5648
Joined: January 28th, 2016, 2:47 pm
Location: Scotland

Re: Hacking apgsearch

Post by muzik » August 7th, 2017, 10:26 am

Wait... is that his payosha256 key?

wwei23

Re: Hacking apgsearch

Post by wwei23 » August 7th, 2017, 10:35 am

muzik wrote:Wait... is that his payosha256 key?
Me undo ALL the edits.

User avatar
Rhombic
Posts: 1072
Joined: June 1st, 2013, 5:41 pm

Re: Hacking apgsearch

Post by Rhombic » August 7th, 2017, 12:36 pm

muzik wrote:Wait... is that his payosha256 key?
Apparently so... guess what, payosha keys can get overwritten :lol:

EDIT: wwei, you might want to reclaim your payosha key or change it, I thought you were going to notice sooner :oops:

spoiler alert catagolue.appspot.com/haul/b2e3eijs2-ein/C1?committed=2
Last edited by Rhombic on August 7th, 2017, 12:58 pm, edited 1 time in total.
SoL : FreeElectronics : DeadlyEnemies : 6a-ite : Rule X3VI
what is “sesame oil”?

User avatar
Apple Bottom
Posts: 1034
Joined: July 27th, 2015, 2:06 pm
Contact:

Re: Hacking apgsearch

Post by Apple Bottom » August 7th, 2017, 12:42 pm

muzik wrote:Wait... is that his payosha256 key?
Yes. I don't know if this was intentional, but posting a version of apgsearch that would submit all results in your name rather than that of the user running it -- honi soit qui mal y pense!

I wouldn't have mentioned this if it had been a password or so, but given that you can't use a Payosha key for anything other than submitting Catagolue results anyway, I see little harm in it. (And it's all in the wiki page's history anyway.)
If you speak, your speech must be better than your silence would have been. — Arabian proverb

Catagolue: Apple Bottom • Life Wiki: Apple Bottom • Twitter: @_AppleBottom_

Proud member of the Pattern Raiders!

User avatar
Rhombic
Posts: 1072
Joined: June 1st, 2013, 5:41 pm

Re: Hacking apgsearch

Post by Rhombic » August 7th, 2017, 12:44 pm

wildmyron wrote:Here is apgsearch-blonksoup.py
Can someone expand this for non-totalistic rules?
SoL : FreeElectronics : DeadlyEnemies : 6a-ite : Rule X3VI
what is “sesame oil”?

wwei23

Re: Hacking apgsearch

Post by wwei23 » August 7th, 2017, 5:08 pm

Apple Bottom wrote:
muzik wrote:honi soit qui mal y pense!
Honi is which ill think about it

User avatar
praosylen
Posts: 2443
Joined: September 13th, 2014, 5:36 pm
Location: Pembina University, Home of the Gliders
Contact:

Re: Hacking apgsearch

Post by praosylen » August 7th, 2017, 6:07 pm

apgsearch-2017-8-07-v0.54+0.31i.py.zip
(160.21 KiB) Downloaded 317 times
Adds 4x64, 2x128, and 1x256 symmetries. I'm hesitant to add any others of @wwei23's, because Catagolue doesn't support them yet and, frankly, they don't seem *quite* as interesting as the others. Also (hopefully) fixes the long-standing ov_qN bug.
former username: A for Awesome
praosylen#5847 (Discord)

The only decision I made was made
of flowers, to jump universes to one of springtime in
a land of former winter, where no invisible walls stood,
or could stand for more than a few hours at most...

wwei23

Re: Hacking apgsearch

Post by wwei23 » August 7th, 2017, 7:13 pm

drc wrote:Ok, apgsearch behaves REALLY weirdly with B356/S234k for no discernable reason. It's non-explosive, but it always forms a big square and doesn't let me stop the script in Golly sometimes.
Because B356/S23 explodes? Why does S4k stabilize it? How does that work?

wildmyron
Posts: 1544
Joined: August 9th, 2013, 12:45 am
Location: Western Australia

Re: Hacking apgsearch

Post by wildmyron » August 7th, 2017, 11:33 pm

Rhombic wrote:
wildmyron wrote:Here is apgsearch-blonksoup.py
Can someone expand this for non-totalistic rules?
This is not something I have much interest in doing, but you should be able to do yourself. You could get something working with the following minimal modifications to the current isotropic apgsearch:
  • Disable submission to Catagolue
  • Replace the soup generator with the blonksoup generator (and remove the use of symmetry options)
  • Make sure that the soup stabilisation phase runs the soup for long enough for the first interaction to take place before testing for stability
Then there will be several other optimisations required dependent on the rule you want to run:
  • Test that the glider, block and blinker all work in the rule
  • Modify the glider lane placement - either choose any lane in which glider will interact or customize the lanes the glider can be placed on to ensure the majority of soups don't immediately die out
  • Adjust the stabilisation tests if necessary (short running soups may be more likely to release gliders which interact with distant blonks - but the stabilisation routine halts prematurely
  • Replace blocks and blinkers with whatever the most common objects are in the rule being searched
I'm happy to try to answer any questions you might have about the blonksoup specific code, but it has been a long time since I looked at it.
The 5S project (Smallest Spaceships Supporting Specific Speeds) is now maintained by AforAmpere. The latest collection is hosted on GitHub and contains well over 1,000,000 spaceships.

Semi-active here - recovering from a severe case of LWTDS.

User avatar
toroidalet
Posts: 1514
Joined: August 7th, 2016, 1:48 pm
Location: My computer
Contact:

Re: Hacking apgsearch

Post by toroidalet » August 8th, 2017, 11:04 am

Whenever I try apgsearching B3-n4-an/S2-i34-aet then I get an error saying that APG_IdentifyTs doesn't exist. Does someone have the rule?
Any sufficiently advanced software is indistinguishable from malice.

User avatar
praosylen
Posts: 2443
Joined: September 13th, 2014, 5:36 pm
Location: Pembina University, Home of the Gliders
Contact:

Re: Hacking apgsearch

Post by praosylen » August 8th, 2017, 4:52 pm

toroidalet wrote:Whenever I try apgsearching B3-n4-an/S2-i34-aet then I get an error saying that APG_IdentifyTs doesn't exist. Does someone have the rule?
That's odd... It should be autogenerated. Well, here it is, anyway:

Code: Select all

@RULE APG_IdentifyTs

*** File autogenerated by saverule. ***


To identify the common spaceship xq4_27, also known as the T.

state 0:  vacuum
state 11:  p3+ on
state 12:  p3+ off
state 13:  T on
state 14:  T off
state 15:  not-T on
state 16:  not-T off


@TABLE


n_states:18
neighborhood:Moore
symmetries:rotate4reflect
var a={0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17}
var aa=a
var ab=a
var ac=a
var ad=a
var ae=a
var af=a
var ag=a
var o={0,2,12,14}
var oa=o
var ob=o
var oc=o
var od=o
var s={5,6,17}
var sa=s
var sb=s
var sc=s
var n={7,8,9,10,11,15,16}
var xo={2,4,6,14}
var xn={1,3,5,13,17}
var i={11,12}
var io={0,1,2,11,12}
var ioa=io
var b={0,12}
11,11,o,12,11,12,11,12,oa,1
11,11,12,o,oa,io,oc,od,12,1
11,12,11,o,oa,ob,oc,12,12,1
11,12,12,12,12,12,12,12,12,1
11,12,11,o,oa,ob,oc,od,11,1
11,11,o,11,oa,11,io,io,io,1
11,11,11,11,11,12,o,oa,ob,1
11,11,11,o,oa,io,ob,oc,11,1
11,11,11,o,oa,ob,oc,12,12,1
11,11,o,11,oa,11,io,ioa,io,1
11,11,12,11,12,11,12,o,0,1
11,11,11,11,io,ioa,o,oa,ob,1
11,11,11,o,oa,ob,oc,od,12,1
12,11,o,11,oa,11,12,12,12,2
12,11,11,o,oa,ob,oc,11,12,2
12,11,12,12,11,12,11,12,12,2
12,11,12,12,11,i,o,oa,ob,2
12,11,12,12,o,oa,ob,12,12,2
b,11,11,o,io,oa,ioa,ob,11,2
12,11,11,12,o,o,oa,ob,ob,2
12,11,11,11,11,12,o,oa,ob,2
b,11,11,11,o,oa,ob,oc,od,2
1,1,2,1,2,1,2,1,2,15
1,2,1,o,oa,ob,oc,od,1,3
1,1,o,2,1,2,1,2,oa,3
1,1,2,o,oa,io,oc,od,2,3
1,2,1,o,oa,ob,oc,2,2,3
1,2,2,2,2,2,o,oa,ob,3
1,1,o,1,oa,1,io,ioa,io,3
1,1,2,1,2,1,12,2,0,3
1,1,2,1,2,1,2,o,0,3
1,1,1,1,io,ioa,o,oa,ob,3
1,1,1,2,o,oa,ob,2,1,3
1,1,1,o,oa,ob,oc,od,2,3
1,1,1,2,2,1,2,2,1,3
2,1,2,2,1,2,1,2,2,4
2,1,2,2,1,12,12,12,2,12
2,1,12,2,1,2,12,12,12,12
2,1,o,12,a,aa,ab,12,oa,12
2,2,1,2,12,1,o,o,o,12
2,1,o,1,oa,1,2,2,2,4
2,1,1,o,oa,ob,oc,1,2,4
2,1,2,1,2,1,2,2,2,4
2,1,2,2,1,io,o,oa,ob,4
2,1,2,2,o,oa,ob,oc,od,4
2,1,1,o,io,oa,ioa,ob,1,4
2,1,1,2,o,oa,ob,oc,od,4
2,1,1,1,o,oa,ob,oc,od,4
2,1,1,1,1,2,o,oa,ob,4
4,3,3,4,3,4,3,4,3,6
6,3,3,4,3,4,3,4,3,4
4,3,4,3,4,3,4,4,4,6
6,3,4,3,4,3,4,4,4,4
3,3,3,3,3,3,4,3,4,5
5,3,3,3,3,3,4,3,4,3
3,3,4,3,4,3,4,4,4,5
5,3,4,3,4,3,4,4,4,3
3,3,3,4,4,3,4,4,3,5
5,3,3,4,4,3,4,4,3,3
3,5,5,4,12,12,12,4,4,17
3,s,a,aa,ab,ac,ad,ae,af,5
4,s,a,aa,ab,ac,ad,ae,af,6
3,a,s,aa,ab,ac,ad,ae,af,5
4,a,s,aa,ab,ac,ad,ae,af,6
6,12,6,5,5,6,o,oa,ob,12
6,s,sa,sb,a,aa,ab,ac,ad,14
6,s,sa,a,aa,ab,ac,ad,sb,14
5,s,sa,a,aa,ab,ac,ad,sb,13
5,s,sa,sb,a,aa,ac,ac,ad,13
6,13,o,oa,oa,14,13,6,14,12
17,14,14,13,13,14,12,12,12,13
14,17,13,14,o,oa,12,12,12,12
xn,n,a,aa,ab,ac,ad,ae,af,15
xo,n,a,aa,ab,ac,ad,ae,af,16
xn,a,n,aa,ab,ac,ad,ae,af,15
xo,a,n,aa,ab,ac,ad,ae,af,16
1,a,aa,ab,ac,ad,ae,af,ag,15
2,a,aa,ab,ac,ad,ae,af,ag,16


@COLORS


0    0    0    0
1  255  255  255
2  127  127  127
7    0    0  255
8    0    0  127
9  255    0    0
10 127    0    0
11   0  255    0
12   0  127    0
13 255  255    0
14 127  127    0
17 127    0  127
former username: A for Awesome
praosylen#5847 (Discord)

The only decision I made was made
of flowers, to jump universes to one of springtime in
a land of former winter, where no invisible walls stood,
or could stand for more than a few hours at most...

Post Reply