They must be simple polygons with finite perimeter. (They may not be weakly simple.)

Must be isomorphically distinct from the square, triangular, and hexagonal grids.

Any tiling that trivially boils down to a regular square, triangular, or hexagonal grid is not allowed. (You can still use squares/triangles/hexagons in other tilings.)

The border between any two prototiles may contain multiple edges and vertices, but it must be continuous.

Your tiling may be periodic or aperiodic, but when expanded to cover the entire plane, each prototile must appear infinitely many times. (So no "hardcoding" certain parts of your tiling to help achieve the extra points below.)

Each of your prototiles represents one Game of Life cell that neighbors other cells:

Cells that share any edges or any vertices are considered neighbors.

Cells that share multiple edges or vertices are still only counted at each others neighbors once.

The infinite growth patterns must start with a finite number of live cells and the other patterns must always contain a bounded number of live cells (e.g. a spaceship should not grow arbitrarily large over time).

Due to the nature of aperiodic tilings it seems likely that many of these patterns would be impossible to implement in them. So any verifiably aperiodic tiling gets +40 points automatically. A pattern that works in one place in an aperiodic tiling does not have to work in other places.

Each of the bonuses can only be applied once. Naturally we'll need to see the output to verify them. The highest score wins.

Notes

Each answer can only have bonuses applied to one specific tiling. (Though feel free to include related tilings.)

The Game of Life rules are as follows:

Any live cell with less than 2 or more than 3 live neighbors dies.

Any dead cell with exactly 3 live neighbors comes alive.

Other cells do not change.

Patterns for the extra points should be possible regardless of boundary conditions, but otherwise you may choose any boundary conditions you want.

By default the background should be all dead tiles.

Thanks to Peter Taylor, Jan Dvorak, and githubphagocyte for helping to hammering out loopholes in what tilings should be allowed.

There's a strong case to be made that if it's not on a regular square grid it's not Conway's Life, but a Life-like automaton. Certainly if you want to talk about "the standard rules of Conway's Game of Life" and exclude tilings in which every cell has exactly 8 neighbours you're asking for an oxymoron.
– Peter TaylorAug 6 '14 at 14:18

2

@PeterTaylor That's a pretty semantic difference that I can't imagine would be confusing in this context, but just to be sure I've changed it (along with Martin's suggestions).
– Calvin's HobbiesAug 6 '14 at 14:32

4

Do I need to tile the euclidean plane?
– John DvorakAug 6 '14 at 14:56

3

Your "topologically distinct" condition also leaves a massive loophole which allows direct implantation of the standard Life by means of a grid of squares each of which has a triangular wedge removed from its top edge. The result is a tiling of triangles and square-minus-triangles in which each triangle has two squares for neighbours, each square has two triangles and eight squares, and the triangles can simply be ignored. That's a cheap 10230-point base score.
– Peter TaylorAug 6 '14 at 14:57

4

The inability to sort it out immediately is precisely the reason for closing it. It pre-empts answers being posted which prevent it from being fixed.
– Peter TaylorAug 6 '14 at 15:17

16 Answers
16

Penrose rhombii in Python, +97 points

I chose a penrose tiling composed of two different shaped rhombuses, meeting 3-8 per vertex. This penrose tiling is proven aperiodic elsewhere. The simulation is graphical (via pygame) and interactive. Comments indicate two places in the code where algorithm implementation was taken from another source.

There are many small neighborhood still lifes:

Any vertex with four "on" neighbors is a still life:

Any loop where no dead interior cells touch three cells on the loop is also a still life:

There are oscillators at various frequencies:

p2: (many variations)

p3:

p4:

p5:

p6:

p7:

p12:

p20:

The rules and clarifications as written mostly do not allow for gliders or guns in a non-planned aperiodic tiling. That leaves infinite growth, which I would argue isn't likely, and a p30+ oscillator, which almost certainly exists but will take a while to find.

