chiark / gitweb /
Separate stdout from stderr.
[matchsticks-search.git] / main.c
diff --git a/main.c b/main.c
index 43cfc3e1181379e899034933ada16b37b9ab120a..83728fa7a4aee7cb0168bbdc96d2bd689483669d 100644 (file)
--- a/main.c
+++ b/main.c
@@ -130,7 +130,7 @@ static void optimise(int doprint) {
     prob = 0;
   }
 
-#define PRINTF if (!doprint) ; else printf /* bodgy */
+#define PRINTF(...) if (!doprint) ; else fprintf(stderr, __VA_ARGS__) /* bodgy */
 
   PRINTF("%2d ", maxhamweight);
 
@@ -308,14 +308,14 @@ static void optimise(int doprint) {
   best_adjmatrix = xalloc_adjmatrix();
   memcpy(best_adjmatrix, adjmatrix, sizeof(*adjmatrix)*n);
 
-  printf(" BEST        \n");
+  PRINTF(" BEST        \n");
   return;
 
   }
  out:
   if (prob)
     glp_delete_prob(prob);
-  if (doprint) { printf("        \r"); fflush(stdout); }
+  if (doprint) { PRINTF("        \r"); fflush(stdout); }
 }
 
 static void iterate_recurse(int i, AdjWord min) {
@@ -354,9 +354,32 @@ int main(int argc, char **argv) {
   m = atoi(argv[2]);
   prep();
   iterate();
-  printf("\n");
-  if (best_prob)
-    glp_print_sol(best_prob,"/dev/stdout");
+  fprintf(stderr, "\n");
+  if (best_prob) {
+    double min = glp_get_obj_val(best_prob);
+    double a[n][m];
+    int i, j, cols;
+    for (i = 0; i < n; i++)
+      for (j = 0; j < m; j++)
+        a[i][j] = 0;
+    cols = glp_get_num_cols(best_prob);
+    for (i = 1; i <= cols; i++) {
+      int x, y;
+      if (2 != sscanf(glp_get_col_name(best_prob, i), "mf %d,%d", &x, &y))
+        continue;
+      a[x][y] = min + glp_get_col_prim(best_prob, i);
+    }
+    printf("%d into %d: min fragment %g\n", n, m, min);
+    for (i = 0; i < n; i++) {
+      for (j = 0; j < m; j++) {
+        if (a[i][j])
+          printf(" %9.3f", a[i][j]);
+        else
+          printf("          ");
+      }
+      printf("\n");
+    }
+  }
   if (ferror(stdout) || fclose(stdout)) { perror("stdout"); exit(-1); }
   return 0;
 }