From 18549100f1047c2ea7b82b3594a711fadd5af456 Mon Sep 17 00:00:00 2001 From: Zeno Rogue Date: Thu, 23 Jun 2022 10:29:49 +0200 Subject: [PATCH] tes:: convert:: an option to produce minimal representation --- arbitrile.cpp | 96 +++++++++++++++++++++++++++++++++++++++++++++++++-- config.cpp | 4 +++ rulegen.cpp | 1 + 3 files changed, 98 insertions(+), 3 deletions(-) diff --git a/arbitrile.cpp b/arbitrile.cpp index e6bda10b..f4401226 100644 --- a/arbitrile.cpp +++ b/arbitrile.cpp @@ -1432,8 +1432,10 @@ void be_identified(cellwalker cw1, cellwalker cw2) { } } -EX void convert() { - start_game(); +EX bool reverse_order; +EX bool minimize_on_convert; + +EX void convert_max() { identification.clear(); changes = 0; manual_celllister cl; @@ -1483,7 +1485,82 @@ EX void convert() { } } } + } + +EX void convert_minimize(int N, vector& old_shvids, map& old_to_new) { + vector> address; + vector next; + for(int i=0; i > dists(K); + for(int i=0; i pcorner; + array pdists; + + for(int j=0; j<3; j++) + pcorner[j] = currentmap->get_corner(si.sample, gmod(pi.second+j, si.sample->type)); + + for(int j=0; j<3; j++) + pdists[j] = hdist(pcorner[j], pcorner[(j+1)%3]); + + dists[i] = pdists; + } + + // this is O(K^3) and also possibly could get confused on convex/concave, + // but should be good enough, hopefully + vector> equal(K); + for(int i=0; i old_shvids; map old_to_new; for(auto id: identification) @@ -1492,6 +1569,20 @@ EX void convert() { old_shvids.push_back(id.first); } + int N = isize(old_shvids); + println(hlog, "N = ", N); + if(minimize) { + convert_minimize(N, old_shvids, old_to_new); + minimize = false; + goto reidentify; + } + + if(reverse_order) { + reverse(old_shvids.begin(), old_shvids.end()); + for(int i=0; i editable("apeirogon_hide_grid_edges", 'h'); param_b(arb::apeirogon_simplified_display, "apeirogon_simplified_display", false) -> editable("simplified display of apeirogons", 'f'); + param_b(arb::convert::minimize_on_convert, "tes_minimize_on_convert", false) + -> editable("minimize tessellation on convert", 'm'); + param_b(arb::convert::reverse_order, "tes_reverse_order", false) + -> editable("tes reverse order on convert", 'r'); param_b(display_yasc_codes, "yasc", false) -> editable("YASC codes", 'Y') diff --git a/rulegen.cpp b/rulegen.cpp index 9b41a25e..ed8a764b 100644 --- a/rulegen.cpp +++ b/rulegen.cpp @@ -2476,6 +2476,7 @@ EX void show() { } }); + add_edit(arb::convert::minimize_on_convert); dialog::addBoolItem(XLAT("strict tree based"), currentmap->strict_tree_rules(), 's'); dialog::add_action([] { if(!currentmap->strict_tree_rules()) {