diff options
| author | Simon Tatham <anakin@pobox.com> | 2023-06-16 18:30:53 +0100 |
|---|---|---|
| committer | Simon Tatham <anakin@pobox.com> | 2023-06-16 19:15:47 +0100 |
| commit | a33d9fad02d6319cb9061119a6165ed5493a3ba5 (patch) | |
| tree | 849b0dcfe706ca7c4720de33b43b7f8ac69c0307 /spectre-tables-auto.h | |
| parent | c82537b4574d45aa16e50b7f8dc1f075cfdb69f9 (diff) | |
| download | puzzles-a33d9fad02d6319cb9061119a6165ed5493a3ba5.zip puzzles-a33d9fad02d6319cb9061119a6165ed5493a3ba5.tar.gz puzzles-a33d9fad02d6319cb9061119a6165ed5493a3ba5.tar.bz2 puzzles-a33d9fad02d6319cb9061119a6165ed5493a3ba5.tar.xz | |
Loopy / grid.c: support the new Spectre monotiling.
This uses a tile shape very similar to the hat, but the tiling
_structure_ is totally changed so that there aren't any reflected
copies of the tile.
I'm not sure how much difference this makes to gameplay: the two
tilings are very similar for Loopy purposes. But the code was fun to
write, and I think the Spectre shape is noticeably prettier, so I'm
adding this to the collection anyway.
The test programs also generate a pile of SVG images used in the
companion article on my website.
Diffstat (limited to 'spectre-tables-auto.h')
| -rw-r--r-- | spectre-tables-auto.h | 1220 |
1 files changed, 1220 insertions, 0 deletions
diff --git a/spectre-tables-auto.h b/spectre-tables-auto.h new file mode 100644 index 0000000..a41c4e1 --- /dev/null +++ b/spectre-tables-auto.h @@ -0,0 +1,1220 @@ +/* + * Autogenerated transition tables for the Spectre tiling. + * Generated by auxiliary/spectre-gen.c. + */ + +static const struct MapEntry hexmap_G[] = { + { true, 2, 5 }, /* edge 0 of hex 0 (F) */ + { true, 3, 5 }, /* edge 1 of hex 0 (F) */ + { true, 1, 0 }, /* edge 2 of hex 0 (F) */ + { false, 2, 0 }, /* edge 3 of hex 0 (F) */ + { false, 1, 2 }, /* edge 4 of hex 0 (F) */ + { false, 1, 1 }, /* edge 5 of hex 0 (F) */ + { true, 0, 2 }, /* edge 0 of hex 1 (X) */ + { true, 3, 4 }, /* edge 1 of hex 1 (X) */ + { false, 3, 1 }, /* edge 2 of hex 1 (X) */ + { false, 3, 0 }, /* edge 3 of hex 1 (X) */ + { false, 2, 2 }, /* edge 4 of hex 1 (X) */ + { false, 2, 1 }, /* edge 5 of hex 1 (X) */ + { false, 1, 0 }, /* edge 0 of hex 2 (G) */ + { false, 0, 1 }, /* edge 1 of hex 2 (G) */ + { true, 4, 1 }, /* edge 2 of hex 2 (G) */ + { true, 5, 1 }, /* edge 3 of hex 2 (G) */ + { true, 3, 0 }, /* edge 4 of hex 2 (G) */ + { true, 0, 0 }, /* edge 5 of hex 2 (G) */ + { true, 2, 4 }, /* edge 0 of hex 3 (S) */ + { true, 5, 0 }, /* edge 1 of hex 3 (S) */ + { true, 6, 0 }, /* edge 2 of hex 3 (S) */ + { false, 3, 2 }, /* edge 3 of hex 3 (S) */ + { true, 1, 1 }, /* edge 4 of hex 3 (S) */ + { true, 0, 1 }, /* edge 5 of hex 3 (S) */ + { true, 5, 2 }, /* edge 0 of hex 4 (P) */ + { true, 2, 2 }, /* edge 1 of hex 4 (P) */ + { false, 0, 0 }, /* edge 2 of hex 4 (P) */ + { false, 5, 1 }, /* edge 3 of hex 4 (P) */ + { false, 5, 0 }, /* edge 4 of hex 4 (P) */ + { false, 4, 4 }, /* edge 5 of hex 4 (P) */ + { true, 3, 1 }, /* edge 0 of hex 5 (D) */ + { true, 2, 3 }, /* edge 1 of hex 5 (D) */ + { true, 4, 0 }, /* edge 2 of hex 5 (D) */ + { false, 4, 3 }, /* edge 3 of hex 5 (D) */ + { false, 4, 2 }, /* edge 4 of hex 5 (D) */ + { true, 6, 1 }, /* edge 5 of hex 5 (D) */ + { true, 3, 2 }, /* edge 0 of hex 6 (J) */ + { true, 5, 5 }, /* edge 1 of hex 6 (J) */ + { false, 4, 1 }, /* edge 2 of hex 6 (J) */ + { false, 4, 0 }, /* edge 3 of hex 6 (J) */ + { false, 3, 4 }, /* edge 4 of hex 6 (J) */ + { false, 3, 3 }, /* edge 5 of hex 6 (J) */ +}; +static const struct MapEdge hexedges_G[] = { + { 0, 2 }, + { 2, 3 }, + { 5, 3 }, + { 8, 5 }, + { 13, 5 }, + { 18, 2 }, +}; +static const struct MapEntry hexin_G[] = { + { true, 4, 2 }, /* subedge 0 of edge 0 */ + { true, 2, 1 }, /* subedge 1 of edge 0 */ + { true, 2, 0 }, /* subedge 0 of edge 1 */ + { true, 0, 5 }, /* subedge 1 of edge 1 */ + { true, 0, 4 }, /* subedge 2 of edge 1 */ + { true, 0, 3 }, /* subedge 0 of edge 2 */ + { true, 1, 5 }, /* subedge 1 of edge 2 */ + { true, 1, 4 }, /* subedge 2 of edge 2 */ + { true, 1, 3 }, /* subedge 0 of edge 3 */ + { true, 1, 2 }, /* subedge 1 of edge 3 */ + { true, 3, 3 }, /* subedge 2 of edge 3 */ + { true, 6, 5 }, /* subedge 3 of edge 3 */ + { true, 6, 4 }, /* subedge 4 of edge 3 */ + { true, 6, 3 }, /* subedge 0 of edge 4 */ + { true, 6, 2 }, /* subedge 1 of edge 4 */ + { true, 5, 4 }, /* subedge 2 of edge 4 */ + { true, 5, 3 }, /* subedge 3 of edge 4 */ + { true, 4, 5 }, /* subedge 4 of edge 4 */ + { true, 4, 4 }, /* subedge 0 of edge 5 */ + { true, 4, 3 }, /* subedge 1 of edge 5 */ +}; +static const struct MapEntry hexmap_D[] = { + { true, 2, 5 }, /* edge 0 of hex 0 (F) */ + { true, 3, 5 }, /* edge 1 of hex 0 (F) */ + { true, 1, 0 }, /* edge 2 of hex 0 (F) */ + { false, 1, 3 }, /* edge 3 of hex 0 (F) */ + { false, 1, 2 }, /* edge 4 of hex 0 (F) */ + { false, 1, 1 }, /* edge 5 of hex 0 (F) */ + { true, 0, 2 }, /* edge 0 of hex 1 (P) */ + { true, 3, 4 }, /* edge 1 of hex 1 (P) */ + { false, 3, 0 }, /* edge 2 of hex 1 (P) */ + { false, 2, 1 }, /* edge 3 of hex 1 (P) */ + { false, 2, 0 }, /* edge 4 of hex 1 (P) */ + { false, 1, 4 }, /* edge 5 of hex 1 (P) */ + { false, 1, 0 }, /* edge 0 of hex 2 (G) */ + { false, 0, 2 }, /* edge 1 of hex 2 (G) */ + { true, 4, 1 }, /* edge 2 of hex 2 (G) */ + { true, 5, 1 }, /* edge 3 of hex 2 (G) */ + { true, 3, 0 }, /* edge 4 of hex 2 (G) */ + { true, 0, 0 }, /* edge 5 of hex 2 (G) */ + { true, 2, 4 }, /* edge 0 of hex 3 (S) */ + { true, 5, 0 }, /* edge 1 of hex 3 (S) */ + { true, 6, 0 }, /* edge 2 of hex 3 (S) */ + { false, 3, 1 }, /* edge 3 of hex 3 (S) */ + { true, 1, 1 }, /* edge 4 of hex 3 (S) */ + { true, 0, 1 }, /* edge 5 of hex 3 (S) */ + { true, 5, 2 }, /* edge 0 of hex 4 (X) */ + { true, 2, 2 }, /* edge 1 of hex 4 (X) */ + { false, 0, 1 }, /* edge 2 of hex 4 (X) */ + { false, 0, 0 }, /* edge 3 of hex 4 (X) */ + { false, 5, 4 }, /* edge 4 of hex 4 (X) */ + { false, 5, 3 }, /* edge 5 of hex 4 (X) */ + { true, 3, 1 }, /* edge 0 of hex 5 (D) */ + { true, 2, 3 }, /* edge 1 of hex 5 (D) */ + { true, 4, 0 }, /* edge 2 of hex 5 (D) */ + { false, 5, 2 }, /* edge 3 of hex 5 (D) */ + { true, 7, 1 }, /* edge 4 of hex 5 (D) */ + { true, 6, 1 }, /* edge 5 of hex 5 (D) */ + { true, 3, 2 }, /* edge 0 of hex 6 (F) */ + { true, 5, 5 }, /* edge 1 of hex 6 (F) */ + { true, 7, 0 }, /* edge 2 of hex 6 (F) */ + { false, 4, 0 }, /* edge 3 of hex 6 (F) */ + { false, 3, 3 }, /* edge 4 of hex 6 (F) */ + { false, 3, 2 }, /* edge 5 of hex 6 (F) */ + { true, 6, 2 }, /* edge 0 of hex 7 (X) */ + { true, 5, 4 }, /* edge 1 of hex 7 (X) */ + { false, 5, 1 }, /* edge 2 of hex 7 (X) */ + { false, 5, 0 }, /* edge 3 of hex 7 (X) */ + { false, 4, 2 }, /* edge 4 of hex 7 (X) */ + { false, 4, 1 }, /* edge 5 of hex 7 (X) */ +}; +static const struct MapEdge hexedges_D[] = { + { 0, 3 }, + { 3, 5 }, + { 8, 2 }, + { 10, 4 }, + { 14, 3 }, + { 17, 5 }, +}; +static const struct MapEntry hexin_D[] = { + { true, 4, 3 }, /* subedge 0 of edge 0 */ + { true, 4, 2 }, /* subedge 1 of edge 0 */ + { true, 2, 1 }, /* subedge 2 of edge 0 */ + { true, 2, 0 }, /* subedge 0 of edge 1 */ + { true, 0, 5 }, /* subedge 1 of edge 1 */ + { true, 0, 4 }, /* subedge 2 of edge 1 */ + { true, 0, 3 }, /* subedge 3 of edge 1 */ + { true, 1, 5 }, /* subedge 4 of edge 1 */ + { true, 1, 4 }, /* subedge 0 of edge 2 */ + { true, 1, 3 }, /* subedge 1 of edge 2 */ + { true, 1, 2 }, /* subedge 0 of edge 3 */ + { true, 3, 3 }, /* subedge 1 of edge 3 */ + { true, 6, 5 }, /* subedge 2 of edge 3 */ + { true, 6, 4 }, /* subedge 3 of edge 3 */ + { true, 6, 3 }, /* subedge 0 of edge 4 */ + { true, 7, 5 }, /* subedge 1 of edge 4 */ + { true, 7, 4 }, /* subedge 2 of edge 4 */ + { true, 7, 3 }, /* subedge 0 of edge 5 */ + { true, 7, 2 }, /* subedge 1 of edge 5 */ + { true, 5, 3 }, /* subedge 2 of edge 5 */ + { true, 4, 5 }, /* subedge 3 of edge 5 */ + { true, 4, 4 }, /* subedge 4 of edge 5 */ +}; +static const struct MapEntry hexmap_J[] = { + { true, 2, 5 }, /* edge 0 of hex 0 (F) */ + { true, 3, 5 }, /* edge 1 of hex 0 (F) */ + { true, 1, 0 }, /* edge 2 of hex 0 (F) */ + { false, 1, 3 }, /* edge 3 of hex 0 (F) */ + { false, 1, 2 }, /* edge 4 of hex 0 (F) */ + { false, 1, 1 }, /* edge 5 of hex 0 (F) */ + { true, 0, 2 }, /* edge 0 of hex 1 (P) */ + { true, 3, 4 }, /* edge 1 of hex 1 (P) */ + { false, 3, 0 }, /* edge 2 of hex 1 (P) */ + { false, 2, 1 }, /* edge 3 of hex 1 (P) */ + { false, 2, 0 }, /* edge 4 of hex 1 (P) */ + { false, 1, 4 }, /* edge 5 of hex 1 (P) */ + { false, 1, 0 }, /* edge 0 of hex 2 (G) */ + { false, 0, 1 }, /* edge 1 of hex 2 (G) */ + { true, 4, 1 }, /* edge 2 of hex 2 (G) */ + { true, 5, 1 }, /* edge 3 of hex 2 (G) */ + { true, 3, 0 }, /* edge 4 of hex 2 (G) */ + { true, 0, 0 }, /* edge 5 of hex 2 (G) */ + { true, 2, 4 }, /* edge 0 of hex 3 (S) */ + { true, 5, 0 }, /* edge 1 of hex 3 (S) */ + { true, 6, 0 }, /* edge 2 of hex 3 (S) */ + { false, 3, 1 }, /* edge 3 of hex 3 (S) */ + { true, 1, 1 }, /* edge 4 of hex 3 (S) */ + { true, 0, 1 }, /* edge 5 of hex 3 (S) */ + { true, 5, 2 }, /* edge 0 of hex 4 (Y) */ + { true, 2, 2 }, /* edge 1 of hex 4 (Y) */ + { false, 0, 0 }, /* edge 2 of hex 4 (Y) */ + { false, 5, 4 }, /* edge 3 of hex 4 (Y) */ + { false, 5, 3 }, /* edge 4 of hex 4 (Y) */ + { false, 5, 2 }, /* edge 5 of hex 4 (Y) */ + { true, 3, 1 }, /* edge 0 of hex 5 (D) */ + { true, 2, 3 }, /* edge 1 of hex 5 (D) */ + { true, 4, 0 }, /* edge 2 of hex 5 (D) */ + { false, 5, 1 }, /* edge 3 of hex 5 (D) */ + { true, 7, 1 }, /* edge 4 of hex 5 (D) */ + { true, 6, 1 }, /* edge 5 of hex 5 (D) */ + { true, 3, 2 }, /* edge 0 of hex 6 (F) */ + { true, 5, 5 }, /* edge 1 of hex 6 (F) */ + { true, 7, 0 }, /* edge 2 of hex 6 (F) */ + { false, 3, 4 }, /* edge 3 of hex 6 (F) */ + { false, 3, 3 }, /* edge 4 of hex 6 (F) */ + { false, 3, 2 }, /* edge 5 of hex 6 (F) */ + { true, 6, 2 }, /* edge 0 of hex 7 (P) */ + { true, 5, 4 }, /* edge 1 of hex 7 (P) */ + { false, 5, 0 }, /* edge 2 of hex 7 (P) */ + { false, 4, 1 }, /* edge 3 of hex 7 (P) */ + { false, 4, 0 }, /* edge 4 of hex 7 (P) */ + { false, 3, 5 }, /* edge 5 of hex 7 (P) */ +}; +static const struct MapEdge hexedges_J[] = { + { 0, 2 }, + { 2, 5 }, + { 7, 2 }, + { 9, 6 }, + { 15, 2 }, + { 17, 5 }, +}; +static const struct MapEntry hexin_J[] = { + { true, 4, 2 }, /* subedge 0 of edge 0 */ + { true, 2, 1 }, /* subedge 1 of edge 0 */ + { true, 2, 0 }, /* subedge 0 of edge 1 */ + { true, 0, 5 }, /* subedge 1 of edge 1 */ + { true, 0, 4 }, /* subedge 2 of edge 1 */ + { true, 0, 3 }, /* subedge 3 of edge 1 */ + { true, 1, 5 }, /* subedge 4 of edge 1 */ + { true, 1, 4 }, /* subedge 0 of edge 2 */ + { true, 1, 3 }, /* subedge 1 of edge 2 */ + { true, 1, 2 }, /* subedge 0 of edge 3 */ + { true, 3, 3 }, /* subedge 1 of edge 3 */ + { true, 6, 5 }, /* subedge 2 of edge 3 */ + { true, 6, 4 }, /* subedge 3 of edge 3 */ + { true, 6, 3 }, /* subedge 4 of edge 3 */ + { true, 7, 5 }, /* subedge 5 of edge 3 */ + { true, 7, 4 }, /* subedge 0 of edge 4 */ + { true, 7, 3 }, /* subedge 1 of edge 4 */ + { true, 7, 2 }, /* subedge 0 of edge 5 */ + { true, 5, 3 }, /* subedge 1 of edge 5 */ + { true, 4, 5 }, /* subedge 2 of edge 5 */ + { true, 4, 4 }, /* subedge 3 of edge 5 */ + { true, 4, 3 }, /* subedge 4 of edge 5 */ +}; +static const struct MapEntry hexmap_L[] = { + { true, 2, 5 }, /* edge 0 of hex 0 (F) */ + { true, 3, 5 }, /* edge 1 of hex 0 (F) */ + { true, 1, 0 }, /* edge 2 of hex 0 (F) */ + { false, 1, 3 }, /* edge 3 of hex 0 (F) */ + { false, 1, 2 }, /* edge 4 of hex 0 (F) */ + { false, 1, 1 }, /* edge 5 of hex 0 (F) */ + { true, 0, 2 }, /* edge 0 of hex 1 (P) */ + { true, 3, 4 }, /* edge 1 of hex 1 (P) */ + { false, 3, 0 }, /* edge 2 of hex 1 (P) */ + { false, 2, 1 }, /* edge 3 of hex 1 (P) */ + { false, 2, 0 }, /* edge 4 of hex 1 (P) */ + { false, 1, 4 }, /* edge 5 of hex 1 (P) */ + { false, 1, 0 }, /* edge 0 of hex 2 (G) */ + { false, 0, 1 }, /* edge 1 of hex 2 (G) */ + { true, 4, 1 }, /* edge 2 of hex 2 (G) */ + { true, 5, 1 }, /* edge 3 of hex 2 (G) */ + { true, 3, 0 }, /* edge 4 of hex 2 (G) */ + { true, 0, 0 }, /* edge 5 of hex 2 (G) */ + { true, 2, 4 }, /* edge 0 of hex 3 (S) */ + { true, 5, 0 }, /* edge 1 of hex 3 (S) */ + { true, 6, 0 }, /* edge 2 of hex 3 (S) */ + { false, 3, 1 }, /* edge 3 of hex 3 (S) */ + { true, 1, 1 }, /* edge 4 of hex 3 (S) */ + { true, 0, 1 }, /* edge 5 of hex 3 (S) */ + { true, 5, 2 }, /* edge 0 of hex 4 (Y) */ + { true, 2, 2 }, /* edge 1 of hex 4 (Y) */ + { false, 0, 0 }, /* edge 2 of hex 4 (Y) */ + { false, 5, 5 }, /* edge 3 of hex 4 (Y) */ + { false, 5, 4 }, /* edge 4 of hex 4 (Y) */ + { false, 5, 3 }, /* edge 5 of hex 4 (Y) */ + { true, 3, 1 }, /* edge 0 of hex 5 (D) */ + { true, 2, 3 }, /* edge 1 of hex 5 (D) */ + { true, 4, 0 }, /* edge 2 of hex 5 (D) */ + { false, 5, 2 }, /* edge 3 of hex 5 (D) */ + { true, 7, 1 }, /* edge 4 of hex 5 (D) */ + { true, 6, 1 }, /* edge 5 of hex 5 (D) */ + { true, 3, 2 }, /* edge 0 of hex 6 (F) */ + { true, 5, 5 }, /* edge 1 of hex 6 (F) */ + { true, 7, 0 }, /* edge 2 of hex 6 (F) */ + { false, 4, 0 }, /* edge 3 of hex 6 (F) */ + { false, 3, 3 }, /* edge 4 of hex 6 (F) */ + { false, 3, 2 }, /* edge 5 of hex 6 (F) */ + { true, 6, 2 }, /* edge 0 of hex 7 (X) */ + { true, 5, 4 }, /* edge 1 of hex 7 (X) */ + { false, 5, 1 }, /* edge 2 of hex 7 (X) */ + { false, 5, 0 }, /* edge 3 of hex 7 (X) */ + { false, 4, 2 }, /* edge 4 of hex 7 (X) */ + { false, 4, 1 }, /* edge 5 of hex 7 (X) */ +}; +static const struct MapEdge hexedges_L[] = { + { 0, 2 }, + { 2, 5 }, + { 7, 2 }, + { 9, 4 }, + { 13, 3 }, + { 16, 6 }, +}; +static const struct MapEntry hexin_L[] = { + { true, 4, 2 }, /* subedge 0 of edge 0 */ + { true, 2, 1 }, /* subedge 1 of edge 0 */ + { true, 2, 0 }, /* subedge 0 of edge 1 */ + { true, 0, 5 }, /* subedge 1 of edge 1 */ + { true, 0, 4 }, /* subedge 2 of edge 1 */ + { true, 0, 3 }, /* subedge 3 of edge 1 */ + { true, 1, 5 }, /* subedge 4 of edge 1 */ + { true, 1, 4 }, /* subedge 0 of edge 2 */ + { true, 1, 3 }, /* subedge 1 of edge 2 */ + { true, 1, 2 }, /* subedge 0 of edge 3 */ + { true, 3, 3 }, /* subedge 1 of edge 3 */ + { true, 6, 5 }, /* subedge 2 of edge 3 */ + { true, 6, 4 }, /* subedge 3 of edge 3 */ + { true, 6, 3 }, /* subedge 0 of edge 4 */ + { true, 7, 5 }, /* subedge 1 of edge 4 */ + { true, 7, 4 }, /* subedge 2 of edge 4 */ + { true, 7, 3 }, /* subedge 0 of edge 5 */ + { true, 7, 2 }, /* subedge 1 of edge 5 */ + { true, 5, 3 }, /* subedge 2 of edge 5 */ + { true, 4, 5 }, /* subedge 3 of edge 5 */ + { true, 4, 4 }, /* subedge 4 of edge 5 */ + { true, 4, 3 }, /* subedge 5 of edge 5 */ +}; +static const struct MapEntry hexmap_X[] = { + { true, 2, 5 }, /* edge 0 of hex 0 (F) */ + { true, 3, 5 }, /* edge 1 of hex 0 (F) */ + { true, 1, 0 }, /* edge 2 of hex 0 (F) */ + { false, 2, 0 }, /* edge 3 of hex 0 (F) */ + { false, 1, 2 }, /* edge 4 of hex 0 (F) */ + { false, 1, 1 }, /* edge 5 of hex 0 (F) */ + { true, 0, 2 }, /* edge 0 of hex 1 (Y) */ + { true, 3, 4 }, /* edge 1 of hex 1 (Y) */ + { false, 3, 0 }, /* edge 2 of hex 1 (Y) */ + { false, 2, 3 }, /* edge 3 of hex 1 (Y) */ + { false, 2, 2 }, /* edge 4 of hex 1 (Y) */ + { false, 2, 1 }, /* edge 5 of hex 1 (Y) */ + { false, 1, 0 }, /* edge 0 of hex 2 (G) */ + { false, 0, 1 }, /* edge 1 of hex 2 (G) */ + { true, 4, 1 }, /* edge 2 of hex 2 (G) */ + { true, 5, 1 }, /* edge 3 of hex 2 (G) */ + { true, 3, 0 }, /* edge 4 of hex 2 (G) */ + { true, 0, 0 }, /* edge 5 of hex 2 (G) */ + { true, 2, 4 }, /* edge 0 of hex 3 (S) */ + { true, 5, 0 }, /* edge 1 of hex 3 (S) */ + { true, 6, 0 }, /* edge 2 of hex 3 (S) */ + { false, 3, 1 }, /* edge 3 of hex 3 (S) */ + { true, 1, 1 }, /* edge 4 of hex 3 (S) */ + { true, 0, 1 }, /* edge 5 of hex 3 (S) */ + { true, 5, 2 }, /* edge 0 of hex 4 (Y) */ + { true, 2, 2 }, /* edge 1 of hex 4 (Y) */ + { false, 0, 0 }, /* edge 2 of hex 4 (Y) */ + { false, 5, 4 }, /* edge 3 of hex 4 (Y) */ + { false, 5, 3 }, /* edge 4 of hex 4 (Y) */ + { false, 5, 2 }, /* edge 5 of hex 4 (Y) */ + { true, 3, 1 }, /* edge 0 of hex 5 (D) */ + { true, 2, 3 }, /* edge 1 of hex 5 (D) */ + { true, 4, 0 }, /* edge 2 of hex 5 (D) */ + { false, 5, 1 }, /* edge 3 of hex 5 (D) */ + { true, 7, 1 }, /* edge 4 of hex 5 (D) */ + { true, 6, 1 }, /* edge 5 of hex 5 (D) */ + { true, 3, 2 }, /* edge 0 of hex 6 (F) */ + { true, 5, 5 }, /* edge 1 of hex 6 (F) */ + { true, 7, 0 }, /* edge 2 of hex 6 (F) */ + { false, 3, 4 }, /* edge 3 of hex 6 (F) */ + { false, 3, 3 }, /* edge 4 of hex 6 (F) */ + { false, 3, 2 }, /* edge 5 of hex 6 (F) */ + { true, 6, 2 }, /* edge 0 of hex 7 (P) */ + { true, 5, 4 }, /* edge 1 of hex 7 (P) */ + { false, 5, 0 }, /* edge 2 of hex 7 (P) */ + { false, 4, 1 }, /* edge 3 of hex 7 (P) */ + { false, 4, 0 }, /* edge 4 of hex 7 (P) */ + { false, 3, 5 }, /* edge 5 of hex 7 (P) */ +}; +static const struct MapEdge hexedges_X[] = { + { 0, 2 }, + { 2, 3 }, + { 5, 4 }, + { 9, 6 }, + { 15, 2 }, + { 17, 5 }, +}; +static const struct MapEntry hexin_X[] = { + { true, 4, 2 }, /* subedge 0 of edge 0 */ + { true, 2, 1 }, /* subedge 1 of edge 0 */ + { true, 2, 0 }, /* subedge 0 of edge 1 */ + { true, 0, 5 }, /* subedge 1 of edge 1 */ + { true, 0, 4 }, /* subedge 2 of edge 1 */ + { true, 0, 3 }, /* subedge 0 of edge 2 */ + { true, 1, 5 }, /* subedge 1 of edge 2 */ + { true, 1, 4 }, /* subedge 2 of edge 2 */ + { true, 1, 3 }, /* subedge 3 of edge 2 */ + { true, 1, 2 }, /* subedge 0 of edge 3 */ + { true, 3, 3 }, /* subedge 1 of edge 3 */ + { true, 6, 5 }, /* subedge 2 of edge 3 */ + { true, 6, 4 }, /* subedge 3 of edge 3 */ + { true, 6, 3 }, /* subedge 4 of edge 3 */ + { true, 7, 5 }, /* subedge 5 of edge 3 */ + { true, 7, 4 }, /* subedge 0 of edge 4 */ + { true, 7, 3 }, /* subedge 1 of edge 4 */ + { true, 7, 2 }, /* subedge 0 of edge 5 */ + { true, 5, 3 }, /* subedge 1 of edge 5 */ + { true, 4, 5 }, /* subedge 2 of edge 5 */ + { true, 4, 4 }, /* subedge 3 of edge 5 */ + { true, 4, 3 }, /* subedge 4 of edge 5 */ +}; +static const struct MapEntry hexmap_P[] = { + { true, 2, 5 }, /* edge 0 of hex 0 (F) */ + { true, 3, 5 }, /* edge 1 of hex 0 (F) */ + { true, 1, 0 }, /* edge 2 of hex 0 (F) */ + { false, 2, 0 }, /* edge 3 of hex 0 (F) */ + { false, 1, 2 }, /* edge 4 of hex 0 (F) */ + { false, 1, 1 }, /* edge 5 of hex 0 (F) */ + { true, 0, 2 }, /* edge 0 of hex 1 (Y) */ + { true, 3, 4 }, /* edge 1 of hex 1 (Y) */ + { false, 3, 0 }, /* edge 2 of hex 1 (Y) */ + { false, 2, 3 }, /* edge 3 of hex 1 (Y) */ + { false, 2, 2 }, /* edge 4 of hex 1 (Y) */ + { false, 2, 1 }, /* edge 5 of hex 1 (Y) */ + { false, 1, 0 }, /* edge 0 of hex 2 (G) */ + { false, 0, 1 }, /* edge 1 of hex 2 (G) */ + { true, 4, 1 }, /* edge 2 of hex 2 (G) */ + { true, 5, 1 }, /* edge 3 of hex 2 (G) */ + { true, 3, 0 }, /* edge 4 of hex 2 (G) */ + { true, 0, 0 }, /* edge 5 of hex 2 (G) */ + { true, 2, 4 }, /* edge 0 of hex 3 (S) */ + { true, 5, 0 }, /* edge 1 of hex 3 (S) */ + { true, 6, 0 }, /* edge 2 of hex 3 (S) */ + { false, 3, 1 }, /* edge 3 of hex 3 (S) */ + { true, 1, 1 }, /* edge 4 of hex 3 (S) */ + { true, 0, 1 }, /* edge 5 of hex 3 (S) */ + { true, 5, 2 }, /* edge 0 of hex 4 (Y) */ + { true, 2, 2 }, /* edge 1 of hex 4 (Y) */ + { false, 0, 0 }, /* edge 2 of hex 4 (Y) */ + { false, 5, 5 }, /* edge 3 of hex 4 (Y) */ + { false, 5, 4 }, /* edge 4 of hex 4 (Y) */ + { false, 5, 3 }, /* edge 5 of hex 4 (Y) */ + { true, 3, 1 }, /* edge 0 of hex 5 (D) */ + { true, 2, 3 }, /* edge 1 of hex 5 (D) */ + { true, 4, 0 }, /* edge 2 of hex 5 (D) */ + { false, 5, 2 }, /* edge 3 of hex 5 (D) */ + { true, 7, 1 }, /* edge 4 of hex 5 (D) */ + { true, 6, 1 }, /* edge 5 of hex 5 (D) */ + { true, 3, 2 }, /* edge 0 of hex 6 (F) */ + { true, 5, 5 }, /* edge 1 of hex 6 (F) */ + { true, 7, 0 }, /* edge 2 of hex 6 (F) */ + { false, 4, 0 }, /* edge 3 of hex 6 (F) */ + { false, 3, 3 }, /* edge 4 of hex 6 (F) */ + { false, 3, 2 }, /* edge 5 of hex 6 (F) */ + { true, 6, 2 }, /* edge 0 of hex 7 (X) */ + { true, 5, 4 }, /* edge 1 of hex 7 (X) */ + { false, 5, 1 }, /* edge 2 of hex 7 (X) */ + { false, 5, 0 }, /* edge 3 of hex 7 (X) */ + { false, 4, 2 }, /* edge 4 of hex 7 (X) */ + { false, 4, 1 }, /* edge 5 of hex 7 (X) */ +}; +static const struct MapEdge hexedges_P[] = { + { 0, 2 }, + { 2, 3 }, + { 5, 4 }, + { 9, 4 }, + { 13, 3 }, + { 16, 6 }, +}; +static const struct MapEntry hexin_P[] = { + { true, 4, 2 }, /* subedge 0 of edge 0 */ + { true, 2, 1 }, /* subedge 1 of edge 0 */ + { true, 2, 0 }, /* subedge 0 of edge 1 */ + { true, 0, 5 }, /* subedge 1 of edge 1 */ + { true, 0, 4 }, /* subedge 2 of edge 1 */ + { true, 0, 3 }, /* subedge 0 of edge 2 */ + { true, 1, 5 }, /* subedge 1 of edge 2 */ + { true, 1, 4 }, /* subedge 2 of edge 2 */ + { true, 1, 3 }, /* subedge 3 of edge 2 */ + { true, 1, 2 }, /* subedge 0 of edge 3 */ + { true, 3, 3 }, /* subedge 1 of edge 3 */ + { true, 6, 5 }, /* subedge 2 of edge 3 */ + { true, 6, 4 }, /* subedge 3 of edge 3 */ + { true, 6, 3 }, /* subedge 0 of edge 4 */ + { true, 7, 5 }, /* subedge 1 of edge 4 */ + { true, 7, 4 }, /* subedge 2 of edge 4 */ + { true, 7, 3 }, /* subedge 0 of edge 5 */ + { true, 7, 2 }, /* subedge 1 of edge 5 */ + { true, 5, 3 }, /* subedge 2 of edge 5 */ + { true, 4, 5 }, /* subedge 3 of edge 5 */ + { true, 4, 4 }, /* subedge 4 of edge 5 */ + { true, 4, 3 }, /* subedge 5 of edge 5 */ +}; +static const struct MapEntry hexmap_S[] = { + { true, 2, 5 }, /* edge 0 of hex 0 (L) */ + { true, 3, 5 }, /* edge 1 of hex 0 (L) */ + { true, 1, 0 }, /* edge 2 of hex 0 (L) */ + { false, 1, 1 }, /* edge 3 of hex 0 (L) */ + { false, 1, 0 }, /* edge 4 of hex 0 (L) */ + { false, 0, 4 }, /* edge 5 of hex 0 (L) */ + { true, 0, 2 }, /* edge 0 of hex 1 (P) */ + { true, 3, 4 }, /* edge 1 of hex 1 (P) */ + { false, 3, 0 }, /* edge 2 of hex 1 (P) */ + { false, 2, 1 }, /* edge 3 of hex 1 (P) */ + { false, 2, 0 }, /* edge 4 of hex 1 (P) */ + { false, 1, 2 }, /* edge 5 of hex 1 (P) */ + { false, 0, 3 }, /* edge 0 of hex 2 (G) */ + { false, 0, 2 }, /* edge 1 of hex 2 (G) */ + { true, 4, 1 }, /* edge 2 of hex 2 (G) */ + { true, 5, 1 }, /* edge 3 of hex 2 (G) */ + { true, 3, 0 }, /* edge 4 of hex 2 (G) */ + { true, 0, 0 }, /* edge 5 of hex 2 (G) */ + { true, 2, 4 }, /* edge 0 of hex 3 (S) */ + { true, 5, 0 }, /* edge 1 of hex 3 (S) */ + { true, 6, 0 }, /* edge 2 of hex 3 (S) */ + { false, 3, 1 }, /* edge 3 of hex 3 (S) */ + { true, 1, 1 }, /* edge 4 of hex 3 (S) */ + { true, 0, 1 }, /* edge 5 of hex 3 (S) */ + { true, 5, 2 }, /* edge 0 of hex 4 (X) */ + { true, 2, 2 }, /* edge 1 of hex 4 (X) */ + { false, 0, 1 }, /* edge 2 of hex 4 (X) */ + { false, 0, 0 }, /* edge 3 of hex 4 (X) */ + { false, 5, 4 }, /* edge 4 of hex 4 (X) */ + { false, 5, 3 }, /* edge 5 of hex 4 (X) */ + { true, 3, 1 }, /* edge 0 of hex 5 (D) */ + { true, 2, 3 }, /* edge 1 of hex 5 (D) */ + { true, 4, 0 }, /* edge 2 of hex 5 (D) */ + { false, 5, 2 }, /* edge 3 of hex 5 (D) */ + { true, 7, 1 }, /* edge 4 of hex 5 (D) */ + { true, 6, 1 }, /* edge 5 of hex 5 (D) */ + { true, 3, 2 }, /* edge 0 of hex 6 (F) */ + { true, 5, 5 }, /* edge 1 of hex 6 (F) */ + { true, 7, 0 }, /* edge 2 of hex 6 (F) */ + { false, 4, 0 }, /* edge 3 of hex 6 (F) */ + { false, 3, 3 }, /* edge 4 of hex 6 (F) */ + { false, 3, 2 }, /* edge 5 of hex 6 (F) */ + { true, 6, 2 }, /* edge 0 of hex 7 (X) */ + { true, 5, 4 }, /* edge 1 of hex 7 (X) */ + { false, 5, 1 }, /* edge 2 of hex 7 (X) */ + { false, 5, 0 }, /* edge 3 of hex 7 (X) */ + { false, 4, 2 }, /* edge 4 of hex 7 (X) */ + { false, 4, 1 }, /* edge 5 of hex 7 (X) */ +}; +static const struct MapEdge hexedges_S[] = { + { 0, 5 }, + { 5, 3 }, + { 8, 2 }, + { 10, 4 }, + { 14, 3 }, + { 17, 5 }, +}; +static const struct MapEntry hexin_S[] = { + { true, 4, 3 }, /* subedge 0 of edge 0 */ + { true, 4, 2 }, /* subedge 1 of edge 0 */ + { true, 2, 1 }, /* subedge 2 of edge 0 */ + { true, 2, 0 }, /* subedge 3 of edge 0 */ + { true, 0, 5 }, /* subedge 4 of edge 0 */ + { true, 0, 4 }, /* subedge 0 of edge 1 */ + { true, 0, 3 }, /* subedge 1 of edge 1 */ + { true, 1, 5 }, /* subedge 2 of edge 1 */ + { true, 1, 4 }, /* subedge 0 of edge 2 */ + { true, 1, 3 }, /* subedge 1 of edge 2 */ + { true, 1, 2 }, /* subedge 0 of edge 3 */ + { true, 3, 3 }, /* subedge 1 of edge 3 */ + { true, 6, 5 }, /* subedge 2 of edge 3 */ + { true, 6, 4 }, /* subedge 3 of edge 3 */ + { true, 6, 3 }, /* subedge 0 of edge 4 */ + { true, 7, 5 }, /* subedge 1 of edge 4 */ + { true, 7, 4 }, /* subedge 2 of edge 4 */ + { true, 7, 3 }, /* subedge 0 of edge 5 */ + { true, 7, 2 }, /* subedge 1 of edge 5 */ + { true, 5, 3 }, /* subedge 2 of edge 5 */ + { true, 4, 5 }, /* subedge 3 of edge 5 */ + { true, 4, 4 }, /* subedge 4 of edge 5 */ +}; +static const struct MapEntry hexmap_F[] = { + { true, 2, 5 }, /* edge 0 of hex 0 (F) */ + { true, 3, 5 }, /* edge 1 of hex 0 (F) */ + { true, 1, 0 }, /* edge 2 of hex 0 (F) */ + { false, 1, 3 }, /* edge 3 of hex 0 (F) */ + { false, 1, 2 }, /* edge 4 of hex 0 (F) */ + { false, 1, 1 }, /* edge 5 of hex 0 (F) */ + { true, 0, 2 }, /* edge 0 of hex 1 (P) */ + { true, 3, 4 }, /* edge 1 of hex 1 (P) */ + { false, 3, 0 }, /* edge 2 of hex 1 (P) */ + { false, 2, 1 }, /* edge 3 of hex 1 (P) */ + { false, 2, 0 }, /* edge 4 of hex 1 (P) */ + { false, 1, 4 }, /* edge 5 of hex 1 (P) */ + { false, 1, 0 }, /* edge 0 of hex 2 (G) */ + { false, 0, 1 }, /* edge 1 of hex 2 (G) */ + { true, 4, 1 }, /* edge 2 of hex 2 (G) */ + { true, 5, 1 }, /* edge 3 of hex 2 (G) */ + { true, 3, 0 }, /* edge 4 of hex 2 (G) */ + { true, 0, 0 }, /* edge 5 of hex 2 (G) */ + { true, 2, 4 }, /* edge 0 of hex 3 (S) */ + { true, 5, 0 }, /* edge 1 of hex 3 (S) */ + { true, 6, 0 }, /* edge 2 of hex 3 (S) */ + { false, 3, 1 }, /* edge 3 of hex 3 (S) */ + { true, 1, 1 }, /* edge 4 of hex 3 (S) */ + { true, 0, 1 }, /* edge 5 of hex 3 (S) */ + { true, 5, 2 }, /* edge 0 of hex 4 (Y) */ + { true, 2, 2 }, /* edge 1 of hex 4 (Y) */ + { false, 0, 0 }, /* edge 2 of hex 4 (Y) */ + { false, 5, 4 }, /* edge 3 of hex 4 (Y) */ + { false, 5, 3 }, /* edge 4 of hex 4 (Y) */ + { false, 5, 2 }, /* edge 5 of hex 4 (Y) */ + { true, 3, 1 }, /* edge 0 of hex 5 (D) */ + { true, 2, 3 }, /* edge 1 of hex 5 (D) */ + { true, 4, 0 }, /* edge 2 of hex 5 (D) */ + { false, 5, 1 }, /* edge 3 of hex 5 (D) */ + { true, 7, 1 }, /* edge 4 of hex 5 (D) */ + { true, 6, 1 }, /* edge 5 of hex 5 (D) */ + { true, 3, 2 }, /* edge 0 of hex 6 (F) */ + { true, 5, 5 }, /* edge 1 of hex 6 (F) */ + { true, 7, 0 }, /* edge 2 of hex 6 (F) */ + { false, 4, 0 }, /* edge 3 of hex 6 (F) */ + { false, 3, 3 }, /* edge 4 of hex 6 (F) */ + { false, 3, 2 }, /* edge 5 of hex 6 (F) */ + { true, 6, 2 }, /* edge 0 of hex 7 (Y) */ + { true, 5, 4 }, /* edge 1 of hex 7 (Y) */ + { false, 5, 0 }, /* edge 2 of hex 7 (Y) */ + { false, 4, 3 }, /* edge 3 of hex 7 (Y) */ + { false, 4, 2 }, /* edge 4 of hex 7 (Y) */ + { false, 4, 1 }, /* edge 5 of hex 7 (Y) */ +}; +static const struct MapEdge hexedges_F[] = { + { 0, 2 }, + { 2, 5 }, + { 7, 2 }, + { 9, 4 }, + { 13, 4 }, + { 17, 5 }, +}; +static const struct MapEntry hexin_F[] = { + { true, 4, 2 }, /* subedge 0 of edge 0 */ + { true, 2, 1 }, /* subedge 1 of edge 0 */ + { true, 2, 0 }, /* subedge 0 of edge 1 */ + { true, 0, 5 }, /* subedge 1 of edge 1 */ + { true, 0, 4 }, /* subedge 2 of edge 1 */ + { true, 0, 3 }, /* subedge 3 of edge 1 */ + { true, 1, 5 }, /* subedge 4 of edge 1 */ + { true, 1, 4 }, /* subedge 0 of edge 2 */ + { true, 1, 3 }, /* subedge 1 of edge 2 */ + { true, 1, 2 }, /* subedge 0 of edge 3 */ + { true, 3, 3 }, /* subedge 1 of edge 3 */ + { true, 6, 5 }, /* subedge 2 of edge 3 */ + { true, 6, 4 }, /* subedge 3 of edge 3 */ + { true, 6, 3 }, /* subedge 0 of edge 4 */ + { true, 7, 5 }, /* subedge 1 of edge 4 */ + { true, 7, 4 }, /* subedge 2 of edge 4 */ + { true, 7, 3 }, /* subedge 3 of edge 4 */ + { true, 7, 2 }, /* subedge 0 of edge 5 */ + { true, 5, 3 }, /* subedge 1 of edge 5 */ + { true, 4, 5 }, /* subedge 2 of edge 5 */ + { true, 4, 4 }, /* subedge 3 of edge 5 */ + { true, 4, 3 }, /* subedge 4 of edge 5 */ +}; +static const struct MapEntry hexmap_Y[] = { + { true, 2, 5 }, /* edge 0 of hex 0 (F) */ + { true, 3, 5 }, /* edge 1 of hex 0 (F) */ + { true, 1, 0 }, /* edge 2 of hex 0 (F) */ + { false, 2, 0 }, /* edge 3 of hex 0 (F) */ + { false, 1, 2 }, /* edge 4 of hex 0 (F) */ + { false, 1, 1 }, /* edge 5 of hex 0 (F) */ + { true, 0, 2 }, /* edge 0 of hex 1 (Y) */ + { true, 3, 4 }, /* edge 1 of hex 1 (Y) */ + { false, 3, 0 }, /* edge 2 of hex 1 (Y) */ + { false, 2, 3 }, /* edge 3 of hex 1 (Y) */ + { false, 2, 2 }, /* edge 4 of hex 1 (Y) */ + { false, 2, 1 }, /* edge 5 of hex 1 (Y) */ + { false, 1, 0 }, /* edge 0 of hex 2 (G) */ + { false, 0, 1 }, /* edge 1 of hex 2 (G) */ + { true, 4, 1 }, /* edge 2 of hex 2 (G) */ + { true, 5, 1 }, /* edge 3 of hex 2 (G) */ + { true, 3, 0 }, /* edge 4 of hex 2 (G) */ + { true, 0, 0 }, /* edge 5 of hex 2 (G) */ + { true, 2, 4 }, /* edge 0 of hex 3 (S) */ + { true, 5, 0 }, /* edge 1 of hex 3 (S) */ + { true, 6, 0 }, /* edge 2 of hex 3 (S) */ + { false, 3, 1 }, /* edge 3 of hex 3 (S) */ + { true, 1, 1 }, /* edge 4 of hex 3 (S) */ + { true, 0, 1 }, /* edge 5 of hex 3 (S) */ + { true, 5, 2 }, /* edge 0 of hex 4 (Y) */ + { true, 2, 2 }, /* edge 1 of hex 4 (Y) */ + { false, 0, 0 }, /* edge 2 of hex 4 (Y) */ + { false, 5, 4 }, /* edge 3 of hex 4 (Y) */ + { false, 5, 3 }, /* edge 4 of hex 4 (Y) */ + { false, 5, 2 }, /* edge 5 of hex 4 (Y) */ + { true, 3, 1 }, /* edge 0 of hex 5 (D) */ + { true, 2, 3 }, /* edge 1 of hex 5 (D) */ + { true, 4, 0 }, /* edge 2 of hex 5 (D) */ + { false, 5, 1 }, /* edge 3 of hex 5 (D) */ + { true, 7, 1 }, /* edge 4 of hex 5 (D) */ + { true, 6, 1 }, /* edge 5 of hex 5 (D) */ + { true, 3, 2 }, /* edge 0 of hex 6 (F) */ + { true, 5, 5 }, /* edge 1 of hex 6 (F) */ + { true, 7, 0 }, /* edge 2 of hex 6 (F) */ + { false, 4, 0 }, /* edge 3 of hex 6 (F) */ + { false, 3, 3 }, /* edge 4 of hex 6 (F) */ + { false, 3, 2 }, /* edge 5 of hex 6 (F) */ + { true, 6, 2 }, /* edge 0 of hex 7 (Y) */ + { true, 5, 4 }, /* edge 1 of hex 7 (Y) */ + { false, 5, 0 }, /* edge 2 of hex 7 (Y) */ + { false, 4, 3 }, /* edge 3 of hex 7 (Y) */ + { false, 4, 2 }, /* edge 4 of hex 7 (Y) */ + { false, 4, 1 }, /* edge 5 of hex 7 (Y) */ +}; +static const struct MapEdge hexedges_Y[] = { + { 0, 2 }, + { 2, 3 }, + { 5, 4 }, + { 9, 4 }, + { 13, 4 }, + { 17, 5 }, +}; +static const struct MapEntry hexin_Y[] = { + { true, 4, 2 }, /* subedge 0 of edge 0 */ + { true, 2, 1 }, /* subedge 1 of edge 0 */ + { true, 2, 0 }, /* subedge 0 of edge 1 */ + { true, 0, 5 }, /* subedge 1 of edge 1 */ + { true, 0, 4 }, /* subedge 2 of edge 1 */ + { true, 0, 3 }, /* subedge 0 of edge 2 */ + { true, 1, 5 }, /* subedge 1 of edge 2 */ + { true, 1, 4 }, /* subedge 2 of edge 2 */ + { true, 1, 3 }, /* subedge 3 of edge 2 */ + { true, 1, 2 }, /* subedge 0 of edge 3 */ + { true, 3, 3 }, /* subedge 1 of edge 3 */ + { true, 6, 5 }, /* subedge 2 of edge 3 */ + { true, 6, 4 }, /* subedge 3 of edge 3 */ + { true, 6, 3 }, /* subedge 0 of edge 4 */ + { true, 7, 5 }, /* subedge 1 of edge 4 */ + { true, 7, 4 }, /* subedge 2 of edge 4 */ + { true, 7, 3 }, /* subedge 3 of edge 4 */ + { true, 7, 2 }, /* subedge 0 of edge 5 */ + { true, 5, 3 }, /* subedge 1 of edge 5 */ + { true, 4, 5 }, /* subedge 2 of edge 5 */ + { true, 4, 4 }, /* subedge 3 of edge 5 */ + { true, 4, 3 }, /* subedge 4 of edge 5 */ +}; +static const struct MapEntry specmap_G[] = { + { false, 2, 2 }, /* edge 0 of Spectre 0 */ + { false, 2, 1 }, /* edge 1 of Spectre 0 */ + { false, 2, 0 }, /* edge 2 of Spectre 0 */ + { false, 1, 2 }, /* edge 3 of Spectre 0 */ + { false, 1, 1 }, /* edge 4 of Spectre 0 */ + { false, 1, 0 }, /* edge 5 of Spectre 0 */ + { false, 0, 2 }, /* edge 6 of Spectre 0 */ + { false, 0, 1 }, /* edge 7 of Spectre 0 */ + { false, 0, 0 }, /* edge 8 of Spectre 0 */ + { false, 5, 2 }, /* edge 9 of Spectre 0 */ + { true, 1, 7 }, /* edge 10 of Spectre 0 */ + { true, 1, 6 }, /* edge 11 of Spectre 0 */ + { true, 1, 5 }, /* edge 12 of Spectre 0 */ + { true, 1, 4 }, /* edge 13 of Spectre 0 */ + { false, 4, 1 }, /* edge 0 of Spectre 1 */ + { false, 4, 0 }, /* edge 1 of Spectre 1 */ + { false, 3, 1 }, /* edge 2 of Spectre 1 */ + { false, 3, 0 }, /* edge 3 of Spectre 1 */ + { true, 0, 13 }, /* edge 4 of Spectre 1 */ + { true, 0, 12 }, /* edge 5 of Spectre 1 */ + { true, 0, 11 }, /* edge 6 of Spectre 1 */ + { true, 0, 10 }, /* edge 7 of Spectre 1 */ + { false, 5, 1 }, /* edge 8 of Spectre 1 */ + { false, 5, 0 }, /* edge 9 of Spectre 1 */ + { false, 4, 5 }, /* edge 10 of Spectre 1 */ + { false, 4, 4 }, /* edge 11 of Spectre 1 */ + { false, 4, 3 }, /* edge 12 of Spectre 1 */ + { false, 4, 2 }, /* edge 13 of Spectre 1 */ +}; +static const struct MapEdge specedges_G[] = { + { 0, 3 }, + { 3, 3 }, + { 6, 3 }, + { 9, 2 }, + { 11, 6 }, + { 17, 3 }, +}; +static const struct MapEntry specin_G[] = { + { true, 0, 8 }, /* subedge 0 of edge 0 */ + { true, 0, 7 }, /* subedge 1 of edge 0 */ + { true, 0, 6 }, /* subedge 2 of edge 0 */ + { true, 0, 5 }, /* subedge 0 of edge 1 */ + { true, 0, 4 }, /* subedge 1 of edge 1 */ + { true, 0, 3 }, /* subedge 2 of edge 1 */ + { true, 0, 2 }, /* subedge 0 of edge 2 */ + { true, 0, 1 }, /* subedge 1 of edge 2 */ + { true, 0, 0 }, /* subedge 2 of edge 2 */ + { true, 1, 3 }, /* subedge 0 of edge 3 */ + { true, 1, 2 }, /* subedge 1 of edge 3 */ + { true, 1, 1 }, /* subedge 0 of edge 4 */ + { true, 1, 0 }, /* subedge 1 of edge 4 */ + { true, 1, 13 }, /* subedge 2 of edge 4 */ + { true, 1, 12 }, /* subedge 3 of edge 4 */ + { true, 1, 11 }, /* subedge 4 of edge 4 */ + { true, 1, 10 }, /* subedge 5 of edge 4 */ + { true, 1, 9 }, /* subedge 0 of edge 5 */ + { true, 1, 8 }, /* subedge 1 of edge 5 */ + { true, 0, 9 }, /* subedge 2 of edge 5 */ +}; +static const struct MapEntry specmap_D[] = { + { false, 3, 0 }, /* edge 0 of Spectre 0 */ + { false, 2, 2 }, /* edge 1 of Spectre 0 */ + { false, 2, 1 }, /* edge 2 of Spectre 0 */ + { false, 2, 0 }, /* edge 3 of Spectre 0 */ + { false, 1, 1 }, /* edge 4 of Spectre 0 */ + { false, 1, 0 }, /* edge 5 of Spectre 0 */ + { false, 0, 1 }, /* edge 6 of Spectre 0 */ + { false, 0, 0 }, /* edge 7 of Spectre 0 */ + { false, 5, 1 }, /* edge 8 of Spectre 0 */ + { false, 5, 0 }, /* edge 9 of Spectre 0 */ + { false, 4, 2 }, /* edge 10 of Spectre 0 */ + { false, 4, 1 }, /* edge 11 of Spectre 0 */ + { false, 4, 0 }, /* edge 12 of Spectre 0 */ + { false, 3, 1 }, /* edge 13 of Spectre 0 */ +}; +static const struct MapEdge specedges_D[] = { + { 0, 2 }, + { 2, 2 }, + { 4, 3 }, + { 7, 2 }, + { 9, 3 }, + { 12, 2 }, +}; +static const struct MapEntry specin_D[] = { + { true, 0, 7 }, /* subedge 0 of edge 0 */ + { true, 0, 6 }, /* subedge 1 of edge 0 */ + { true, 0, 5 }, /* subedge 0 of edge 1 */ + { true, 0, 4 }, /* subedge 1 of edge 1 */ + { true, 0, 3 }, /* subedge 0 of edge 2 */ + { true, 0, 2 }, /* subedge 1 of edge 2 */ + { true, 0, 1 }, /* subedge 2 of edge 2 */ + { true, 0, 0 }, /* subedge 0 of edge 3 */ + { true, 0, 13 }, /* subedge 1 of edge 3 */ + { true, 0, 12 }, /* subedge 0 of edge 4 */ + { true, 0, 11 }, /* subedge 1 of edge 4 */ + { true, 0, 10 }, /* subedge 2 of edge 4 */ + { true, 0, 9 }, /* subedge 0 of edge 5 */ + { true, 0, 8 }, /* subedge 1 of edge 5 */ +}; +static const struct MapEntry specmap_J[] = { + { false, 3, 0 }, /* edge 0 of Spectre 0 */ + { false, 2, 2 }, /* edge 1 of Spectre 0 */ + { false, 2, 1 }, /* edge 2 of Spectre 0 */ + { false, 2, 0 }, /* edge 3 of Spectre 0 */ + { false, 1, 1 }, /* edge 4 of Spectre 0 */ + { false, 1, 0 }, /* edge 5 of Spectre 0 */ + { false, 0, 2 }, /* edge 6 of Spectre 0 */ + { false, 0, 1 }, /* edge 7 of Spectre 0 */ + { false, 0, 0 }, /* edge 8 of Spectre 0 */ + { false, 5, 1 }, /* edge 9 of Spectre 0 */ + { false, 5, 0 }, /* edge 10 of Spectre 0 */ + { false, 4, 2 }, /* edge 11 of Spectre 0 */ + { false, 4, 1 }, /* edge 12 of Spectre 0 */ + { false, 4, 0 }, /* edge 13 of Spectre 0 */ +}; +static const struct MapEdge specedges_J[] = { + { 0, 3 }, + { 3, 2 }, + { 5, 3 }, + { 8, 1 }, + { 9, 3 }, + { 12, 2 }, +}; +static const struct MapEntry specin_J[] = { + { true, 0, 8 }, /* subedge 0 of edge 0 */ + { true, 0, 7 }, /* subedge 1 of edge 0 */ + { true, 0, 6 }, /* subedge 2 of edge 0 */ + { true, 0, 5 }, /* subedge 0 of edge 1 */ + { true, 0, 4 }, /* subedge 1 of edge 1 */ + { true, 0, 3 }, /* subedge 0 of edge 2 */ + { true, 0, 2 }, /* subedge 1 of edge 2 */ + { true, 0, 1 }, /* subedge 2 of edge 2 */ + { true, 0, 0 }, /* subedge 0 of edge 3 */ + { true, 0, 13 }, /* subedge 0 of edge 4 */ + { true, 0, 12 }, /* subedge 1 of edge 4 */ + { true, 0, 11 }, /* subedge 2 of edge 4 */ + { true, 0, 10 }, /* subedge 0 of edge 5 */ + { true, 0, 9 }, /* subedge 1 of edge 5 */ +}; +static const struct MapEntry specmap_L[] = { + { false, 3, 0 }, /* edge 0 of Spectre 0 */ + { false, 2, 2 }, /* edge 1 of Spectre 0 */ + { false, 2, 1 }, /* edge 2 of Spectre 0 */ + { false, 2, 0 }, /* edge 3 of Spectre 0 */ + { false, 1, 1 }, /* edge 4 of Spectre 0 */ + { false, 1, 0 }, /* edge 5 of Spectre 0 */ + { false, 0, 2 }, /* edge 6 of Spectre 0 */ + { false, 0, 1 }, /* edge 7 of Spectre 0 */ + { false, 0, 0 }, /* edge 8 of Spectre 0 */ + { false, 5, 0 }, /* edge 9 of Spectre 0 */ + { false, 4, 2 }, /* edge 10 of Spectre 0 */ + { false, 4, 1 }, /* edge 11 of Spectre 0 */ + { false, 4, 0 }, /* edge 12 of Spectre 0 */ + { false, 3, 1 }, /* edge 13 of Spectre 0 */ +}; +static const struct MapEdge specedges_L[] = { + { 0, 3 }, + { 3, 2 }, + { 5, 3 }, + { 8, 2 }, + { 10, 3 }, + { 13, 1 }, +}; +static const struct MapEntry specin_L[] = { + { true, 0, 8 }, /* subedge 0 of edge 0 */ + { true, 0, 7 }, /* subedge 1 of edge 0 */ + { true, 0, 6 }, /* subedge 2 of edge 0 */ + { true, 0, 5 }, /* subedge 0 of edge 1 */ + { true, 0, 4 }, /* subedge 1 of edge 1 */ + { true, 0, 3 }, /* subedge 0 of edge 2 */ + { true, 0, 2 }, /* subedge 1 of edge 2 */ + { true, 0, 1 }, /* subedge 2 of edge 2 */ + { true, 0, 0 }, /* subedge 0 of edge 3 */ + { true, 0, 13 }, /* subedge 1 of edge 3 */ + { true, 0, 12 }, /* subedge 0 of edge 4 */ + { true, 0, 11 }, /* subedge 1 of edge 4 */ + { true, 0, 10 }, /* subedge 2 of edge 4 */ + { true, 0, 9 }, /* subedge 0 of edge 5 */ +}; +static const struct MapEntry specmap_X[] = { + { false, 3, 0 }, /* edge 0 of Spectre 0 */ + { false, 2, 1 }, /* edge 1 of Spectre 0 */ + { false, 2, 0 }, /* edge 2 of Spectre 0 */ + { false, 1, 2 }, /* edge 3 of Spectre 0 */ + { false, 1, 1 }, /* edge 4 of Spectre 0 */ + { false, 1, 0 }, /* edge 5 of Spectre 0 */ + { false, 0, 2 }, /* edge 6 of Spectre 0 */ + { false, 0, 1 }, /* edge 7 of Spectre 0 */ + { false, 0, 0 }, /* edge 8 of Spectre 0 */ + { false, 5, 1 }, /* edge 9 of Spectre 0 */ + { false, 5, 0 }, /* edge 10 of Spectre 0 */ + { false, 4, 2 }, /* edge 11 of Spectre 0 */ + { false, 4, 1 }, /* edge 12 of Spectre 0 */ + { false, 4, 0 }, /* edge 13 of Spectre 0 */ +}; +static const struct MapEdge specedges_X[] = { + { 0, 3 }, + { 3, 3 }, + { 6, 2 }, + { 8, 1 }, + { 9, 3 }, + { 12, 2 }, +}; +static const struct MapEntry specin_X[] = { + { true, 0, 8 }, /* subedge 0 of edge 0 */ + { true, 0, 7 }, /* subedge 1 of edge 0 */ + { true, 0, 6 }, /* subedge 2 of edge 0 */ + { true, 0, 5 }, /* subedge 0 of edge 1 */ + { true, 0, 4 }, /* subedge 1 of edge 1 */ + { true, 0, 3 }, /* subedge 2 of edge 1 */ + { true, 0, 2 }, /* subedge 0 of edge 2 */ + { true, 0, 1 }, /* subedge 1 of edge 2 */ + { true, 0, 0 }, /* subedge 0 of edge 3 */ + { true, 0, 13 }, /* subedge 0 of edge 4 */ + { true, 0, 12 }, /* subedge 1 of edge 4 */ + { true, 0, 11 }, /* subedge 2 of edge 4 */ + { true, 0, 10 }, /* subedge 0 of edge 5 */ + { true, 0, 9 }, /* subedge 1 of edge 5 */ +}; +static const struct MapEntry specmap_P[] = { + { false, 3, 0 }, /* edge 0 of Spectre 0 */ + { false, 2, 1 }, /* edge 1 of Spectre 0 */ + { false, 2, 0 }, /* edge 2 of Spectre 0 */ + { false, 1, 2 }, /* edge 3 of Spectre 0 */ + { false, 1, 1 }, /* edge 4 of Spectre 0 */ + { false, 1, 0 }, /* edge 5 of Spectre 0 */ + { false, 0, 2 }, /* edge 6 of Spectre 0 */ + { false, 0, 1 }, /* edge 7 of Spectre 0 */ + { false, 0, 0 }, /* edge 8 of Spectre 0 */ + { false, 5, 0 }, /* edge 9 of Spectre 0 */ + { false, 4, 2 }, /* edge 10 of Spectre 0 */ + { false, 4, 1 }, /* edge 11 of Spectre 0 */ + { false, 4, 0 }, /* edge 12 of Spectre 0 */ + { false, 3, 1 }, /* edge 13 of Spectre 0 */ +}; +static const struct MapEdge specedges_P[] = { + { 0, 3 }, + { 3, 3 }, + { 6, 2 }, + { 8, 2 }, + { 10, 3 }, + { 13, 1 }, +}; +static const struct MapEntry specin_P[] = { + { true, 0, 8 }, /* subedge 0 of edge 0 */ + { true, 0, 7 }, /* subedge 1 of edge 0 */ + { true, 0, 6 }, /* subedge 2 of edge 0 */ + { true, 0, 5 }, /* subedge 0 of edge 1 */ + { true, 0, 4 }, /* subedge 1 of edge 1 */ + { true, 0, 3 }, /* subedge 2 of edge 1 */ + { true, 0, 2 }, /* subedge 0 of edge 2 */ + { true, 0, 1 }, /* subedge 1 of edge 2 */ + { true, 0, 0 }, /* subedge 0 of edge 3 */ + { true, 0, 13 }, /* subedge 1 of edge 3 */ + { true, 0, 12 }, /* subedge 0 of edge 4 */ + { true, 0, 11 }, /* subedge 1 of edge 4 */ + { true, 0, 10 }, /* subedge 2 of edge 4 */ + { true, 0, 9 }, /* subedge 0 of edge 5 */ +}; +static const struct MapEntry specmap_S[] = { + { false, 3, 0 }, /* edge 0 of Spectre 0 */ + { false, 2, 2 }, /* edge 1 of Spectre 0 */ + { false, 2, 1 }, /* edge 2 of Spectre 0 */ + { false, 2, 0 }, /* edge 3 of Spectre 0 */ + { false, 0, 3 }, /* edge 4 of Spectre 0 */ + { false, 0, 2 }, /* edge 5 of Spectre 0 */ + { false, 0, 1 }, /* edge 6 of Spectre 0 */ + { false, 0, 0 }, /* edge 7 of Spectre 0 */ + { false, 5, 1 }, /* edge 8 of Spectre 0 */ + { false, 5, 0 }, /* edge 9 of Spectre 0 */ + { false, 4, 2 }, /* edge 10 of Spectre 0 */ + { false, 4, 1 }, /* edge 11 of Spectre 0 */ + { false, 4, 0 }, /* edge 12 of Spectre 0 */ + { false, 3, 1 }, /* edge 13 of Spectre 0 */ +}; +static const struct MapEdge specedges_S[] = { + { 0, 6 }, + { 6, 2 }, + { 8, 3 }, + { 11, 2 }, + { 13, 3 }, + { 16, 2 }, +}; +static const struct MapEntry specin_S[] = { + { true, 0, 7 }, /* subedge 0 of edge 0 */ + { true, 0, 6 }, /* subedge 1 of edge 0 */ + { true, 0, 5 }, /* subedge 2 of edge 0 */ + { true, 0, 4 }, /* subedge 3 of edge 0 */ + { false, 1, 1 }, /* subedge 4 of edge 0 */ + { false, 1, 0 }, /* subedge 5 of edge 0 */ + { false, 0, 5 }, /* subedge 0 of edge 1 */ + { false, 0, 4 }, /* subedge 1 of edge 1 */ + { true, 0, 3 }, /* subedge 0 of edge 2 */ + { true, 0, 2 }, /* subedge 1 of edge 2 */ + { true, 0, 1 }, /* subedge 2 of edge 2 */ + { true, 0, 0 }, /* subedge 0 of edge 3 */ + { true, 0, 13 }, /* subedge 1 of edge 3 */ + { true, 0, 12 }, /* subedge 0 of edge 4 */ + { true, 0, 11 }, /* subedge 1 of edge 4 */ + { true, 0, 10 }, /* subedge 2 of edge 4 */ + { true, 0, 9 }, /* subedge 0 of edge 5 */ + { true, 0, 8 }, /* subedge 1 of edge 5 */ +}; +static const struct MapEntry specmap_F[] = { + { false, 3, 0 }, /* edge 0 of Spectre 0 */ + { false, 2, 2 }, /* edge 1 of Spectre 0 */ + { false, 2, 1 }, /* edge 2 of Spectre 0 */ + { false, 2, 0 }, /* edge 3 of Spectre 0 */ + { false, 1, 1 }, /* edge 4 of Spectre 0 */ + { false, 1, 0 }, /* edge 5 of Spectre 0 */ + { false, 0, 2 }, /* edge 6 of Spectre 0 */ + { false, 0, 1 }, /* edge 7 of Spectre 0 */ + { false, 0, 0 }, /* edge 8 of Spectre 0 */ + { false, 5, 1 }, /* edge 9 of Spectre 0 */ + { false, 5, 0 }, /* edge 10 of Spectre 0 */ + { false, 4, 1 }, /* edge 11 of Spectre 0 */ + { false, 4, 0 }, /* edge 12 of Spectre 0 */ + { false, 3, 1 }, /* edge 13 of Spectre 0 */ +}; +static const struct MapEdge specedges_F[] = { + { 0, 3 }, + { 3, 2 }, + { 5, 3 }, + { 8, 2 }, + { 10, 2 }, + { 12, 2 }, +}; +static const struct MapEntry specin_F[] = { + { true, 0, 8 }, /* subedge 0 of edge 0 */ + { true, 0, 7 }, /* subedge 1 of edge 0 */ + { true, 0, 6 }, /* subedge 2 of edge 0 */ + { true, 0, 5 }, /* subedge 0 of edge 1 */ + { true, 0, 4 }, /* subedge 1 of edge 1 */ + { true, 0, 3 }, /* subedge 0 of edge 2 */ + { true, 0, 2 }, /* subedge 1 of edge 2 */ + { true, 0, 1 }, /* subedge 2 of edge 2 */ + { true, 0, 0 }, /* subedge 0 of edge 3 */ + { true, 0, 13 }, /* subedge 1 of edge 3 */ + { true, 0, 12 }, /* subedge 0 of edge 4 */ + { true, 0, 11 }, /* subedge 1 of edge 4 */ + { true, 0, 10 }, /* subedge 0 of edge 5 */ + { true, 0, 9 }, /* subedge 1 of edge 5 */ +}; +static const struct MapEntry specmap_Y[] = { + { false, 3, 0 }, /* edge 0 of Spectre 0 */ + { false, 2, 1 }, /* edge 1 of Spectre 0 */ + { false, 2, 0 }, /* edge 2 of Spectre 0 */ + { false, 1, 2 }, /* edge 3 of Spectre 0 */ + { false, 1, 1 }, /* edge 4 of Spectre 0 */ + { false, 1, 0 }, /* edge 5 of Spectre 0 */ + { false, 0, 2 }, /* edge 6 of Spectre 0 */ + { false, 0, 1 }, /* edge 7 of Spectre 0 */ + { false, 0, 0 }, /* edge 8 of Spectre 0 */ + { false, 5, 1 }, /* edge 9 of Spectre 0 */ + { false, 5, 0 }, /* edge 10 of Spectre 0 */ + { false, 4, 1 }, /* edge 11 of Spectre 0 */ + { false, 4, 0 }, /* edge 12 of Spectre 0 */ + { false, 3, 1 }, /* edge 13 of Spectre 0 */ +}; +static const struct MapEdge specedges_Y[] = { + { 0, 3 }, + { 3, 3 }, + { 6, 2 }, + { 8, 2 }, + { 10, 2 }, + { 12, 2 }, +}; +static const struct MapEntry specin_Y[] = { + { true, 0, 8 }, /* subedge 0 of edge 0 */ + { true, 0, 7 }, /* subedge 1 of edge 0 */ + { true, 0, 6 }, /* subedge 2 of edge 0 */ + { true, 0, 5 }, /* subedge 0 of edge 1 */ + { true, 0, 4 }, /* subedge 1 of edge 1 */ + { true, 0, 3 }, /* subedge 2 of edge 1 */ + { true, 0, 2 }, /* subedge 0 of edge 2 */ + { true, 0, 1 }, /* subedge 1 of edge 2 */ + { true, 0, 0 }, /* subedge 0 of edge 3 */ + { true, 0, 13 }, /* subedge 1 of edge 3 */ + { true, 0, 12 }, /* subedge 0 of edge 4 */ + { true, 0, 11 }, /* subedge 1 of edge 4 */ + { true, 0, 10 }, /* subedge 0 of edge 5 */ + { true, 0, 9 }, /* subedge 1 of edge 5 */ +}; +static const struct Possibility poss_G[] = { + { HEX_G, 2, PROB_G }, + { HEX_D, 2, PROB_D }, + { HEX_J, 2, PROB_J }, + { HEX_L, 2, PROB_L }, + { HEX_X, 2, PROB_X }, + { HEX_P, 2, PROB_P }, + { HEX_S, 2, PROB_S }, + { HEX_F, 2, PROB_F }, + { HEX_Y, 2, PROB_Y }, +}; +static const struct Possibility poss_D[] = { + { HEX_G, 5, PROB_G }, + { HEX_D, 5, PROB_D }, + { HEX_J, 5, PROB_J }, + { HEX_L, 5, PROB_L }, + { HEX_X, 5, PROB_X }, + { HEX_P, 5, PROB_P }, + { HEX_S, 5, PROB_S }, + { HEX_F, 5, PROB_F }, + { HEX_Y, 5, PROB_Y }, +}; +static const struct Possibility poss_J[] = { + { HEX_G, 6, PROB_G }, +}; +static const struct Possibility poss_L[] = { + { HEX_S, 0, PROB_S }, +}; +static const struct Possibility poss_X[] = { + { HEX_G, 1, PROB_G }, + { HEX_D, 4, PROB_D }, + { HEX_D, 7, PROB_D }, + { HEX_L, 7, PROB_L }, + { HEX_P, 7, PROB_P }, + { HEX_S, 4, PROB_S }, + { HEX_S, 7, PROB_S }, +}; +static const struct Possibility poss_P[] = { + { HEX_G, 4, PROB_G }, + { HEX_D, 1, PROB_D }, + { HEX_J, 1, PROB_J }, + { HEX_J, 7, PROB_J }, + { HEX_L, 1, PROB_L }, + { HEX_X, 7, PROB_X }, + { HEX_S, 1, PROB_S }, + { HEX_F, 1, PROB_F }, +}; +static const struct Possibility poss_S[] = { + { HEX_G, 3, PROB_G }, + { HEX_D, 3, PROB_D }, + { HEX_J, 3, PROB_J }, + { HEX_L, 3, PROB_L }, + { HEX_X, 3, PROB_X }, + { HEX_P, 3, PROB_P }, + { HEX_S, 3, PROB_S }, + { HEX_F, 3, PROB_F }, + { HEX_Y, 3, PROB_Y }, +}; +static const struct Possibility poss_F[] = { + { HEX_G, 0, PROB_G }, + { HEX_D, 0, PROB_D }, + { HEX_D, 6, PROB_D }, + { HEX_J, 0, PROB_J }, + { HEX_J, 6, PROB_J }, + { HEX_L, 0, PROB_L }, + { HEX_L, 6, PROB_L }, + { HEX_X, 0, PROB_X }, + { HEX_X, 6, PROB_X }, + { HEX_P, 0, PROB_P }, + { HEX_P, 6, PROB_P }, + { HEX_S, 6, PROB_S }, + { HEX_F, 0, PROB_F }, + { HEX_F, 6, PROB_F }, + { HEX_Y, 0, PROB_Y }, + { HEX_Y, 6, PROB_Y }, +}; +static const struct Possibility poss_Y[] = { + { HEX_J, 4, PROB_J }, + { HEX_L, 4, PROB_L }, + { HEX_X, 1, PROB_X }, + { HEX_X, 4, PROB_X }, + { HEX_P, 1, PROB_P }, + { HEX_P, 4, PROB_P }, + { HEX_F, 4, PROB_F }, + { HEX_F, 7, PROB_F }, + { HEX_Y, 1, PROB_Y }, + { HEX_Y, 4, PROB_Y }, + { HEX_Y, 7, PROB_Y }, +}; +static const struct Possibility poss_spectre[] = { + { HEX_G, 0, PROB_G }, + { HEX_G, 1, PROB_G }, + { HEX_D, 0, PROB_D }, + { HEX_J, 0, PROB_J }, + { HEX_L, 0, PROB_L }, + { HEX_X, 0, PROB_X }, + { HEX_P, 0, PROB_P }, + { HEX_S, 0, PROB_S }, + { HEX_F, 0, PROB_F }, + { HEX_Y, 0, PROB_Y }, +}; |