# trinity

trinity, a MATLAB code which considers the trinity puzzle, a smaller version of the eternity puzzle. The trinity puzzle specifies a region R composed of 144 30-60-90 triangles, and a set of 4 "tiles", T1, T2, T3 and T4, each consisting of 36 30-60-90 triangles, and seeks an arrangement of the four tiles that exactly covers the region.

The trinity puzzle was devised as a warm-up exercise for the eternity puzzle, which involves a region of 2,508 triangles, and 209 tiles, each composed of 36 triangles.

To find a tiling of R, we can write 144 linear equations. Linear equation #I expresses the condition that triangle #I must be covered exactly once by one of the 4 tiles. Each tile has as many as 12 orientations, (involving rotations, reflections, and mirror imaging) and a variable number of possible translations. The resulting underdetermined linear system A*x=b can be treated as a linear programming (LP) problem, written to an "lp" file, which can then be read by optimization software such as cplex(), gurobi(), or scip(), and all possible solutions computed.

Some of these codes rely on access to files in the "eternity" directory, which might be accessed by a MATLAB "addpath()" command, or else by simply copying those files into the user's directory as well.

### Languages:

trinity is available in a MATLAB version and an Octave version.

### Related Data and Programs:

boat, a MATLAB code which considers the boat tiling puzzle, a smaller version of the eternity puzzle. The boat puzzle specifies a region R composed of 756 30-60-90 triangles, and a set of 21 "tiles", each consisting of 36 30-60-90 triangles, and seeks an arrangement of the tiles that exactly covers the region.

boomerang, a MATLAB code which considers the boomerang tiling puzzle, a smaller version of the eternity puzzle. The puzzle specifies a region R composed of 2376 30-60-90 triangles, and a set of 66 "tiles", each consisting of 36 30-60-90 triangles, and seeks an arrangement of the tiles that exactly covers the region.

boundary_word_drafter, a MATLAB code which describes the outline of an object on a grid of drafters, or 30-60-90 triangles, using a string of symbols that represent the sequence of steps tracing out the boundary.

eternity, a MATLAB code which considers the eternity puzzle, which considers an irregular dodecagon shape that is to be tiled by 209 distinct pieces, each formed by 36 contiguous 30-60-90 triangles, known as polydrafters.

eternity_tile, a MATLAB code which considers the individual tiles of the eternity puzzle, 209 distinct pieces, each formed by 36 contiguous 30-60-90 triangles, known as polydrafters.

pram, a MATLAB code which considers the pram puzzle, a smaller version of the eternity puzzle. The pram puzzle specifies a region R composed of 2304 30-60-90 triangles, and a set of 64 "tiles", consisting of 36 30-60-90 triangles, and seeks an arrangement of the tiles that exactly covers the region.

serenity, a MATLAB code which considers the serenity puzzle, a smaller version of the eternity puzzle. The serenity puzzle specifies a dodecagonal region R composed of 288 30-60-90 triangles, and a set of 8 "tiles", each consisting of 36 30-60-90 triangles, and seeks an arrangement of the tiles that exactly covers the region.

tortoise, a MATLAB code which considers the tortoise tiling puzzle, a smaller version of the eternity puzzle. The tortoise puzzle specifies a region R composed of 1620 30-60-90 triangles, and a set of 45 "tiles", each consisting of 36 30-60-90 triangles, and seeks an arrangement of the tiles that exactly covers the region.

trinity_cplex_test a BASH code which calls cplex(), to read the LP file defining the trinity tiling problem, solve the linear programming problem, and write the solution to a file.

trinity_gurobi_test a BASH code which calls gurobi(), to read the LP file defining the trinity tiling problem, solve the linear programming problem, and write the solution to a file.

trinity_scip_test a BASH code which calls scip(), to read the LP file defining the trinity tiling problem, solve the linear programming problem, and write the solution to a file.

whale, a MATLAB code which considers the whale tiling puzzle, a smaller version of the eternity puzzle. The whale puzzle specifies a region R composed of 288 30-60-90 triangles, and a set of 8 "tiles", each consisting of 36 30-60-90 triangles, and seeks an arrangement of the tiles that exactly covers the region.

### Reference:

1. Marcus Garvie, John Burkardt,
A new mathematical model for tiling finite regions of the plane with polyominoes,
Contributions to Discrete Mathematics,
Volume 15, Number 2, July 2020.
2. Solomon Golomb,
Polyominoes: Puzzles, Patterns, Problems, and Packings,
Princeton University Press, 1996,
ISBN: 9780691024448
3. Ed Pegg,
Polyform Patterns,
in Tribute to a Mathemagician,
Barry Cipra, Erik Demaine, Martin Demaine, editors,
pages 119-125, A K Peters, 2005.
4. Mark Wainwright,
Prize specimens,
Plus magazine,
01 January 2001,
https://plus.maths.org/content/prize-specimens

### Source code:

• trinity_grid_word.m, returns the boundary word for the grid.
• trinity_lp_alt.m, sets up the linear programming problem, using sparse matrix storage, and defining an alternative objective function, and writes it to an LP file, working only from the primary geometric data.
• trinity_solution_print.m, prints a solution, by listing each tile, and the (i,j) coordinates of the vertices of its 36 component elements.
• trinity_tile_id.m, returns the ID in the Eternity catalog, given the ID of a trinity tile.
• trinity_tile_num.m, returns the number of tiles in the puzzle.
• trinity_tile_word.m, returns the boundary word for any of the tiles.

Last revised on 06 February 2022.