Splitting a glider stream in Margolus Critters

For discussion of other cellular automata.
Post Reply
User avatar
pcallahan
Posts: 955
Joined: April 26th, 2013, 1:04 pm

Splitting a glider stream in Margolus Critters

Post by pcallahan »

I'm starting a new thread because this is the first thing that looks like a useful result for what I have been thinking about. I'm also not saying it's new (in fact the gadget consists of a single cell, so it must have been noticed) but I'm unsure if Critters has been studied from this viewpoint. The question is what it would take to build universal constructors in Critters. It is tricky but not impossible. Reversibility is not a fatal problem as long as we have paths for escaping gliders to move "history" out of the active area, effectively simulating irreversibility much as we do in the real world, by producing waste heat.

As I said in the other thread, to get around the issue of conservation of cells:

Begin with a single fixed-period glider stream entering from infinity. No gun can exist in Critters, so this stream is there by fiat. Is this "cheating"? Well, is it cheating for a plant to require sunlight to grow? If we have physics-like rules, we will not have devices that produce energy out of nothing, so we do need some source of energy.

My question was whether this source of gliders can be split in such a way to be used in multiple patterns. It turns out that a period-8n stream can be split using a single cell that acts as a 180 degree reflector but also creates collisions resulting in 90 degree deflections.

I started with the glider in this phase (moving right) such that its upper left cell is at (1, 1) set to collide with a single cell at (1, 4) (note this will not work in viewer)

Code: Select all

o..o
.o
.o
o
In general, let there be an infinite stream of gliders positioned at (1, 1-8nj) for j=0, 1, 2, ... This is in effect, the only kind of "gun" you will get in the Critters rule because of reversibility and cell conservation. But it is a legitimate infinite periodic pattern. I'd like to avoid having lots of these, so the goal is to split it into other glider sources at other locations.

In Critters, when two gliders collide, at least one must eventually emerge, usually two. But one thing that makes the world a little more friendly is that backward gliders can often pass through a forward stream "transparently" without interacting at all. That is how we deal with backward gliders in this splitter if they don't eventually rebound.

You can look at the RLE pattern with 25 gliders (j<25 and n=2) in viewer. I have put two additional cells set to split the 90-degree output stream of the original stream to demonstrate that it can be chained. You need n>=2 for sufficient spacing, and need to work a little to avoid having the backward gliders collide with the initial stream.

Code: Select all

x = 411, y = 321, rule = critters
34$391bo127$13bo15bo15bo15bo15bo15bo15bo15bo15bo15bo15bo15bo15bo15bo15b
o15bo15bo15bo15bo15bo15bo15bo15bo15bo15bo2bo$14bo15bo15bo15bo15bo15bo
15bo15bo15bo15bo15bo15bo15bo15bo15bo15bo15bo15bo15bo15bo15bo15bo15bo15b
o15bo$14bo15bo15bo15bo15bo15bo15bo15bo15bo15bo15bo15bo15bo15bo15bo15b
o15bo15bo15bo15bo15bo15bo15bo15bo15bo$13bo15bo15bo15bo15bo15bo15bo15b
o15bo15bo15bo15bo15bo15bo15bo15bo15bo15bo15bo15bo15bo15bo15bo15bo15bo
143$391bo!
You can watch the above pattern run in this online RCA app.

So what happens in this splitter? (1) The first glider passes through the cell unchanged, but moves the cell to a reflector position. (2) The second glider is reflected back from the cell. (3) The second glider collides with the third glider, creating fixed debris A and a reflected glider B. (4) B passes through the cell phase-shifted and escapes. (5) The fourth glider collides with the fixed debris, producing a backward glider C and a forward glider D. C continues backward through the period-8n stream without interacting. D is reflected back from the cell and collides with the fifth glider, producing E and F heading up and down relative to the stream.

Here is what a stream of 5 gliders looks like in the app.

The up and down streams have the right periodicity to be split again. (The forward stream has gliders out of phase) They can be split because they originate from a collision point that is normally empty space. So the backward gliders will not hit the splitter cell. In fact, they collide with each other to produce forward and backward gliders producing a third glider. This has to be staggered to avoid the original stream (i.e. the next splitters cannot be placed symmetrically).

Finally, for a stream of 25 gliders on a single path chaining splitters as shown, we get 3 gliders out on parallel paths. These can be split further. We are "wasting" gliders of course, but there are infinitely many. A universal constructor built with such a trickle of raw material would be slow, but there is no reason in theory it could not work.

