Low-tech universal computing
Low-tech universal computing
I'm putting this in sandbox since I don't think there is a great deal of interest other than me (but I may add similar ideas over time, since it's kind of an obsession). I have posted before about computing with tiles. I realized that an even simpler model that can be done as a kids' craft project uses stencils. It's less automatic than tiles, because you aren't forced to apply the transitions correctly, but I think it illustrates that the "thinking" is happening on the paper and not in your brain. Here is a pair of stencils for running rule 110.
For an isolated square, either stencil could be used to fill in the square below a filled-in square. For any other row of squares with spaces on either side, the left stencil determines how to fill in the cells below on the left, and the right stencil determines how to fill in the cells below on the right.
This shows the stenciling starting with a single square at the top and continuing a few rows. People do use stencils in home decorating, typically for periodic wall patterns, but you could fill a wall with rule 110 or other CA patterns this way given appropriate stencils.
Stencils aren't as good as tiles for non-deterministic models, though, because you can't retract a mark easily. I still like the idea of using this for generative wall art.
Update 12/25/19:
Note that you can build a general-purpose stencil for any elementary CA. It's a little harder to use, but it has the same basic idea. Paint squares only where the window of 3 squares matches above. By using a De Bruijn sequence, you can pack all possible windows into a sequence. This one is for rule 110 (and more complex than the above) but you can use it for other CAs. Another thought: since De Bruijn sequences are cyclic, something could be designed decoder-ring style, but the squares would not line up perfectly.
The idea is to hold one of them at the orientation shown, and if you find a filled-in square matching the top square but do not see anything filled under the slash, you fill in the square(s) at the bottom.For an isolated square, either stencil could be used to fill in the square below a filled-in square. For any other row of squares with spaces on either side, the left stencil determines how to fill in the cells below on the left, and the right stencil determines how to fill in the cells below on the right.
This shows the stenciling starting with a single square at the top and continuing a few rows. People do use stencils in home decorating, typically for periodic wall patterns, but you could fill a wall with rule 110 or other CA patterns this way given appropriate stencils.
Stencils aren't as good as tiles for non-deterministic models, though, because you can't retract a mark easily. I still like the idea of using this for generative wall art.
Update 12/25/19:
Note that you can build a general-purpose stencil for any elementary CA. It's a little harder to use, but it has the same basic idea. Paint squares only where the window of 3 squares matches above. By using a De Bruijn sequence, you can pack all possible windows into a sequence. This one is for rule 110 (and more complex than the above) but you can use it for other CAs. Another thought: since De Bruijn sequences are cyclic, something could be designed decoder-ring style, but the squares would not line up perfectly.
Last edited by pcallahan on December 26th, 2019, 3:43 pm, edited 2 times in total.
Re: Low-tech universal computing
Another option for rule 110 is to use tiles to represent the predictable regions that result from a line of on cells. This has the advantage of requiring fewer tile placements, but it does require an infinite tile set. The geometry is not really enforced by the tiles. The rule for placement is:
The competing ideas I've posted before (also suitable for refrigerator magnets) are:
Long skinny tiles beside on regular expression (🁣+🁤🁫+(🁤🁫(🁪)*🁫))* and also an infinite set. Square Wang tiles (only 6 required) Both of the above require doing placement for very predictable rule applications.
- The upper left corner of any tile must be to the right of an empty cell.
The competing ideas I've posted before (also suitable for refrigerator magnets) are:
Long skinny tiles beside on regular expression (🁣+🁤🁫+(🁤🁫(🁪)*🁫))* and also an infinite set. Square Wang tiles (only 6 required) Both of the above require doing placement for very predictable rule applications.
Re: Low-tech universal computing
This is not universal computing, but it is a low-tech solution to constructing random instances of a class of still life patterns that tile the plane with 3x3 neighborhoods containing exactly 4 live cells.
Arrange them as shown above with vertical strips overlaid on the horizontal ones. The horizontal strips can slide back and forth, snapping to grid lines within the outer (black) rectangle. The vertical strips can slide up and down, also snapping to grid lines within the outer rectangle. Every cell within the inner (red) rectangle satisfies still life conditions. If it is live, it has three live neighbors. Otherwise it has four live neighbors.
It would be possible to build a cardboard device with guides in place to restrict the sliding and generate still life patches this way (boundaries not stabilized though).
Note that the rules are simple enough to draw these kinds of still life patterns by hand directly on graph paper just by filling in every third square at the appropriate places. Here's one:
The idea illustrated above is to use paper strips. The blue horizontal strip has a live cell every three spaces. The pink vertical strip has live cells except every three spaces.Arrange them as shown above with vertical strips overlaid on the horizontal ones. The horizontal strips can slide back and forth, snapping to grid lines within the outer (black) rectangle. The vertical strips can slide up and down, also snapping to grid lines within the outer rectangle. Every cell within the inner (red) rectangle satisfies still life conditions. If it is live, it has three live neighbors. Otherwise it has four live neighbors.
It would be possible to build a cardboard device with guides in place to restrict the sliding and generate still life patches this way (boundaries not stabilized though).
Note that the rules are simple enough to draw these kinds of still life patterns by hand directly on graph paper just by filling in every third square at the appropriate places. Here's one:
Re: Low-tech universal computing
A set of six interlocking tiles that can be rotated and assembled into a grid of black and white squares. When assembled, each cell (separated by red grid lines) contains a number of dots equal to the number of black squares in its Moore neighborhood.
It's not fully automatic, but I think this would have been popular in an alternate universe where CGOL was invented before digital computers.
For those unable to see Life patterns in their head, this gives a quick visual indication of the next Life step. Above, you can pick out which glider cells survive, die, or are born. At least, I think anyone who can read dice or dominoes should be able to do this with ease.It's not fully automatic, but I think this would have been popular in an alternate universe where CGOL was invented before digital computers.
Re: Low-tech universal computing
CGOL really was invented quite a few years before computers, in a sense -- ubiquitous, inexpensive, easy-to-use personal computers, at any rate.
Early stories about Life investigations very often seem to involve reams of paper printouts, and these tiles seem like they'd be a nice improvement over checkers or Go boards. If you had two sets of the six tiles in slightly different colors, stacking generations on top of each other might work pretty well, too... though it might be a little awkward picking out the next tile, since you'd have to get the future colors right based on a non-color property (the dot count) in the combined four-piece area that includes each quadrant.
A mostly unrelated idea: it should be fairly trivial to put together rules with cell icons that look very much like these tiles, in a Golly universe with the grid turned off.
Re: Low-tech universal computing
Thanks for the comments. There are some variations on these tiles that may or may not enhance usability. If the dots are placed as on the left below, the dot patterns on each square preserve the shape of the Moore neighborhood, albeit rotated somewhat clockwise. Or cell counts can be indicated as "flower petals" on the right. This preserves octagonal symmetry the way my original set of still life tiles did. The main advantage I see in the design I posted is that people may just have more experience seeing dots arranged as on dice. I haven't tried out the flower petal idea visually. It's possible that this may work. The petals could be spiraled a little counter-clockwise to point at the cells they represent.dvgrn wrote: ↑January 15th, 2020, 1:31 pmCGOL really was invented quite a few years before computers, in a sense -- ubiquitous, inexpensive, easy-to-use personal computers, at any rate.
Early stories about Life investigations very often seem to involve reams of paper printouts, and these tiles seem like they'd be a nice improvement over checkers or Go boards. If you had two sets of the six tiles in slightly different colors, stacking generations on top of each other might work pretty well, too... though it might be a little awkward picking out the next tile, since you'd have to get the future colors right based on a non-color property (the dot count) in the combined four-piece area that includes each quadrant.
(Note: as always with anything involving 90° rotational symmetry, there's a hazard of having swastikas popping up. It's kind of a bummer, since it may make a few possibilities unsuitable for polite company.)
Update: An advantage to the flower petal approach is that the indicators are all clustered together. This helps reduce the problem of counting dots together that really belong in adjacent squares. In fact, maybe a good design ought to push the dots out to the corners and also connect them to the corners so neighborhood counts form a connected blob. (I have been thinking of investing in a Cricut die cutter, since it's a mature crafting technology and may be suitable for thick enough material to be usable as a puzzle. These seem interesting enough to make.)
Now that you mention it, that would be interesting to see if anyone wants to do it! I have been making these tiles in Google draw, and my other option would be Python with turtle graphics, believe it or not. I will eventually have to automate this, but I don't have the cycles right now.A mostly unrelated idea: it should be fairly trivial to put together rules with cell icons that look very much like these tiles, in a Golly universe with the grid turned off.
Re: Low-tech universal computing
The flower petal approach is interesting. It eliminates the need for the red lines, and it is overall more legible I think. For one thing, it's easier to find the neighbors being counted.
It is a little alien looking though. Anyone have a strong preference?
It is a little alien looking though. Anyone have a strong preference?
Re: Low-tech universal computing
Here are glider transitions with the new tile set. One way to look at this is in terms of k-petal "daisies." Birth occurs on 3-petal black daisies. Survival occurs on 2 or 3-petal white daisies. I find it easier to spot the daisies than count dice pips. Anyone prefer the other tiles? I'm curious about any reasons, aesthetic, usability based, objective or subjective.
Update: The tiling is different from a (non-reversible) Margolus implementation of Life, which would look like:
where the primed variables are the Life successors, and the rule is applied on alternate 4x4 blocks of cells (or 2x2 blocks of 16-state compound cells).
The tiling also uses 2x2 blocks of 16-state compound cells, but the compound cells always match up. In the Margolus rule, the compound cells duplicate within blocks, but are independent going between blocks.
It's easier to explain the difference in 1D. Margolus is like ab ab cd cd ef ef but the tiling is like ab bc cd de ef.
Update 2: Here's a link to the tiles in Google draw. It's view only, so copy if you want to fit them into patterns. https://docs.google.com/drawings/d/18aF ... lLdJs/view
I'm pretty sure what I'm doing with these tiles is equivalent to a 16-state Margolus rule (update: not quite), but I need to think about it. It is interesting that I had the diagonal-joining tiles nearly 4 years ago and never thought about doing it this way.Update: The tiling is different from a (non-reversible) Margolus implementation of Life, which would look like:
Code: Select all
a b c d g'h'g'h'
f g h i ---> k'l'k'l
j k l m g'h'g'h
n o p q k'l'k'l
The tiling also uses 2x2 blocks of 16-state compound cells, but the compound cells always match up. In the Margolus rule, the compound cells duplicate within blocks, but are independent going between blocks.
It's easier to explain the difference in 1D. Margolus is like ab ab cd cd ef ef but the tiling is like ab bc cd de ef.
Update 2: Here's a link to the tiles in Google draw. It's view only, so copy if you want to fit them into patterns. https://docs.google.com/drawings/d/18aF ... lLdJs/view
Re: Low-tech universal computing
One comment about the practicality of this method: If you take the assembled eater and block with "petals" (shown a couple posts back) and position them in different ways adjacent to each other, it is very easy to spot the places where it is safe to put the block and where it breaks the still life condition. I did this in Google draw, but you could print them and cut out paper. Some experienced Lifers can probably do this in their heads, but it really helped me do the visualization without a computer.
I wonder what's the smallest still life that uses all the tiles at all rotations.
I originally thought about using this for making an image and cutting it into tiles with netpbm (my image processing tool of choice circa 1990 and still available), But there is no reason I need to limit it to still lifes for that purpose. I still wonder what's the answer to the above question.
Update: Here's a 4x4 patch that uses all the tiles in all rotations. Needles to say, it's not a still life, but it may suit my needs.
I wonder what's the smallest still life that uses all the tiles at all rotations.
I originally thought about using this for making an image and cutting it into tiles with netpbm (my image processing tool of choice circa 1990 and still available), But there is no reason I need to limit it to still lifes for that purpose. I still wonder what's the answer to the above question.
Update: Here's a 4x4 patch that uses all the tiles in all rotations. Needles to say, it's not a still life, but it may suit my needs.
Re: Low-tech universal computing
This is another way to use all 16 2x2 tiles (considering rotations distinct), and the result can itself be tiled periodically.
Update: Getting some tooling in place to generate these pictures automatically. I used a Python script to generate netpbm commands to concatenate smaller tiles. (I was using netpbm over 25 years ago, but it still works well for scripting.) The tiles are kept to squares by including the adjacent piece's jigsaw nub. I originally made the tiles in Google draw, but did a little post-editing on the bitmaps to fix some problems. If you make boundaries with the right measurements for each black or white quadrant, the tiles themselves can be drawn more artistically.
Here's a randomish still-life generated by lifesrc. And here are the tiles for orthogonal spaceships. Again I think it is easier to pick out the cell transitions by eye with the petal annotations than just to see it in the original pattern.
This is a well known infinite period-2 oscillator (though I forget where I saw it; is there a finitization?). The petals make it clear that the solid 2x2 blocks alternate between live and dead, while the checked ones remain the same.Update: Getting some tooling in place to generate these pictures automatically. I used a Python script to generate netpbm commands to concatenate smaller tiles. (I was using netpbm over 25 years ago, but it still works well for scripting.) The tiles are kept to squares by including the adjacent piece's jigsaw nub. I originally made the tiles in Google draw, but did a little post-editing on the bitmaps to fix some problems. If you make boundaries with the right measurements for each black or white quadrant, the tiles themselves can be drawn more artistically.
Here's a randomish still-life generated by lifesrc. And here are the tiles for orthogonal spaceships. Again I think it is easier to pick out the cell transitions by eye with the petal annotations than just to see it in the original pattern.
Re: Low-tech universal computing
A slight variation of the tiles in which the petals are all the same color. This provides the dubious benefit of being able to compose each tile as a union of the two sets shown to the right copied and rotated as needed: a white corner section and a black corner section with disconnected petals on its neighbors. Hmm, maybe this is useful after all, since you could compose the tiles as an overlay of images with transparent pixels.
So we can check still life patterns with 6 tiles. Could the tiles be manageable with period-2 oscillators? In that case, there are 4^4=256 possible patches, reducible to 70 tiles with rotations. Then you'd have to deal with two kinds of petals and more complex rules, but it seems within human ability while at the same time solving a more interesting puzzle.Re: Low-tech universal computing
Streamlining my process a bit, I am now able to make these tiles using imagemagick, which is a lot more flexible than the old netpbm commands I was using. I haven't added jigsaw contours, but there's nothing stopping me, just more work to do.
Here's a python script to generate a big imagemagick command:
And here's the command.
Code: Select all
COLOR = ["white", "black"]
def tile(x, y, length, quadrants):
size = length * 2 + 1
xf = length * 0.6
thickness = length * 0.12
lines = ["-fill red -draw 'translate %d, %d rectangle 0, 0, %d, %d'" % (x, y, size - 1, size - 1),
"-fill black"]
for i in range(len(quadrants)):
lines.append("-fill %s" % COLOR[quadrants[i]])
lines.append("-draw 'translate %d, %d rotate %d translate %d, %d rectangle 0, 0, %d %d'" %
(length + x, length + y, i * 90, -length, -length, length - 1, length - 1))
for i in range(len(quadrants)):
lines.append("-fill red")
if quadrants[(i + 1) % 4]:
lines.append("-draw 'translate %d, %d rotate %d translate %d, %d rotate 22.5 "
"path \"M 0, 0 L %d, %d L %d, %d Z\"'" %
(length + x, length + y, i * 90, -length, -length, xf, -thickness, xf, thickness))
if quadrants[(i + 2) % 4]:
lines.append("-draw 'translate %d, %d rotate %d translate %d, %d rotate 67.5 "
"path \"M 0, 0 L %d, %d L %d, %d Z\"'" %
(length + x, length + y, i * 90, -length, -length, xf, -thickness, xf, thickness))
return lines
def pattern(x, y, length, grid, border):
size = length * 2 + 1 + border
lines = []
for i in range(len(grid) - 1):
for j in range(len(grid[i]) - 1):
lines.extend(tile(x + j * size, y + i * size, length,
(grid[i][j], grid[i][j + 1], grid[i + 1][j + 1], grid[i + 1][j])))
return lines
size = 800
lines = []
lines.append("magick -size %dx%d canvas:none -fill lightgray" % (size, size))
lines.append("-draw 'rectangle 0, 0, %s, %s'" % (size, size))
tilecolors = [(a, b, c, d)
for a in range(2) for b in range(2) for c in range(2) for d in range(2)]
x = 60
for quadrant in tilecolors:
if quadrant == min(quadrant[-i:] + quadrant[:-i] for i in range(len(quadrant))):
lines.extend(tile(x, 80, 40, quadrant))
x += 120
eater = [
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 1, 1, 0],
[0, 0, 0, 0, 1, 0],
[0, 1, 1, 1, 0, 0],
[0, 1, 0, 0, 0, 0],
[0, 0, 0, 0, 0, 0]]
lines.extend(pattern(150, 300, 40, eater, 1))
lines.append("tiling.png")
print " \\\n".join(lines)
Code: Select all
magick -size 800x800 canvas:none -fill lightgray \
-draw 'rectangle 0, 0, 800, 800' \
-fill red -draw 'translate 60, 80 rectangle 0, 0, 80, 80' \
-fill black \
-fill white \
-draw 'translate 100, 120 rotate 0 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 100, 120 rotate 90 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 100, 120 rotate 180 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 100, 120 rotate 270 translate -40, -40 rectangle 0, 0, 39 39' \
-fill red \
-fill red \
-fill red \
-fill red \
-fill red -draw 'translate 180, 80 rectangle 0, 0, 80, 80' \
-fill black \
-fill white \
-draw 'translate 220, 120 rotate 0 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 220, 120 rotate 90 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 220, 120 rotate 180 translate -40, -40 rectangle 0, 0, 39 39' \
-fill black \
-draw 'translate 220, 120 rotate 270 translate -40, -40 rectangle 0, 0, 39 39' \
-fill red \
-fill red \
-draw 'translate 220, 120 rotate 90 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 220, 120 rotate 180 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-fill red -draw 'translate 300, 80 rectangle 0, 0, 80, 80' \
-fill black \
-fill white \
-draw 'translate 340, 120 rotate 0 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 340, 120 rotate 90 translate -40, -40 rectangle 0, 0, 39 39' \
-fill black \
-draw 'translate 340, 120 rotate 180 translate -40, -40 rectangle 0, 0, 39 39' \
-fill black \
-draw 'translate 340, 120 rotate 270 translate -40, -40 rectangle 0, 0, 39 39' \
-fill red \
-draw 'translate 340, 120 rotate 0 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 340, 120 rotate 90 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-draw 'translate 340, 120 rotate 90 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 340, 120 rotate 180 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-fill red -draw 'translate 420, 80 rectangle 0, 0, 80, 80' \
-fill black \
-fill white \
-draw 'translate 460, 120 rotate 0 translate -40, -40 rectangle 0, 0, 39 39' \
-fill black \
-draw 'translate 460, 120 rotate 90 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 460, 120 rotate 180 translate -40, -40 rectangle 0, 0, 39 39' \
-fill black \
-draw 'translate 460, 120 rotate 270 translate -40, -40 rectangle 0, 0, 39 39' \
-fill red \
-draw 'translate 460, 120 rotate 0 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 460, 120 rotate 90 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 460, 120 rotate 180 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 460, 120 rotate 270 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red -draw 'translate 540, 80 rectangle 0, 0, 80, 80' \
-fill black \
-fill white \
-draw 'translate 580, 120 rotate 0 translate -40, -40 rectangle 0, 0, 39 39' \
-fill black \
-draw 'translate 580, 120 rotate 90 translate -40, -40 rectangle 0, 0, 39 39' \
-fill black \
-draw 'translate 580, 120 rotate 180 translate -40, -40 rectangle 0, 0, 39 39' \
-fill black \
-draw 'translate 580, 120 rotate 270 translate -40, -40 rectangle 0, 0, 39 39' \
-fill red \
-draw 'translate 580, 120 rotate 0 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-draw 'translate 580, 120 rotate 0 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 580, 120 rotate 90 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-draw 'translate 580, 120 rotate 90 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 580, 120 rotate 180 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 580, 120 rotate 270 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red -draw 'translate 660, 80 rectangle 0, 0, 80, 80' \
-fill black \
-fill black \
-draw 'translate 700, 120 rotate 0 translate -40, -40 rectangle 0, 0, 39 39' \
-fill black \
-draw 'translate 700, 120 rotate 90 translate -40, -40 rectangle 0, 0, 39 39' \
-fill black \
-draw 'translate 700, 120 rotate 180 translate -40, -40 rectangle 0, 0, 39 39' \
-fill black \
-draw 'translate 700, 120 rotate 270 translate -40, -40 rectangle 0, 0, 39 39' \
-fill red \
-draw 'translate 700, 120 rotate 0 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-draw 'translate 700, 120 rotate 0 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 700, 120 rotate 90 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-draw 'translate 700, 120 rotate 90 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 700, 120 rotate 180 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-draw 'translate 700, 120 rotate 180 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 700, 120 rotate 270 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-draw 'translate 700, 120 rotate 270 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red -draw 'translate 150, 300 rectangle 0, 0, 80, 80' \
-fill black \
-fill white \
-draw 'translate 190, 340 rotate 0 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 190, 340 rotate 90 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 190, 340 rotate 180 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 190, 340 rotate 270 translate -40, -40 rectangle 0, 0, 39 39' \
-fill red \
-fill red \
-fill red \
-fill red \
-fill red -draw 'translate 232, 300 rectangle 0, 0, 80, 80' \
-fill black \
-fill white \
-draw 'translate 272, 340 rotate 0 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 272, 340 rotate 90 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 272, 340 rotate 180 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 272, 340 rotate 270 translate -40, -40 rectangle 0, 0, 39 39' \
-fill red \
-fill red \
-fill red \
-fill red \
-fill red -draw 'translate 314, 300 rectangle 0, 0, 80, 80' \
-fill black \
-fill white \
-draw 'translate 354, 340 rotate 0 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 354, 340 rotate 90 translate -40, -40 rectangle 0, 0, 39 39' \
-fill black \
-draw 'translate 354, 340 rotate 180 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 354, 340 rotate 270 translate -40, -40 rectangle 0, 0, 39 39' \
-fill red \
-draw 'translate 354, 340 rotate 0 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 354, 340 rotate 90 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-fill red \
-fill red -draw 'translate 396, 300 rectangle 0, 0, 80, 80' \
-fill black \
-fill white \
-draw 'translate 436, 340 rotate 0 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 436, 340 rotate 90 translate -40, -40 rectangle 0, 0, 39 39' \
-fill black \
-draw 'translate 436, 340 rotate 180 translate -40, -40 rectangle 0, 0, 39 39' \
-fill black \
-draw 'translate 436, 340 rotate 270 translate -40, -40 rectangle 0, 0, 39 39' \
-fill red \
-draw 'translate 436, 340 rotate 0 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 436, 340 rotate 90 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-draw 'translate 436, 340 rotate 90 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 436, 340 rotate 180 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-fill red -draw 'translate 478, 300 rectangle 0, 0, 80, 80' \
-fill black \
-fill white \
-draw 'translate 518, 340 rotate 0 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 518, 340 rotate 90 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 518, 340 rotate 180 translate -40, -40 rectangle 0, 0, 39 39' \
-fill black \
-draw 'translate 518, 340 rotate 270 translate -40, -40 rectangle 0, 0, 39 39' \
-fill red \
-fill red \
-draw 'translate 518, 340 rotate 90 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 518, 340 rotate 180 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-fill red -draw 'translate 150, 382 rectangle 0, 0, 80, 80' \
-fill black \
-fill white \
-draw 'translate 190, 422 rotate 0 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 190, 422 rotate 90 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 190, 422 rotate 180 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 190, 422 rotate 270 translate -40, -40 rectangle 0, 0, 39 39' \
-fill red \
-fill red \
-fill red \
-fill red \
-fill red -draw 'translate 232, 382 rectangle 0, 0, 80, 80' \
-fill black \
-fill white \
-draw 'translate 272, 422 rotate 0 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 272, 422 rotate 90 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 272, 422 rotate 180 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 272, 422 rotate 270 translate -40, -40 rectangle 0, 0, 39 39' \
-fill red \
-fill red \
-fill red \
-fill red \
-fill red -draw 'translate 314, 382 rectangle 0, 0, 80, 80' \
-fill black \
-fill white \
-draw 'translate 354, 422 rotate 0 translate -40, -40 rectangle 0, 0, 39 39' \
-fill black \
-draw 'translate 354, 422 rotate 90 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 354, 422 rotate 180 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 354, 422 rotate 270 translate -40, -40 rectangle 0, 0, 39 39' \
-fill red \
-draw 'translate 354, 422 rotate 0 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-fill red \
-fill red \
-draw 'translate 354, 422 rotate 270 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red -draw 'translate 396, 382 rectangle 0, 0, 80, 80' \
-fill black \
-fill black \
-draw 'translate 436, 422 rotate 0 translate -40, -40 rectangle 0, 0, 39 39' \
-fill black \
-draw 'translate 436, 422 rotate 90 translate -40, -40 rectangle 0, 0, 39 39' \
-fill black \
-draw 'translate 436, 422 rotate 180 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 436, 422 rotate 270 translate -40, -40 rectangle 0, 0, 39 39' \
-fill red \
-draw 'translate 436, 422 rotate 0 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-draw 'translate 436, 422 rotate 0 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 436, 422 rotate 90 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 436, 422 rotate 180 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 436, 422 rotate 270 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-draw 'translate 436, 422 rotate 270 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red -draw 'translate 478, 382 rectangle 0, 0, 80, 80' \
-fill black \
-fill black \
-draw 'translate 518, 422 rotate 0 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 518, 422 rotate 90 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 518, 422 rotate 180 translate -40, -40 rectangle 0, 0, 39 39' \
-fill black \
-draw 'translate 518, 422 rotate 270 translate -40, -40 rectangle 0, 0, 39 39' \
-fill red \
-fill red \
-draw 'translate 518, 422 rotate 90 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 518, 422 rotate 180 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-draw 'translate 518, 422 rotate 180 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 518, 422 rotate 270 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red -draw 'translate 150, 464 rectangle 0, 0, 80, 80' \
-fill black \
-fill white \
-draw 'translate 190, 504 rotate 0 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 190, 504 rotate 90 translate -40, -40 rectangle 0, 0, 39 39' \
-fill black \
-draw 'translate 190, 504 rotate 180 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 190, 504 rotate 270 translate -40, -40 rectangle 0, 0, 39 39' \
-fill red \
-draw 'translate 190, 504 rotate 0 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 190, 504 rotate 90 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-fill red \
-fill red -draw 'translate 232, 464 rectangle 0, 0, 80, 80' \
-fill black \
-fill white \
-draw 'translate 272, 504 rotate 0 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 272, 504 rotate 90 translate -40, -40 rectangle 0, 0, 39 39' \
-fill black \
-draw 'translate 272, 504 rotate 180 translate -40, -40 rectangle 0, 0, 39 39' \
-fill black \
-draw 'translate 272, 504 rotate 270 translate -40, -40 rectangle 0, 0, 39 39' \
-fill red \
-draw 'translate 272, 504 rotate 0 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 272, 504 rotate 90 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-draw 'translate 272, 504 rotate 90 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 272, 504 rotate 180 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-fill red -draw 'translate 314, 464 rectangle 0, 0, 80, 80' \
-fill black \
-fill white \
-draw 'translate 354, 504 rotate 0 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 354, 504 rotate 90 translate -40, -40 rectangle 0, 0, 39 39' \
-fill black \
-draw 'translate 354, 504 rotate 180 translate -40, -40 rectangle 0, 0, 39 39' \
-fill black \
-draw 'translate 354, 504 rotate 270 translate -40, -40 rectangle 0, 0, 39 39' \
-fill red \
-draw 'translate 354, 504 rotate 0 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 354, 504 rotate 90 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-draw 'translate 354, 504 rotate 90 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 354, 504 rotate 180 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-fill red -draw 'translate 396, 464 rectangle 0, 0, 80, 80' \
-fill black \
-fill white \
-draw 'translate 436, 504 rotate 0 translate -40, -40 rectangle 0, 0, 39 39' \
-fill black \
-draw 'translate 436, 504 rotate 90 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 436, 504 rotate 180 translate -40, -40 rectangle 0, 0, 39 39' \
-fill black \
-draw 'translate 436, 504 rotate 270 translate -40, -40 rectangle 0, 0, 39 39' \
-fill red \
-draw 'translate 436, 504 rotate 0 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 436, 504 rotate 90 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 436, 504 rotate 180 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 436, 504 rotate 270 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red -draw 'translate 478, 464 rectangle 0, 0, 80, 80' \
-fill black \
-fill black \
-draw 'translate 518, 504 rotate 0 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 518, 504 rotate 90 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 518, 504 rotate 180 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 518, 504 rotate 270 translate -40, -40 rectangle 0, 0, 39 39' \
-fill red \
-fill red \
-fill red \
-draw 'translate 518, 504 rotate 180 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 518, 504 rotate 270 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red -draw 'translate 150, 546 rectangle 0, 0, 80, 80' \
-fill black \
-fill white \
-draw 'translate 190, 586 rotate 0 translate -40, -40 rectangle 0, 0, 39 39' \
-fill black \
-draw 'translate 190, 586 rotate 90 translate -40, -40 rectangle 0, 0, 39 39' \
-fill black \
-draw 'translate 190, 586 rotate 180 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 190, 586 rotate 270 translate -40, -40 rectangle 0, 0, 39 39' \
-fill red \
-draw 'translate 190, 586 rotate 0 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-draw 'translate 190, 586 rotate 0 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 190, 586 rotate 90 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-fill red \
-draw 'translate 190, 586 rotate 270 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red -draw 'translate 232, 546 rectangle 0, 0, 80, 80' \
-fill black \
-fill black \
-draw 'translate 272, 586 rotate 0 translate -40, -40 rectangle 0, 0, 39 39' \
-fill black \
-draw 'translate 272, 586 rotate 90 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 272, 586 rotate 180 translate -40, -40 rectangle 0, 0, 39 39' \
-fill black \
-draw 'translate 272, 586 rotate 270 translate -40, -40 rectangle 0, 0, 39 39' \
-fill red \
-draw 'translate 272, 586 rotate 0 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 272, 586 rotate 90 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 272, 586 rotate 180 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-draw 'translate 272, 586 rotate 180 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 272, 586 rotate 270 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-draw 'translate 272, 586 rotate 270 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red -draw 'translate 314, 546 rectangle 0, 0, 80, 80' \
-fill black \
-fill black \
-draw 'translate 354, 586 rotate 0 translate -40, -40 rectangle 0, 0, 39 39' \
-fill black \
-draw 'translate 354, 586 rotate 90 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 354, 586 rotate 180 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 354, 586 rotate 270 translate -40, -40 rectangle 0, 0, 39 39' \
-fill red \
-draw 'translate 354, 586 rotate 0 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-fill red \
-draw 'translate 354, 586 rotate 180 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 354, 586 rotate 270 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-draw 'translate 354, 586 rotate 270 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red -draw 'translate 396, 546 rectangle 0, 0, 80, 80' \
-fill black \
-fill black \
-draw 'translate 436, 586 rotate 0 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 436, 586 rotate 90 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 436, 586 rotate 180 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 436, 586 rotate 270 translate -40, -40 rectangle 0, 0, 39 39' \
-fill red \
-fill red \
-fill red \
-draw 'translate 436, 586 rotate 180 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 436, 586 rotate 270 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red -draw 'translate 478, 546 rectangle 0, 0, 80, 80' \
-fill black \
-fill white \
-draw 'translate 518, 586 rotate 0 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 518, 586 rotate 90 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 518, 586 rotate 180 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 518, 586 rotate 270 translate -40, -40 rectangle 0, 0, 39 39' \
-fill red \
-fill red \
-fill red \
-fill red \
-fill red -draw 'translate 150, 628 rectangle 0, 0, 80, 80' \
-fill black \
-fill white \
-draw 'translate 190, 668 rotate 0 translate -40, -40 rectangle 0, 0, 39 39' \
-fill black \
-draw 'translate 190, 668 rotate 90 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 190, 668 rotate 180 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 190, 668 rotate 270 translate -40, -40 rectangle 0, 0, 39 39' \
-fill red \
-draw 'translate 190, 668 rotate 0 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-fill red \
-fill red \
-draw 'translate 190, 668 rotate 270 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red -draw 'translate 232, 628 rectangle 0, 0, 80, 80' \
-fill black \
-fill black \
-draw 'translate 272, 668 rotate 0 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 272, 668 rotate 90 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 272, 668 rotate 180 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 272, 668 rotate 270 translate -40, -40 rectangle 0, 0, 39 39' \
-fill red \
-fill red \
-fill red \
-draw 'translate 272, 668 rotate 180 translate -40, -40 rotate 67.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red \
-draw 'translate 272, 668 rotate 270 translate -40, -40 rotate 22.5 path "M 0, 0 L 24, -4 L 24, 4 Z"' \
-fill red -draw 'translate 314, 628 rectangle 0, 0, 80, 80' \
-fill black \
-fill white \
-draw 'translate 354, 668 rotate 0 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 354, 668 rotate 90 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 354, 668 rotate 180 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 354, 668 rotate 270 translate -40, -40 rectangle 0, 0, 39 39' \
-fill red \
-fill red \
-fill red \
-fill red \
-fill red -draw 'translate 396, 628 rectangle 0, 0, 80, 80' \
-fill black \
-fill white \
-draw 'translate 436, 668 rotate 0 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 436, 668 rotate 90 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 436, 668 rotate 180 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 436, 668 rotate 270 translate -40, -40 rectangle 0, 0, 39 39' \
-fill red \
-fill red \
-fill red \
-fill red \
-fill red -draw 'translate 478, 628 rectangle 0, 0, 80, 80' \
-fill black \
-fill white \
-draw 'translate 518, 668 rotate 0 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 518, 668 rotate 90 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 518, 668 rotate 180 translate -40, -40 rectangle 0, 0, 39 39' \
-fill white \
-draw 'translate 518, 668 rotate 270 translate -40, -40 rectangle 0, 0, 39 39' \
-fill red \
-fill red \
-fill red \
-fill red \
tiling.png
Re: Low-tech universal computing
An inkjet printer, some scrap cardboard for backing, some scissors and glue. Add to the mix hours of obsessive behavior by a man who graduated kindergarten nearly a half century ago. And we get...
Game of Life unplugged! Using the six tiles (previous post and others) the neighbor count shows up as the number of petals on a stylized red "daisy". It is easy to pick out births and deaths. The block on table, beehive, and eater can be identified as still lifes (sorry, ran out of corner pieces on the last one). Conversely, the glider and blinker have births and deaths and are very clearly not still lifes.
With backing cardboard, the pieces aren't too hard to work with, but they do tend to slip. Without precision cutting, I might get some more mileage out of the square shapes by printing them on magnetic stock. If I add jigsaw contours, I will need a better way to cut, e.g. with a Cricut or similar. That's a bigger investment than I am prepared to make at the moment.
Granted all of this is old hat to anyone who has played with CGOL on computers. I wonder what it would be like if this was your first experience with Life rules before programming them. I wouldn't want to inflict the cardboard chits on anyone, but jigsaw pieces or even magnets might be good.
Another thing. There are six tiles. Would it be worth making a bag of dice with a tile pattern on each side?
Update: nameless still life that I put together by hand.
Game of Life unplugged! Using the six tiles (previous post and others) the neighbor count shows up as the number of petals on a stylized red "daisy". It is easy to pick out births and deaths. The block on table, beehive, and eater can be identified as still lifes (sorry, ran out of corner pieces on the last one). Conversely, the glider and blinker have births and deaths and are very clearly not still lifes.
With backing cardboard, the pieces aren't too hard to work with, but they do tend to slip. Without precision cutting, I might get some more mileage out of the square shapes by printing them on magnetic stock. If I add jigsaw contours, I will need a better way to cut, e.g. with a Cricut or similar. That's a bigger investment than I am prepared to make at the moment.
Granted all of this is old hat to anyone who has played with CGOL on computers. I wonder what it would be like if this was your first experience with Life rules before programming them. I wouldn't want to inflict the cardboard chits on anyone, but jigsaw pieces or even magnets might be good.
Another thing. There are six tiles. Would it be worth making a bag of dice with a tile pattern on each side?
Update: nameless still life that I put together by hand.
Re: Low-tech universal computing
Here's a 6-tile set that pulls the complete Moore neighborhood into the middles of cells. Without any placement rules except matching boundaries, you can use it as a visual aid for analyzing the next step of any 2-state Moore neighborhood CA.
Re: Low-tech universal computing
Sorry for non-constructive comments, but I wish I had a set of those tiles.
Re: Low-tech universal computing
Do you have a printer? All my physical tiles so far are done with an inkjet printer, scrap cardboard (like a cereal box), glue and scissors. It limits me a bit (though I have done triangles and hexagons besides squares using this method and even rhombus* tiles with curved boundaries).
A 3D printer or laser cutter would be nice for putting in some jigsaw contours, but if you only want squares, it's not all that much work to glue a printout to cardboard, cut it into strips, then cut those into squares.
Meanwhile, here is the latest variation. Described in more detail at https://conwaylife.com/forums/viewtopic ... 278#p88835 *And thanks to a helpful answer, I now know the 60°-120° rhombus tiles are usually called "lozenge tilings" and were analyzed by MacMahon over a century ago.
Re: Low-tech universal computing
Here are some patterns constructed with physical tiles like the above. The blank tile can always be omitted if you're OK leaving holes, while the four-dot tile is only useful for making blocks if you're doing still life patterns.
The yellow tiles are printed on card stock, which is too lightweight to be usable. I also think these dots are too small and difficult to align the halves. I was trying to build a still life, but I left three birth cells in this one. (left as an exercise to find)
Here's a stabilization I built by hand in Golly. It's unclear if this is harder or easier than using tiles.
The next set is on plain printer paper, which is even less usable, but I wanted to try them before using any more expensive material or going to the effort of gluing them to backing. I think the dots are at least sized right, and this time I did not make a mistake with the still life.
The next thing to try is magnet paper. This is more expensive and probably harder to cut with scissors.
Here's an idea for a puzzle. Use software to find a still life that uses unique proportions of tiles (there must be some, up to symmetry). Then given the tiles, reconstruct the still life without seeing it first. A high-tech connection is that you could have an phone app that checks if your placement is right based on a picture.
Update: Here is an 8x10 pattern (not a still life) that can be printed on 8.5x11 paper after scaling to leave some margins. The tiles are proportioned according to a survey of small lifesrc-generated patterns with a little trial and error. The frequencies as as follows (tuples are in order of corners clockwise around the tile).
The yellow tiles are printed on card stock, which is too lightweight to be usable. I also think these dots are too small and difficult to align the halves. I was trying to build a still life, but I left three birth cells in this one. (left as an exercise to find)
Here's a stabilization I built by hand in Golly. It's unclear if this is harder or easier than using tiles.
Code: Select all
x = 17, y = 16, rule = B3/S23
8bo$8b3o$11bo$8b4o$8bo$10b2o3b2o$9b2obobobo$8bo3bobo$2ob2o2bob2obob2o$
bobo2bobo2bo$bobob2o3bo$2b2obo2bob2o$7b2o$8bo$6bo$6b2o!
Code: Select all
x = 8, y = 6, rule = B3/S23
b2o$o2bo$ob2o$bo2b2o$2bobo2bo$3bo2b2o!
The next thing to try is magnet paper. This is more expensive and probably harder to cut with scissors.
Here's an idea for a puzzle. Use software to find a still life that uses unique proportions of tiles (there must be some, up to symmetry). Then given the tiles, reconstruct the still life without seeing it first. A high-tech connection is that you could have an phone app that checks if your placement is right based on a picture.
Update: Here is an 8x10 pattern (not a still life) that can be printed on 8.5x11 paper after scaling to leave some margins. The tiles are proportioned according to a survey of small lifesrc-generated patterns with a little trial and error. The frequencies as as follows (tuples are in order of corners clockwise around the tile).
Code: Select all
(0, 0, 0, 1) 32
(0, 0, 1, 1) 26
(0, 1, 0, 1) 10
(0, 1, 1, 1) 10
(1, 1, 1, 1) 2
Re: Low-tech universal computing
Latest tiling. This time I glued them to cardboard from a cereal box. I am now waiting for the magnet sheets.
Though it's pretty obviously a still life, you can see here:
Code: Select all
x = 11, y = 9, rule = B3/S23
9b2o$b2o3b2o2bo$bobobo2b2o$2b2ob2o$4bo$4bo$2b2ob2o$o2bobo2bo$2o5b2o!
Re: Low-tech universal computing
One way to turn the tiles into a puzzle is to specify proportions of tiles as below, and solve the puzzle by building a still life with the given proportions. I ran through a series of patterns to find some with unique solutions up to symmetry. Here are two examples:
Here are some other examples with proportions given in the same order (i.e. above would be 10-10-0-2-1 and 15-4-7-1-0 respectively).
8-6-1-2-0 (eater 1)
10-12-2-2-1 block on cap (looks like a toilet seat to me!)
12-10-5-2-0 teardrop with claw
14-6-1-4-0 broken snake
17-4-10-1-0 barge with very long tail
I think given one of the codes from above and trying to assemble a still life with magnet tiles has the potential to be engaging even for non Game-of-Life people, and it would develop intuition about still lifes if nothing else.
and
I haven't tried this with the magnet tiles yet. I have spent more time doing free-form construction of still lifes.Here are some other examples with proportions given in the same order (i.e. above would be 10-10-0-2-1 and 15-4-7-1-0 respectively).
8-6-1-2-0 (eater 1)
Code: Select all
x = 4, y = 4, rule = B3/S23
2o$o$b3o$3bo!
Code: Select all
x = 4, y = 6, rule = B3/S23
2b2o$2b2o2$4o$o2bo$b2o!
Code: Select all
x = 5, y = 6, rule = B3/S23
2b2o$bo2bo$bob2o$2bo$obo$2o!
Code: Select all
x = 7, y = 3, rule = B3/S23
2b2ob2o$o2b2obo$2o!
Code: Select all
x = 8, y = 5, rule = B3/S23
3b2o$2bo2bobo$bobo2b2o$obo$bo!
Re: Low-tech universal computing
you could make it a competitive game, too.
Each player given a random set of tiles to start. Each turn player can draw another tile, or build an object. Scoring based on the tiles used, and/or the size of the object. Play for set number of rounds, or to a set score, run out of tiles, etc.
Also allow building onto existing objects by adding inductors, replacing existing tiles, etc.
Each player given a random set of tiles to start. Each turn player can draw another tile, or build an object. Scoring based on the tiles used, and/or the size of the object. Play for set number of rounds, or to a set score, run out of tiles, etc.
Also allow building onto existing objects by adding inductors, replacing existing tiles, etc.
Re: Low-tech universal computing
I was thinking along similar lines. You could allow removals with the penalty that you have to take the tiles back and the goal is to discard. If you can finish a complete, stabilized pattern, that can be removed and kept to score. The game ends (maybe) when someone uses all their tiles. Unused tiles carry a penalty. It might also have to end when everyone is stuck.hkoenig wrote: ↑March 6th, 2020, 1:22 pmyou could make it a competitive game, too.
Each player given a random set of tiles to start. Each turn player can draw another tile, or build an object. Scoring based on the tiles used, and/or the size of the object. Play for set number of rounds, or to a set score, run out of tiles, etc.
Also allow building onto existing objects by adding inductors, replacing existing tiles, etc.
Re: Low-tech universal computing
Like a card game? Waiting to play. Or the game ends when everyone discards all their card, and you cannot remove SL to add to score (You can penalty remove them) and after the game ends the one who build the biggest SL etc wins.pcallahan wrote: ↑March 6th, 2020, 3:15 pmI was thinking along similar lines. You could allow removals with the penalty that you have to take the tiles back and the goal is to discard. If you can finish a complete, stabilized pattern, that can be removed and kept to score. The game ends (maybe) when someone uses all their tiles. Unused tiles carry a penalty. It might also have to end when everyone is stuck.hkoenig wrote: ↑March 6th, 2020, 1:22 pmyou could make it a competitive game, too.
Each player given a random set of tiles to start. Each turn player can draw another tile, or build an object. Scoring based on the tiles used, and/or the size of the object. Play for set number of rounds, or to a set score, run out of tiles, etc.
Also allow building onto existing objects by adding inductors, replacing existing tiles, etc.
Re: Low-tech universal computing
I have never been very good at playing competitive games let alone inventing them. People who are better at it might come up with something fun. Strictly speaking, there are 6 tiles, but one is completely blank so I don't bother producing it. The tile with all corners populated can only be completed as a block. That could play a strategic role, but it would have to be a lot less frequent than the other tiles.
Re: Low-tech universal computing
I finally got around to printing the tiles from https://www.conwaylife.com/forums/viewt ... ile#p96637 on a magnetic sheet. I think it came out pretty well:
The representation of live cell adjacency doesn't require as much explanation as the flower petals, though on the downside, I'm not sure it's quite as easy to pick out if a cell has more than 3 neighbors (such as the crowded cell in the glider). The rhombus indicators of live/dead adjacency are a little more neutral than the green "leaves".
The next step will be to contour these tiles so they can only be placed so cells line up. I'm not going to do that with scissors though, if i ever do.
The next step will be to contour these tiles so they can only be placed so cells line up. I'm not going to do that with scissors though, if i ever do.
-
- Posts: 288
- Joined: March 29th, 2021, 5:45 am
Re: Low-tech universal computing
It seems like this technique can be used to solve the unique father problem.
Code: Select all
x = 21, y = 21, rule = LifeColorful
11.E$10.3E$10.E.2E$13.E4$2.2B$.2B$2B$.2B15.2D$19.2D$18.2D$17.2D4$7.C$
7.2C.C$8.3C$9.C!