python penrose-life.py will generate a single randomly colored periodic tiling
python -O penrose-life.py or just ./penrose-life.py will actually run the simulation. While running it will try to identify oscillators, and when it finds one (p>2) it will screenshot it. After recording an oscillator, or a stalled board, the board is randomized.

Clicking a cell in the simulation will toggle it.

The following keyboard shortcuts exist in the simulation:

Escape - quit the program

Space - randomize the whole board

P - pause the simulation

S - single step the simulation

F - toggle "fast" mode, rendering only every 25th frame

The initial seed of the penrose tiling algorithm is a circle of ten narrow triangles. This could be changed to single triangle, or a different arrangement of triangles, symmetric or not.

I was immediately thinking about this, because I've read this post: newscientist.com/article/… with which I can readily get 50 points. Can you extend from that idea? EDIT: Ahh, just realized that we need to use the original Game of Life rules.
– justhalfAug 12 '14 at 4:01

C++ w/ OpenGL (+17)

So I tried 3-Isohedral convex pentagon grid. Works for me ;) Standard game of life rules apply, except the grid is not infinite - there are border cells outside the image. 30% of the cells are initially alive.

This is how the grid looks like:

The live version:

Blue cells are alive, white are dead. Red cells just died, green were just born. Note that the artifacts in the image are the result of gif compression, SO doesn't like 10MB gifs :(.

Still life: (+2)

Oscillators T=2, T=3, T=12: (+9)

Oscillators T=6 , T=7: (+6)

There are many more different oscillators... But it seems that the grid is not regular enough for a ship...

This is nothing (no points), but I like it:

The code is a mess :) Uses some ancient fixed OpenGL. Otherwise used GLEW, GLFW, GLM and ImageMagick for gif export.

Very cool! But what did you mean by 23% of the cells are initially alive? Sorry if I'm just misunderstanding you but one of the rules is By default the background should be all dead tiles. (so you can't seed the grid with an infinite number of live tiles).
– Calvin's HobbiesAug 8 '14 at 5:35

1

@Calvin'sHobbies: I'm not sure I follow.. You have to set some sort of initial configuration... If all the cells are dead in the beginning, nothing would ever happen.
– Jaa-cAug 8 '14 at 10:06

1

Of course. I'm only referring to a case where, for example, a spaceship depends on an preinitialized infinite row of tiles next to it to work. I see now that you just happen to be initializing 23% of your tiles for your random animation, so don't worry, there's no problem here.
– Calvin's HobbiesAug 8 '14 at 10:28

Very very cool idea, but I don't think your algorithm handles corner neighbors properly, at least in your last example. When the period 3 oscillator has 3 tiles close together the other 9 tiles at that vertex should become alive because they all neighbor the 3 live tiles. See the blue tiles at i.stack.imgur.com/veUA1.png.
– Calvin's HobbiesAug 9 '14 at 5:13

Java - 11 (ish) points

Comes with fully (mostly) functioning interactive environment!

EDIT

