Sorry, as I said in my first post, I thought this construction was worth highlighting in its own topic rather than repurposing some threads from last March. The previous threads were mostly resurrected (Side note: I find it an unusual convention on this website that new threads and even new posts are discouraged in favor of editing previous ones; it seems like a recipe for preventing people from seeing anything new unless they go looking for it--and I am not that much of an optimist.)
For instance, I have been pretty disciplined about keeping stream splitters in the (old) thread I opened for that topic, even to the extent of making multiple updates to the same post for days before add a new one.
Chris Rowett reopened the "serious survey of constructions" thread
http://www.conwaylife.com/forums/viewto ... =11&t=3918 when announcing his improvements to LifeViewer. Most of my new comments on that thread have been in response to his improvements, including some patterns.
If patterns such as the loop-copier are actually old news, then I'm not sure where to find similar results (please, I'd love to see more advanced work in this direction). Most Critters papers I have seen cover general properties and reversibility rather than engineering design. It is entirely possible that some group is way ahead on this kind of thing and either not publishing or I am not doing a sufficient literature search (I have tried).
My overall project here is to develop a framework for self-replicating universal computers in the Critters universe given the addition of a single uniform glider stream entering from infinity (since any finite pattern is guaranteed to maintain the same cell count*).
I guess there is not all that much interest in Margolus Critters, but I keep hoping anyway. I will avoid spawning any additional threads, but I am a little confused as to why it's an issue.
*A finite bound on the number of cells does not equate to a finite number of states, and e.g. Life with several counters based on block pusher/pullers can simulate a Turing machine tape with a fixed bound on cell count at an exponential cost in time complexity. I do not believe there is such a construction in Critters, my intuition being that there is almost no way to recover all the gliders that might be used for pushing blocks or the equivalent and you can't just make new ones as in Life. That would probably be a harder thing to prove than to find a counterexample, if one exists. If anyone can resolve this, I'm interested. However, block memories don't interest me very much because to the exponential slowdown.
UPDATE (9/28/19): Using the reflector-shifting method (see splitting thread) we can make a loop that is readable but does not require a glider stream as input.
Code: Select all
x = 213, y = 107, rule = critters
#C [[ RLE input o$bo$bo$o! ]]
#C [[ PASTET EVERY 32 ]]
#C [[ PASTE input 1 64 ]]
17$129b2o54b2o$129b2o54b2o7$121b2o70b2o$121b2o70b2o5$188b2o$187bo2bo$
185bo6bo$186bo4bo5$187bo2bo2$188b2o6$37b2o$37b2o5$39bo2bo2$40b2o6$73b
2o$73b2o2$126b2o$bo15bo170b2o$2bo15bo64bo41bo2bo58bo2bo$2bo15bo64bo$b
o15bo$113bo$114bo$69bo54bo4bo57bo2bo$70bo52bo6bo$125bo2bo59b2o$126b2o
$33bo2bo$34b2o3$73b2o46b2o70b2o$73b2o46b2o70b2o5$31b2o$31b2o$129b2o54b
2o$129b2o54b2o!
Here is the same pattern with an additional trick for synching up the timing.
Code: Select all
x = 271, y = 134, rule = critters
#C [[ RLE input o$bo$bo$o! ]]
#C [[ PASTET EVERY 32 ]]
#C [[ PASTE input 29 79 ]]
31$135b2o54b2o$135b2o54b2o7$127b2o65b2o3b2o$127b2o64bo2bo2b2o5$193bo2b
o2$194b2o2$191bo6bo$192bo4bo11$43b2o$43bobo$44bo3bo$46b2o9$194b2o$193b
o2bo$79b2o$79b2o3$29bo15bo9bo21bo9b2o104bo2bo$30bo15bo9bo21bo8bo$30bo
15bo9bo21bo8bo106b2o$29bo15bo9bo21bo9b2o$119bo10bo4bo$120bo8bo6bo$75b
o$76bo55b2o$87bo14bo16bo6bo24bo14bo16bo14bo$88bo11bo19bo4bo5bo2bo17bo
11bo19bo11bo$88bo11bo19bo4bo26bo11bo19bo11bo$87bo14bo16bo6bo24bo14bo16b
o14bo3$79b2o46b2o2bo2bo64b2o$79b2o46b2o3b2o65b2o$39bo2bo$40b2o3$37b2o
$37b2o$135b2o54b2o$135b2o54b2o3$115bo18bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3b
o3bo3bo3bo3bo3bo3bo3bo$116bo16bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3b
o3bo3bo3bo3bo$215bo14bo16bo14bo$216bo11bo19bo11bo$216bo11bo19bo11bo$215b
o14bo16bo14bo$133bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3b
o$134bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo3bo$120bo$119b
o!
Update (9/29/19):
We can use a similar method to stagger the uniform period signal with a relay that doesn't require the signal to be present. However, I was unable to compress the initial stream below period-64. I have some other ideas and I think it may be possible for a period-32 stream.
Code: Select all
x = 143, y = 55, rule = critters
#C [[ RLE input o$bo$bo$o! ]]
#C [[ PASTET EVERY 64 ]]
#C [[ PASTE input 0 28 ]]
$72bo4$89bo$90bo3$73bo2bo$74b2o10$86b2o2$85bo2bo3$72bo4bo45bo$71bo6bo
45bo3$bo138bo$2bo$2bo$bo138bo3$71bo12bo4bo$72bo10bo6bo5$89b2o$89b2o$121b
2o$121b2o7$124bo$123bo!
In Conway's Life, it is possible to build sparky oscillators, but in Critters, there is no such thing as a spark (which vanishes and is therefore irreversible). Movable reflectors make it possible to do some of the same things.
Work in progress: What if we use a recirculating loop instead of shuttles. I think I can get the period down to 48 with appropriate timing:
Code: Select all
x = 52, y = 66, rule = critters
15$21b2o4b2o$21b2o4b2o3$9bo8b2o20bo$17bo2bo2$9bo30bo3$17bo2bo6bo6bo$28b
o4bo$18b2o8$16bo4bo$15bo6bo11$12bo24bo3$12bo24bo3$21b2o4b2o$21b2o4b2o
!
A different approach brings it down to 48.
Code: Select all
x = 101, y = 71, rule = critters
#C [[ RLE input o$bo$bo$o! ]]
#C [[ PASTET EVERY 48 ]]
#C [[ PASTE input 8 38 ]]
21$79b2o$79b2o4$82b2o2$81bo2bo3$77bo$78bo3$72bo2bo$71bo4bo3$9bo$10bo$
10bo$9bo3$78bo2bo$77bo4bo3$76bo$75bo6$70b2o2$69bo2bo$73b2o$73b2o!
Update (10/1/19):
As a somewhat trivial observation, it is possible to stabilize the period-32 phase shifters into period-128 glider relays. It allows for gaps before the input stream arrives, but it does need to arrive at the correct step mod-128. I.e., only every fourth glider can be used to start it.
Code: Select all
x = 302, y = 137, rule = critters
#C [[ RLE input o$bo$bo$o! ]]
#C [[ PASTET EVERY 32 ]]
#C [[ PASTE input 1 83 ]]
35$221b2o54b2o$221b2o54b2o2$218b2o2$217bo2bo3$213b2o70b2o$213b2o70b2o
$217bo2bo$218b2o7$277bo6bo$278bo4bo11$135b2o$135b2o3$123bo$124bo9$165b
2o$165b2o$131bo2bo$132b2o$bo$2bo172bo$2bo172bo$bo$205bo10bo4bo$206bo8b
o6bo$125bo2bo32bo$162bo$126b2o4$280b2o$279bo2bo$165b2o46b2o70b2o$165b
2o46b2o70b2o$136bo115bo4bo$135bo114bo7bo$250bo7bo20bo2bo$252bo4bo$123b
2o155b2o$123b2o$221b2o54b2o$221b2o54b2o!
Update (10/7/19): Above with improved 90° reflectors.
Code: Select all
x = 291, y = 104, rule = critters
#C [[ RLE input o$bo$bo$o! ]]
#C [[ PASTET EVERY 32 ]]
#C [[ PASTE input 4 61 ]]
x = 319, y = 94, rule = critters
15$245bo10bo4bo46bo$244bo10bo7bo45bo$243bo11bo7bo46bo$256bo4bo11$305b
o6bo$306bo4bo13$167b2o$167b2o3$155bo$156bo7$197bo$198bo$163bo2bo2$164b
2o2$5bo202bo$6bo$6bo150bo2bo$5bo152b2o48bo$231bo10bo4bo$232bo8bo6bo3$
200bo2$202bo$199bo5$168bo91bo4bo26bo4bo$167bo75bo14bo7bo23bo7bo11bo$244b
o13bo7bo23bo7bo10bo$245bo14bo4bo26bo4bo10bo$155b2o$155b2o!