Note that the gliders that continue forward out of phase can actually be deflected 90 degrees like this (see app). So we can probably do a lot better than a reduction of 3/25 every time we split the stream. This is just a proof of concept.

ADDED: Here is a small python program for applying Critters transitions to sparse cell lists:

Code: Select all

# construct margolus transition tables for critters
def make_critters_table():
  table = []
  for i in range(16):
    window = [(i>>b) & 1 for b in range(4)]
    ct = sum(x for x in window)
    if ct in [0, 1, 4]:
      nexti = i ^ 0xf
    elif ct == 2:
      nexti = i
    else:
      nexti = sum(window[i] << (3 - i)
                  for i in range(4)) ^ 0xf
    table.append(nexti)
  return table

TABLE = make_critters_table()

# collect individual cells into 2x2 boxes at offset
def pack_cells(cells, offset):
  windows = {}
  # toggle vacuum between 0 and 1
  default = 0xf * offset
  for i, j in cells:
    di = (i + offset) % 2
    dj = (j + offset) % 2
    pos = (i - di, j - dj)
    windows[pos] = (windows.get(pos, default) ^
                    (1 << (di * 2) + dj))
  return windows


# apply transition rule to boxes
def apply_rule(windows, table):
  for pos in windows:
    windows[pos] = table[windows[pos]]


# unpack boxes
def unpack_cells(windows, offset):
  for pos in windows:
    # toggle vaccuum between 1 and 0
    window = windows[pos] ^ ((offset ^ 1) * 0xf)
    for di in range(2):
      for dj in range(2):
        if ((window >> (di * 2) + dj) & 1):
          yield pos[0] + di, pos[1] + dj


def run(cells, offset):
  windows = pack_cells(cells, offset)
  apply_rule(windows, TABLE)
  return list(unpack_cells(windows, offset)), offset ^ 1


def show(cells):
  for cell in sorted(cells):
    print('%d %d' % cell)


# construct a stream of gliders
glider = [(1, 1), (2, 2), (3, 2), (4, 1)]
cells = [(celli, cellj - 16 * j)  for celli, cellj in glider
          for j in range(5)]
# append a reflector cell
cells.append((1, 4))


offset = 0
print('cells at generation 0')
show(cells)

generations = 120
for step in range(generations):
  cells, offset = run(cells, offset)
print('cells at generation %d' % generations)
show(cells)
It can be run at this repl.it link. The pattern is preset to be 5 gliders spaced 16 cells apart approaching the reflector cell. There are no graphics (though I use a clunky Python turtle graphics approach offline). I was trying to come up with an easy way to get a cell list into Golly for viewing. Anyone know?
Last edited by pcallahan on December 2nd, 2019, 2:54 pm, edited 1 time in total.
User avatar
pcallahan
Posts: 955
Joined: April 26th, 2013, 1:04 pm

Re: Splitting a glider stream in Margolus Critters

Post by pcallahan »

Change in topic, but still related to glider streams. How do you reflect them 90 degrees? (180 is almost trivial) There are a few mechanisms, but they don't quite work. Two adjacent diagonal cells in a 2x2 box can reflect a stream 90 degrees, but the box is shifted each time and needs to be shifted back. Another small device lets every other glider pass through and reflects the next one 90 degrees, but it gets pulled back into the stream, causing the perpendicular stream to be shifted. Here is a pattern that combines these mechanisms.

The other way to get perpendicular reflections is to reflect a glider back into another glider and collide in the right way. However, this only works if the gliders are out of phase in the same way as the two forward gliders from the one-cell splitter of the last post.

I just realized, though, that if you reflect back one of the gliders after the collision, you get a pair of gliders out of phase in the right way to be reflected 90 degrees. So the conclusion is that even if there is no simple way to turn a single glider 90 degrees, it is easy to turn these tandem pairs. Maybe this is the right choice for carrying signals.

Four 90 degree reflectors can be combined into a recirculating glider loop.

Of course, it would still be very nice to have a way to reflect a single glider 90 degrees. I am not sure if there is any theoretical reason why that would not work. Occasionally, you get chaotic reflectors that emit gliders in a seemingly random direction. It would require a search to see if anything works predictably and returns to its original phase and position.

ADDED: Here's another interesting reaction where a stream of gliders pulls two fixed objects together to eventually convert them into a glider pair. It uses the 2x2 diagonal pairs, which function sort of like half-gliders in a variety of reactions.
User avatar
pcallahan
Posts: 955
Joined: April 26th, 2013, 1:04 pm