Fatal flaw discovered :(

The path of the alive regions is bounded by the area it is originally formed in. In order to pass the square - double-pentagon barrier, one must have a pre-shaded region on the other side. This is because each shape below it only touches 2 of the regions above it. This means no spaceships or expanding anything, which kind of limits the possibilities. I will try with a different pattern.

There seems to be a structure that insulates the outside from the inside. This (and the previous example) uses it. The only thing that can break the box is if one of the boundary squares is alive at the beginning (so far). This, by the way, is the blinker - period 2.

Python

I place multiple points on a metatile, which is then copied periodically in a rectangular or hexagonal tiling (the metatiles are allowed to overlap).
From the set of all points i then compute the Voronoi diagram which makes up my grid.

Some older examples

Random graph, the Delaunay trinagulation is shown which is also used internally to find the neighbours

A periodic tiling which spells GoL

Some more grids showing still lifes

For any such grid there is a huge amount of still lifes with a wide variety of sizes, and some small 2-, 3- or 5-cycle oscillators, but I haven't found any gliders, probably due to the irregularities of the grid. I think about automatizing the search for lifeforms by checking cells for periodic oscillations.

Interesting idea but a random tiling would not have finitely many prototiles. For your periodic tiling you need to select one arrangement and explicitly show how all the oscillators and stuff can be made.
– Calvin's HobbiesAug 8 '14 at 5:31

It would be cool if the graph is based on the world map (for example, cities)
– Ming-TangAug 8 '14 at 22:25

@SHiNKiROU Great idea, I remember seeing a python package to work with geographic maps, so I'm gonna do this, especially since I cant settle on one single grid.
– DenDenDoAug 10 '14 at 13:51

I think you are only treating cells as neighboured when they share an edge while a shared vertex should be enough even though the connection graph might not be planar in such cases. Eg. 5 cells sharing one vertex form a K_5 in the connection graph.
– exampleAug 10 '14 at 15:49

Indeed, sometimes they are connected by vertex sometimes they arent cells+links When I first constructed the graph of links, I wanted to make sure its planar, i.e. there are no crossings, but this is not the case when more than 3 edges meet at a vertex. But luckily this is easy to avoid by making the cells slightly asymetric.
– DenDenDoAug 10 '14 at 16:03

Javascript [27+?]

This version supports clicking tiles to toggle their state, for you pattern hunters out there. Note: Some of the click handling may be a bit wonky, especially for low values of s, as click events are tracked as integers but calculations are done with floating point values

This tiling is surprisingly easy to draw: the key is that the only irrational number which is important for drawing it, sqrt(3), is very close to the rational number 7/4, which has the added bonus that if you subtract 1 from the numerator and denominator you get 6/3 = 2, so that the non-axis-aligned lines are nicely symmetric.

If you want grid paper, I've created a PostScript gist for A4. Feel free to fork it for other paper sizes.

The code is generic enough to support other tilings. The interface which needs to be implemented is:

Rhombille (30+ points)

This grid has quite high connectivity (each cell has 10 neighbours), and curiously this seems to contribute more effectively to birth than to death. Most random grids seem to trigger infinite growth (25 points); e.g. this 5-cell starting position:

evolves over 300 generations into something enormous:

and the population grows quadratically with the generation for at least 3000 generations.

Perhaps this is why I've only found one oscillator, of period 2 (3 points):

As for still life (2 points): take any 4 cells around a single vertex.

The code (use with the generic framework and AbstractLattice classes I posted in earlier answers):

In general an oscillator has a set of cells which change (the core), a set of cells which neighbour the core (the cladding), and a set of cells which keep the cladding from changing (the support). With this tiling, the support of the oscillators can sometimes overlap: e.g.

If the 4-oscillator were removed, the support of the 5-oscillator would fail and it would eventually evolve into a 2-oscillator. But if the 5-oscillator were removed, the support of the 4-oscillator would simply add one hex and stabilise, so this isn't really a 20-oscillator.

The code which implements this tiling is extremely generic: building on my experience with an aperiodic tiling, I realised that expanding to a known boundary and doing a lookup by vertex is a very flexible technique, albeit possibly not efficient for simple lattices. But since we're interested in more complex lattices, I've taken that approach here.

Every periodic tiling is a lattice, and it's possible to identify a fundamental unit (in the case of this tiling it's a hexagon, two triangles, and three squares) which is repeated along two axes. Then just supply the axis offsets and the coordinates of the primitive cells of a fundamental unit and you're done.

After a few hours of CPU time I've added a 7-oscillator and a 15-oscillator, plus some interesting oscillator pairs where they share some of the cells which keep them stable.
– Peter TaylorAug 11 '14 at 23:18

And by manually tweaking the 7-oscillator I accidentally created a 3-oscillator, which tells you something about how effective random searching is... Now to think about how to handle symmetry in a generic way.
– Peter TaylorAug 11 '14 at 23:50

