From b87a936a617d630d203fddb1eb0dda84752afb4f Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Wed, 14 Sep 2022 21:13:29 +0200 Subject: [PATCH] tes:: football colorability detected/applied --- arbitrile.cpp | 173 +++++++++++++++++++++++++++++++++++++++++++++++- floorshapes.cpp | 2 +- 2 files changed, 171 insertions(+), 4 deletions(-) diff --git a/arbitrile.cpp b/arbitrile.cpp index df788116..8e6fd26b 100644 --- a/arbitrile.cpp +++ b/arbitrile.cpp @@ -77,6 +77,8 @@ struct shape { vector vertex_period; /** list of angles at vertices in the tesfile convention */ vector> vertex_angles; + /** football types */ + int football_type; }; struct slider { @@ -98,8 +100,10 @@ struct intslider { struct arbi_tiling { int order; - /* have_line and have_ph: line and ph flags have been marked for tiles */ - bool have_line, have_ph; + /* line flags have been marked for tiles */ + bool have_line; + /* pseudohept flags have been marked for tiles (1), or the tiling is football-colorable (2), or neither (0) */ + int have_ph; /* is the tree structure given in the tes file */ bool have_tree; /* is the valence data reliable */ @@ -130,6 +134,7 @@ struct arbi_tiling { vector options; int min_valence, max_valence; + bool is_football_colorable; geometryinfo1& get_geometry(); eGeometryClass get_class() { return get_geometry().kind; } @@ -577,6 +582,164 @@ EX void compute_vertex_valence(arb::arbi_tiling& ac) { } } +bool extended_football = true; + +EX void check_football_colorability(arbi_tiling& c) { + for(auto&sh: c.shapes) for(auto v: sh.vertex_valence) + if(v % 3) return; + + for(int i=0; i<3; i++) { + for(auto&sh: c.shapes) sh.football_type = 3; + + vector aqueue; + + c.shapes[0].football_type = i; + aqueue = {0}; + bool bad = false; + for(int qi=0; qi > new_indices(isize(c.shapes), make_array(-1, -1, -1)); + auto oldshapes = c.shapes; + c.shapes.clear(); + for(int i=0; i