Re: Splitting a glider stream in Margolus Critters

Post by pcallahan »

For much more prolific splitting, we can use the out-of-phase glider pairs by applying oscillating glider collisions timed to deflect every kth glider pair from the stream.

Here is an example sending every other glider pair off on a different path.
User avatar
pcallahan
Posts: 955
Joined: April 26th, 2013, 1:04 pm

Re: Splitting a glider stream in Margolus Critters

Post by pcallahan »

With the new viewer features, I can illustrate stream-splitting as in the previous post with an endless stream (supplied by scripting). I don't remember entirely what I was trying to accomplish here, but it is definitely better to watch in LifeViewer. I wish I had a method of splitting a uniform stream without the backwards gliders.

Code: Select all

x = 500, y = 500, rule = critters
#C [[ RLE input 13bo$14bo$14bo$13bo! ]] this is the input
#C [[ PASTET EVERY 16 ]] set paste interval every 64 generations
#C [[ PASTE input -21 250 ]] paste the input at this location
251$bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo$2bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo2bo$2bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo$bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo3$335bo2bo$336b2o17$357bo2bo$358b2o19$333b2o20b2o$333b2o20b2o
Here's a variation. In order to turn gliders 90 degrees, I need out of phase pairs. I wondered if I could do that with a gliders on reflecting paths, but the best I manage here is to stagger alternate gliders (upper left stream) without changing their phase usefully.

Code: Select all

x = 1153, y = 331, rule = critters
#C [[ RLE input 2bo$o$o$2bo! ]] this is the input
#C [[ PASTET EVERY 16 ]] set paste interval every 16 generations
#C [[ PASTE input 69 165 ]] paste the input at this location
109$1019bo$1021bo$1021bo$1019bo$961b2o$961b2o7$961b2o$961b2o$1032bo$1031b
o$1031bo$1032bo22$1036b2o2$1035bo2bo15$72bo7bo7bo7bo7bo7bo7bo7bo7bo7b
o7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7b
o7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7b
o7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7b
o7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7b
o7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo25bo$70bo7bo7bo7bo7bo7bo7bo7b
o7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7b
o7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7b
o7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7b
o7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7b
o7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo75b2o$70bo7bo7bo7bo7bo7b
o7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7b
o7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7b
o7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7b
o7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7b
o7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo$72bo7bo7bo7bo7bo
7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo
7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo
7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo
7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo
7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo7bo72bo2bo41$1033b
2o20b2o$1033b2o20b2o!
Here's the same reaction by itself.

Code: Select all

x = 51, y = 58, rule = critters
#C [[ RLE input b2o$o2bo! ]] this is the input
#C [[ PASTET EVERY 80 ]] set paste interval every 16 generations
#C [[ PASTE input 44 53 ]] paste the input at this location
5$9bo$11bo$11bo$9bo$3b2o$3b2o7$3b2o$3b2o$22bo$21bo$21bo$22bo31$46b2o$
45bo2bo!
User avatar
pcallahan
Posts: 955
Joined: April 26th, 2013, 1:04 pm

Re: Splitting a glider stream in Margolus Critters

Post by pcallahan »

Here's a much cleaner splitter for a period-80 stream. I believe the same method works for any 8n stream, but you need to change some of the spacing for higher periods.

Code: Select all

x = 225, y = 112, rule = critters
#C [[ RLE input o$bo$bo$o! ]] 
#C [[ PASTET EVERY 80 ]] 
#C [[ PASTE input -40 42 ]] 
$35b2o6b2o$35b2o6b2o26$32b2o2$31bo2bo7$125b2o20b2o$125b2o20b2o$45bo2bo
$46b2o3$bo39bo39bo17bo61bo17bo13bobo$2bo39bo39bo17bo61bo17bo12bo$2bo
39bo39bo17bo61bo17bo12bo$bo39bo39bo17bo61bo17bo13bobo15$207bo12bo$208b
o9bo$208bo9bo$207bo12bo$143b2o$143b2o3$147b2o$147b2o25$191bo12bo$192bo
9bo$192bo9bo$191bo12bo$121b2o$121b2o3$125b2o$125b2o!
The first step is to stagger every other glider in the input stream so they are not a multiple of 8 apart. Once that's done, this period-8 oscillator:

Code: Select all

x = 3, y = 4, rule = critters 
$bobo$bo$bo$bobo!
causes a number of collisions that send gliders off in pairs perpendicular to the original stream. Reflecting back the top-going gliders, you get two streams consisting of staggered pairs of gliders that are period 4n+2 apart. These staggered pairs are easy to deflect 90° as I've done in the pattern.

