10 generate (int x
, int y
, const char *prefix
, FILE *f
)
12 unsigned char sum
[16];
13 md5_buffer(prefix
, strlen (prefix
), sum
);
14 if ((sum
[0] >> 4) > 10 && y
< 3)
15 fprintf (f
, "%d%d%sU\n", x
, y
+ 1, prefix
);
16 if ((sum
[0] & 15) > 10 && y
)
17 fprintf (f
, "%d%d%sD\n", x
, y
- 1, prefix
);
18 if ((sum
[1] >> 4) > 10 && x
)
19 fprintf (f
, "%d%d%sL\n", x
- 1, y
, prefix
);
20 if ((sum
[1] & 15) > 10 && x
< 3)
21 fprintf (f
, "%d%d%sR\n", x
+ 1, y
, prefix
);
25 main (int argc
, char **argv
)
27 char *salt
= "edjrjqaa";
31 char *str1
, *str2
= NULL
;
32 size_t size1
, size2
= 0;
33 size1
= asprintf (&str1
, "03%s\n", salt
);
39 printf (" starting generation %d\n", gen
);
43 printf ("no longer path possible\n");
46 f
= open_memstream (&str2
, &size2
);
50 char *q
= strchr (p
, '\n');
53 printf (" visiting %d %d %s\n", x
, y
, p
);
56 static bool print
= true;
58 printf ("shortest solution: %s\n", p
);
62 generate (x
, y
, p
, f
);
64 } while (p
< str1
+ size1
);
66 printf (" generation %d visited %d paths\n", gen
, seen
);
74 printf ("completed after %d steps, longest at %d\n", gen
, max
);