-void solve(FILE *inputstream){
- clock_t time_start, time_file_read;
- int buffer;
-
- time_start = clock();
- while((buffer = fgetc(inputstream)) != EOF){
- printf("%c", buffer);
- // Alex:
- // Screen reading
- // - Removing outside walls
- // - Bucket fill
- // - [tile]
- // - tile = structure {int, int, enumtile}
+int solve(FILE *inputstream, char *lurd)
+{
+ clock_t time_start_read, time_end_read, time_start_scr, time_end_scr,
+ time_start_goal, time_end_goal, time_start_rel, time_end_rel,
+ time_start_solve, time_end_solve;
+
+ //Read screen
+ time_start_read = clock();
+ sokoban_screen *screen = parse_screen(inputstream, false);
+ if (screen == NULL) {
+ printf("Something went wrong encoding the screen\n");
+ return 2;
+ }
+ time_end_read = clock();
+
+ //Lace and sylvan blork
+ lace_init(0, 1000000);
+ lace_startup(0, NULL, NULL);
+ LACE_ME;
+ sylvan_init_package(1LL<<21, 1LL<<27, 1LL<<20, 1LL<<26);
+ sylvan_init_bdd(6);
+
+ //Encode screen
+ time_start_scr = clock();
+ state *init = encode_screen(screen);
+ time_end_scr = clock();
+
+ //Encode goal
+ time_start_goal = clock();
+ state *goal = encode_goal(screen);
+ time_end_goal = clock();
+
+ //Encode transitions
+ time_start_rel = clock();
+ rels *rls = encode_rel(screen);
+ time_end_rel = clock();
+
+ //Actually solve
+ time_start_solve = clock();
+ BDD old = sylvan_false;
+ BDD new = init->bdd;
+ //Do lurd
+ while(*lurd != '\0'){
+ switch(*lurd){
+ case 'l':
+ new = subsolve(rls->rell, new);
+ break;
+ case 'u':
+ new = subsolve(rls->relu, new);
+ break;
+ case 'r':
+ new = subsolve(rls->relr, new);
+ break;
+ case 'd':
+ new = subsolve(rls->reld, new);
+ break;
+ default:
+ printf("Unknown character in lurd: '%c'\n", *lurd);
+ exit(2);
+ }
+ lurd++;