The most useful collision in all these patterns is this one in which two gliders meet head-on and are reflected away on a perpendicular path.

Code: Select all

x = 9, y = 5, rule = critters
$bo6bo$2bo4bo$2bo4bo$bo6bo!
This is a another very useful collision of two gliders, which reflects one and leaves a stationary period-2 oscillator that can be converted back into a glider on later collisions (by doing the same collision in reverse).

Code: Select all

x = 11, y = 5, rule = critters
$2bo7bo$o8bo$o8bo$2bo7bo!
UPDATE: Never mind. Here is a much simpler conversion from the period-80 stream. It doesn't do any splitting, but that is easy to add. We can get from any period-8n stream to a stream with 8n+4 timing between consecutive gliders using the shift performed by the glider relays. Then after that, it turns out there is a 180° reflector after all that does not phase-shift by 2, so that can be used to turn the resulting stream 90° into a stream with 4n+2 timing between consecutive gliders. After that, 90° turns are easy. Splitting is not hard either, with higher-period glider relays.

Code: Select all

x = 183, y = 66, rule = critters
#C [[ RLE input o$bo$bo$o! ]] 
#C [[ PASTET EVERY 80 ]] 
#C [[ PASTE input 4 48 ]] 
7$99b2o6b2o$99b2o6b2o6$96b2o2$95bo2bo9$109bo2bo$110b2o19$157b2o$157b2o
3$5bo39bo39bo86bo$6bo39bo39bo$6bo39bo39bo$5bo39bo39bo86bo!
UPDATE 2: And here is how you can split a stream like this. The original stream is period-80, so the paired stream is period-160. I want to separate out every third pair for a period-480 stream. The only way I know to do that is a glider relay, but the quadratic delay component compresses it. The other two phases are split off using a pair of block reflectors.

Code: Select all

x = 179, y = 145, rule = critters
#C [[ RLE input o$bo$bo$o! ]] 
#C [[ PASTET EVERY 80 ]] 
#C [[ PASTE input 7 54 ]]
13$101b2o6b2o$101b2o6b2o23$111bo2bo2$112b2o10$98b2o$97bo2bo$159b2o$159b
2o3$7bo39bo39bo17bo$8bo39bo39bo17bo66bo$8bo39bo39bo17bo54bo2bo8bo$7bo
39bo39bo17bo56b2o6$162b2o2$161bo2bo21$151b2o$151b2o9$151b2o$151b2o$165b
2o$165b2o3$158b2o2$155bobo2bobo$155bo6bo$155bo6bo2$155bo6bo2$155bo6bo
2$155bo6bo2$155bo6bo2$155bo6bo10$155b2o$155b2o!
UPDATE 3: Period-40 seems to be the lower limit of the input stream (which has to be a multiple of 8 ). Here's an example.

Code: Select all

x = 90, y = 58, rule = critters
#C [[ RLE input o$bo$bo$o! ]]
#C [[ PASTET EVERY 40 ]]
#C [[ PASTE input 3 29 ]]
7$61b2o6b2o$61b2o6b2o8$64b2o2$63bo2bo3$71bo2bo$72b2o3$77b2o$77b2o3$3b
o19bo19bo19bo21bo$4bo19bo19bo19bo$4bo19bo19bo19bo$3bo19bo19bo19bo21bo
13$73b2o$73b2o7$77b2o$77b2o!
Note: I mean it is the lower-limit of my phase-shifter approach because the gliders get too close. I would actually like to do this for period 32 so I can retrofit another pattern.
User avatar
pcallahan
Posts: 955
Joined: April 26th, 2013, 1:04 pm

Re: Splitting a glider stream in Margolus Critters

Post by pcallahan »

