chiark / gitweb /
0c694c8f122aa653a07e64774649068145cc7be8
[matchsticks-search.git] / main.c
1
2 typedef uint32_t AdjWord;
3 #define PRADJ PRIx32
4
5 static int n, m;
6 static AdjWord adjmatrix[n];
7 static AdjWord adjall;
8
9 static double best;
10 static AdjWord adjmatrix_best[n];
11
12 static void prep(void) {
13   adjall = ~((~(AdjWord)0) << m);
14 }
15
16 static int count_set_adj_bits(AdjWord w) {
17   for (int j=0, total=0; j<m; j++)
18     total += !!(w & ((AdjWord)1 << j));
19   return total;
20 }
21
22 static void optimise(void) {
23   for (i=0; i<n; i++) {
24     printf("%"PRADJ" ", adjmatrix[i]);
25     double maxminsize = (double)m / count_set_adj_bits(adjmatrix[i]);
26     if (maxminsize < best) {
27       printf(" too fine\n");
28       return;
29     }
30   }
31
32   printf("nyi\n");
33 }
34
35 static void iterate_recurse(int i, AdjWord min) {
36   if (i > n) {
37     optimise();
38     return;
39   }
40   for (adjmatrix[i] = min;
41        ;
42        adjmatrix[i]++) {
43     iterate_recurse(i+1, adjmatrix[i]);
44   }
45 }
46
47 static void iterate(void) {
48   iterate_recurse(0, 1);
49 }
50
51 int main(int argc, char **argv) {
52   n = atoi(argv[1]);
53   m = atoi(argv[2]);
54   prep();
55   iterate();
56   if (ferror(stdout) || fclose(stdout)) { perror("stdout"); exit(-1); }
57   return 0;
58 }