Penrose-esque projection of 7-dimensional lattice (64+ points)

This is similar to the Penrose tiling (to get a Penrose tiling replace N = 7 with N = 5) and qualifies for the aperiodic bonus (40 points).

Still life (2 points): trivial because the protocells are convex, so any vertex of order 3 or more suffices. (Pick all of its faces if it is order 3, or any 4 of them otherwise).

Short-period oscillators (15 points):

This tiling is rich in oscillators. The smallest period for which I've only found one oscillator is 11, and the smallest period for which I've found none is 13.

Long-period oscillator (7 points):

I deliberately chose one of the variants of this tiling which has rotational symmetry, and that turned out to be useful for the long-period oscillator. It does one-seventh of a rotation around the central point every 28 generations, making it a p196.

The code uses the framework which I posted in earlier answers together with the following tiling class:

"Hex Medley 3" (24+ points*)

Inspired by the floret pentagonal tiling: a block of 7 hexagons tiles the plane, and we can chop the hexagons up in a lot of different ways. As the name suggests, this is the third such variation I tried, but it's worth posting because it's the first tiling to claim the 7 points for a p30+ oscillator.

The tiling is:

Since the protocells are convex, any order-3 vertex gives a still-life (2 points).

And the pièce de résistance: a p48 oscillator (7 points) which rotates by 60 degrees every 8 generations:

* Given the nature of this tiling I could pick a single hex which is divided into rhombi and rotate it 60 degrees. This would make the tiling aperiodic without technically breaking any rules, and wouldn't break any of the oscillators either. But I don't think it's in the spirit of the question, so I won't try to claim those 40 points.

The code relies on a lot of code I've posted in other answers; the unique part is

Rectangles of width 2row in Python 3, +2

Coincidentally, each cell in this grid has 8 neighbors, just like the original square tiling of the Game of Life.

Unfortunately, this tiling has the terrible property that each cell only has two north neighbors. That means a pattern can never propagate southward, including southeast or southwest. This property leads to a situation that makes oscillators rather unlikely, although one might exist of the sort that has walls on two sides and blinking cells in the middle.

It also seems to have the property (I'm not 100% sure yet) that no pattern can grow while moving north. A row will never grow to a wider maximum extent number of cells than the row below it. I think that means no gliders or more complicated forms.

That leaves us with a measly +2 bonus for a wide variety of still lifes, of which these are only a small sample:

AA__
_BC_
AABB
_CD_
AA__BB
_CXXD_ <-- XX can be any multiple of 2 wide
____YYYY____
__AA____BB__
___CXXXXD___ <-- XX can be any multiple of 4 wide
____YYYYOOOO <-- OOOO can continue to the right and could be the bottom of a stack of this pattern
__AA____BB__
___CXXXX____ <-- XX can be any multiple of 4 wide
OOOOYYYYOOOO <-- same stackability as above
__AA____BB__
____XXXX____ <-- XX can be any multiple of 4 wide

Here is the code, which when run will draw an 8-row grid (1 cell in the top row, 128 cells in the bottom row). Any key will advance one step, except r will randomize the board and q will exit the program.

Your Answer

If this is an answer to a challenge…

…Be sure to follow the challenge specification. However, please refrain from exploiting obvious loopholes. Answers abusing any of the standard loopholes are considered invalid. If you think a specification is unclear or underspecified, comment on the question instead.

…Try to optimize your score. For instance, answers to code-golf challenges should attempt to be as short as possible. You can always include a readable version of the code in addition to the competitive one.
Explanations of your answer make it more interesting to read and are very much encouraged.

…Include a short header which indicates the language(s) of your code and its score, as defined by the challenge.

More generally…

…Please make sure to answer the question and provide sufficient detail.

…Avoid asking for help, clarification or responding to other answers (use comments instead).