New post since it has been a long time since I started the previous one (which includes multiple updates). It is possible to phase-shift a period-32 stream, after all. The collisions with the glider relays can be spaced even closer. The second collision can start before the first is finished (in Critters a lot of things work that don't look like they should based on Life intuition).

Code: Select all

x = 48, y = 52, rule = critters
#C [[ RLE input o$bo$bo$o! ]]
#C [[ PASTET EVERY 32 ]]
#C [[ PASTE input 2 25 ]]
7$39b2o$39b2o11$41bo2bo$42b2o5$3bo15bo15bo$4bo15bo15bo$4bo15bo15bo$3b
o15bo15bo7$35bo2bo2$36b2o8$33b2o$33b2o!
Since my subject line is still "splitting a glider stream" here is how period-32 input can be split into two period-128 streams of pairs phased for easy reflection.

Needless to say, it is a lot more compact than any of my early attempts.

Code: Select all

x = 87, y = 62, rule = critters
#C [[ RLE input o$bo$bo$o! ]]
#C [[ PASTET EVERY 32 ]]
#C [[ PASTE input 3 25 ]]
7$55b2o$55b2o11$57bo2bo$58b2o$73bo$74bo3$3bo15bo15bo15bo29bo$4bo15bo15b
o15bo$4bo15bo15bo15bo$3bo15bo15bo15bo29bo7$51bo2bo2$52b2o4$71b2o$71b2o
3$49b2o$49b2o3$72bo$71bo$71bo$72bo$41b2o$41b2o!
Note that instead of a block reflector above, I used a two-cell pattern. This variation changes the timing of the phased pair by period-4, which is needed to reflect using the 90° glider collision. In my previous splitter, I didn't realize this and used a more cumbersome head-on reflection. The key to turning glider streams appears to be keeping them in pairs 4n+2 spacing apart. Once you have this, most of the other manipulations are very easy.

UPDATE: It is possible to split an intermittent glider stream too. This period-128 oscillator shifts the position of a reflector enough to let gliders pass sometimes. It is based on a glider relay and extensible to other multiples of 8.

Code: Select all

x = 38, y = 10, rule = critters
$28bo$27bo$31bo$33bo$33bo$31bo$bo25bo8bo$28bo6bo!
We can use it to split the same stream as follows:

Code: Select all

x = 71, y = 59, rule = critters
#C [[ RLE input o$bo$bo$o! ]]
#C [[ PASTET EVERY 32 ]]
#C [[ PASTE input 0 23 ]]
5$37b2o$37b2o11$39bo2bo$40b2o$55bo$56bo3$bo15bo15bo29bo$2bo15bo15bo$2b
o15bo15bo$bo15bo15bo29bo7$33bo2bo2$34b2o4$53bo$54bo3$31b2o$31b2o3$56b
o$55bo$59bo$61bo$61bo$59bo$29bo25bo8bo$56bo6bo!
UPDATE (9/28/19):
Another feature of that block shift back and forth is that the glider actually moves faster through the pair of blocks than through empty space. They can be placed in a cascade to advance the glider ahead by any number of steps:

Code: Select all

x = 45, y = 15, rule = critters
$15bo3bo3bo3bo3bo3bo3bo3bo$16bo3bo3bo3bo3bo3bo3bo3bo$2bo6bo$o9bo$o9bo
$2bo6bo$16bo3bo3bo3bo3bo3bo3bo3bo$15bo3bo3bo3bo3bo3bo3bo3bo3$2bo6bo$o
9bo$o9bo$2bo6bo!
Usually, the way to synchronize signals is to delay the one that's ahead, but this can be used to advance the one that's behind.

Code: Select all

x = 192, y = 91, rule = critters
#C [[ RLE input o$bo$bo$o! ]]
#C [[ PASTET EVERY 32 ]]
#C [[ PASTE input 5 30 ]]
13$25b2o$25b2o11$27bo2bo$28b2o$43bo$44bo3$5bo15bo$6bo15bo29bo$6bo15bo
29bo$5bo15bo7$21bo2bo2$22b2o4$41bo$42bo3$19b2o$19b2o3$42bo$41bo$19bo$
20bo$20bo$19bo$17bo23bo10bo$42bo8bo$150bo3bo3bo3bo3bo3bo3bo3bo$149bo3b
o3bo3bo3bo3bo3bo3bo5$42bo106bo3bo3bo3bo3bo3bo3bo3bo$41bo108bo3bo3bo3b
o3bo3bo3bo3bo$49bo$50bo!
Update (10/1/19): Simplified stream splitter using a different reaction.

Code: Select all

x = 82, y = 63, rule = critters
#C [[ RLE input o$bo$bo$o! ]]
#C [[ PASTET EVERY 32 ]]
#C [[ PASTE input 4 26 ]]
9$31b2o$31b2o5$33bo2bo$34b2o7$49b2o$49b2o3$5bo15bo38bo$6bo15bo$6bo15b
o$5bo15bo38bo13$27bo2bo16bo$48bo$28b2o2$25b2o$25b2o3$74bo$72bo$47bo24b
o$48bo25bo$41b2o32bo$41b2o33bo!
Post Reply