some cleanup -> sent to david dumas
This commit is contained in:
@@ -20,57 +20,26 @@ char *alphabetize(int *word, int len, const char *alphabet, char *buffer)
|
||||
return buffer;
|
||||
}
|
||||
|
||||
void print_thickening(int rank, int order, const signed char *thickening, int is_fat, int is_slim, int conflict, const char *alphabet, FILE *f)
|
||||
void print_thickening(int rank, int order, const signed char *thickening, int upto_level, const char *alphabet, FILE *f)
|
||||
{
|
||||
for(int i = 0; i < order; i++) {
|
||||
if(thickening[i] == HEAD_MARKER)
|
||||
fprintf(f, "\e[41mx\e[39m\e[49m");
|
||||
fprintf(f, "\e[41;37mx\e[0m");
|
||||
else if(thickening[i] < - upto_level || thickening[i] > upto_level)
|
||||
fprintf(f, " ");
|
||||
else if(thickening[i] < 0 && thickening[i] > -10)
|
||||
fprintf(f, "\e[47m\e[30m%d\e[39m\e[49m", -thickening[i]);
|
||||
fprintf(f, "\e[47;30m%d\e[0m", -thickening[i]);
|
||||
else if(thickening[i] <= -10)
|
||||
fprintf(f, "\e[47m\e[30m+\e[39m\e[49m");
|
||||
fprintf(f, "\e[47;30m+\e[0m");
|
||||
else if(thickening[i] > 0 && thickening[i] < 10)
|
||||
fprintf(f, "%d", thickening[i]);
|
||||
fprintf(f, "\e[40;37m%d\e[0m", thickening[i]);
|
||||
else if(thickening[i] >= 10)
|
||||
fprintf(f, "+");
|
||||
fprintf(f, "\e[40;37m+\e[0m");
|
||||
else
|
||||
fprintf(f, " ");
|
||||
}
|
||||
|
||||
if(is_fat)
|
||||
fprintf(f, " F");
|
||||
if(is_slim)
|
||||
fprintf(f, " S");
|
||||
if(conflict)
|
||||
fprintf(f, " C");
|
||||
|
||||
fprintf(f, "\e[K\n");
|
||||
}
|
||||
|
||||
void print_balanced_thickening(int rank, int order, const signed char *thickening, const int *left_invariant, const int *right_invariant, const char *alphabet, FILE *f)
|
||||
{
|
||||
for(int i = 0; i < order; i++) {
|
||||
if(thickening[i])
|
||||
fprintf(f, "x");
|
||||
else
|
||||
fprintf(f, "0");
|
||||
}
|
||||
|
||||
fprintf(f, " left: ");
|
||||
for(int j = 0; j < rank; j++)
|
||||
if(left_invariant[j])
|
||||
fprintf(f, "%c", alphabet[j]);
|
||||
else
|
||||
fprintf(f, " ");
|
||||
|
||||
fprintf(f, " right: ");
|
||||
for(int j = 0; j < rank; j++)
|
||||
if(right_invariant[j])
|
||||
fprintf(f, "%c", alphabet[j]);
|
||||
else
|
||||
fprintf(f, " ");
|
||||
|
||||
fprintf(f, "\n");
|
||||
fprintf(f, "\e[K");
|
||||
}
|
||||
|
||||
static int compare_wordlength(const void *a, const void *b, void *gr)
|
||||
@@ -306,7 +275,7 @@ void prepare_graph(semisimple_type_t type, node_t *graph, edgelist_t **edgelists
|
||||
free(seen);
|
||||
}
|
||||
|
||||
void enumerate_balanced_thickenings(semisimple_type_t type, node_t *graph, const char *alphabet, FILE *outfile)
|
||||
long enumerate_balanced_thickenings(semisimple_type_t type, node_t *graph, const char *alphabet, FILE *outfile)
|
||||
{
|
||||
int rank, order;
|
||||
signed char *level;
|
||||
@@ -367,7 +336,7 @@ void enumerate_balanced_thickenings(semisimple_type_t type, node_t *graph, const
|
||||
}
|
||||
}
|
||||
|
||||
// now we have something, check if it is a balanced thickening
|
||||
// now we have something, check if it is a balanced thickening; if so, write to stdout
|
||||
if(is_slim) {
|
||||
is_fat = 1;
|
||||
for(int i = 0; i < order; i++) {
|
||||
@@ -379,13 +348,27 @@ void enumerate_balanced_thickenings(semisimple_type_t type, node_t *graph, const
|
||||
|
||||
if(is_fat) {
|
||||
// ERROR(count >= MAX_THICKENINGS, "Too many balanced thickenings! Increase MAX_THICKENINGS\n");
|
||||
if(printstep && (count+1) % printstep == 0)
|
||||
print_thickening(rank, order, level, 0, 0, 0, alphabet, stderr);
|
||||
fwrite(level, sizeof(signed char), order, outfile);
|
||||
count++;
|
||||
}
|
||||
}
|
||||
|
||||
// if printstep is set accordingly, write state to stderr
|
||||
if(is_slim && is_fat && printstep > 0 && (count + 1) % printstep == 0) {
|
||||
print_thickening(rank, order, level, current_level, alphabet, stderr);
|
||||
fprintf(stderr, "\n");
|
||||
}
|
||||
else if(printstep < 0) {
|
||||
print_thickening(rank, order, level, current_level - !is_slim, alphabet, stderr);
|
||||
fprintf(stderr, " ");
|
||||
if(is_slim) {
|
||||
fprintf(stderr, "S");
|
||||
if(is_fat)
|
||||
fprintf(stderr, "F");
|
||||
}
|
||||
fprintf(stderr, "\n");
|
||||
}
|
||||
|
||||
// now find the next one!
|
||||
|
||||
// try to find empty spot to the left of "head", but only if it is slim, as otherwise there is no point in adding even more
|
||||
@@ -427,8 +410,7 @@ void enumerate_balanced_thickenings(semisimple_type_t type, node_t *graph, const
|
||||
level[i] = 0;
|
||||
}
|
||||
|
||||
fprintf(stderr, "\n");
|
||||
fprintf(stderr, "Found %ld balanced thickenings\n\n", count);
|
||||
|
||||
free(level);
|
||||
|
||||
return count;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user