simon-git: puzzles (main): Simon Tatham

Commits to Tartarus hosted VCS tartarus-commits at lists.tartarus.org
Sun Mar 26 20:46:18 BST 2023


TL;DR:
  8d66475 Loopy / grid.c: new grid type, 'Hats'.

Repository:     https://git.tartarus.org/simon/puzzles.git
On the web:     https://git.tartarus.org/?p=simon/puzzles.git
Branch updated: main
Committer:      Simon Tatham <anakin at pobox.com>
Date:           2023-03-26 20:46:18

commit 8d6647548f7d0051221374ad6eb2b6dd32e2a3ed
web diff https://git.tartarus.org/?p=simon/puzzles.git;a=commitdiff;h=8d6647548f7d0051221374ad6eb2b6dd32e2a3ed;hp=255744676c0c4c8fa391d7a03bdd3142d6db0ad2
Author: Simon Tatham <anakin at pobox.com>
Date:   Sun Mar 26 20:05:40 2023 +0100

    Loopy / grid.c: new grid type, 'Hats'.
    
    The big mathematical news this month is that a polygon has been
    discovered that will tile the plane but only aperiodically. Penrose
    tiles achieve this with two tile types; it's been an open question for
    decades whether you could do it with only one tile. Now someone has
    announced the discovery of such a thing, so _obviously_ this
    mathematically exciting tiling ought to be one of the Loopy grid
    options!
    
    The polygon, named a 'hat' by its discoverers, consists of the union
    of eight cells of the 'Kites' periodic tiling that Loopy already
    implements. So all the vertex coordinates of the whole tiling are
    vertices of the Kites grid, which makes handling the coordinates in an
    exact manner a lot easier than Penrose tilings.
    
    What's _harder_ than Penrose tilings is that, although this tiling can
    be generated by a vaguely similar system of recursive expansion, the
    expansion is geometrically distorting, which means you can't easily
    figure out which tiles can be discarded early to save CPU. Instead
    I've come up with a completely different system for generating a patch
    of tiling, by using a hierarchical coordinate system to track a
    location within many levels of the expansion process without ever
    simulating the process as a whole. I'm really quite pleased with that
    technique, and am tempted to try switching the Penrose generator over
    to it too - except that we'd have to keep the old generator around to
    stop old game ids being invalidated, and also, I think it would be
    slightly trickier without an underlying fixed grid and without
    overlaps in the tile expansion system.
    
    However, before coming up with that, I got most of the way through
    implementing the more obvious system of actually doing the expansions.
    The result worked, but was very slow (because I changed approach
    rather than try to implement tree-pruning under distortion). But the
    code was reusable for two other useful purposes: it generated the
    lookup tables needed for the production code, and it also generated a
    lot of useful diagrams. So I've committed it anyway as a supporting
    program, in a new 'aux' source subdirectory, and in aux/doc is a
    writeup of the coordinate system's concepts, with all those diagrams.
    (That's the kind of thing I'd normally put in a huge comment at the
    top of the file, but doing all those diagrams in ASCII art would be
    beyond miserable.)
    
    From a gameplay perspective: the hat polygon has 13 edges, but one of
    them has a vertex of the Kites tiling in the middle, and sometimes two
    other tile boundaries meet at that vertex. I've chosen to represent
    every hat as having degree 14 for Loopy purposes, because if you only
    included that extra vertex when it was needed, then people would be
    forever having to check whether this was a 13-hat or a 14-hat and it
    would be nightmarish to play.
    
    Even so, there's a lot of clicking involved to turn all those fiddly
    individual edges on or off. This grid is noticeably nicer to play in
    'autofollow' mode, by setting LOOPY_AUTOFOLLOW in the environment to
    either 'fixed' or 'adaptive'. I'm tempted to make 'fixed' the default,
    except that I think it would confuse players of ordinary square Loopy!

 CMakeLists.txt            |    4 +-
 aux/CMakeLists.txt        |    1 +
 aux/doc/arrow.svg         |    4 +
 aux/doc/expanded-F.svg    |   84 ++
 aux/doc/expanded-H.svg    |   99 ++
 aux/doc/expanded-P.svg    |   84 ++
 aux/doc/expanded-T.svg    |   54 ++
 aux/doc/hat-kites.svg     |   33 +
 aux/doc/hatmaps.html      |   62 ++
 aux/doc/hats-single-F.svg |   35 +
 aux/doc/hats-single-H.svg |   67 ++
 aux/doc/hats-single-P.svg |   35 +
 aux/doc/hats-single-T.svg |   19 +
 aux/doc/hats.html         |  258 ++++++
 aux/doc/kitemap-F.svg     |  783 ++++++++++++++++
 aux/doc/kitemap-H.svg     |  933 +++++++++++++++++++
 aux/doc/kitemap-P.svg     |  783 ++++++++++++++++
 aux/doc/kitemap-T.svg     |  483 ++++++++++
 aux/doc/metamap-F.svg     |  714 +++++++++++++++
 aux/doc/metamap-H.svg     |  819 +++++++++++++++++
 aux/doc/metamap-P.svg     |  708 +++++++++++++++
 aux/doc/metamap-T.svg     |  459 ++++++++++
 aux/doc/single-F.svg      |    9 +
 aux/doc/single-H.svg      |   11 +
 aux/doc/single-P.svg      |    9 +
 aux/doc/single-T.svg      |    8 +
 aux/hatgen-images.sh      |   23 +
 aux/hatgen.c              | 1713 +++++++++++++++++++++++++++++++++++
 grid.c                    |  158 ++++
 grid.h                    |    4 +-
 hat-tables.h              | 2183 +++++++++++++++++++++++++++++++++++++++++++++
 hat.c                     | 1248 ++++++++++++++++++++++++++
 hat.h                     |   67 ++
 loopy.c                   |    4 +-
 34 files changed, 11955 insertions(+), 3 deletions(-)



More information about the tartarus-commits mailing list