45831e7d2cbadddfbf0995db630f35066226d2bf
12 #define ERRPRINT(fmt, as...) fprintf(stderr, fmt, ## as);
13 #define DPRINT(fmt, as...) if(DEBUG) ERRPRINT(fmt, ## as);
15 typedef enum {OBJECT
, COORD
, HYBRID
} strategy
;
19 strategy strat
= HYBRID
;
24 "\t%s [opts] [FILE [FILE [...]]]\n"
27 "\tAll strategies are mutually exclusive\n"
28 "\t-c coordinate based strategy\n"
29 "\t-o object based strategy\n"
30 "\t-y hybrid strategy\n"
31 // "\t-l LURD lURD verification strategy\n"
32 // "\t-r show all positions that are a valid solution\n"
34 "\t-d enable verbose debug output\n"
35 "\t-h show this help\n"
37 "Positional arguments:\n"
38 "\tFILE zero or more sokoban screens\n"
39 "\t when no file is specified stdin will be used\n", prg
);
42 void solve(FILE *inputstream
)
44 clock_t time_start_read
, time_end_read
;
45 clock_t time_start_encode
, time_end_encode
;
47 time_start_read
= clock();
48 sokoban_screen
*screen
= parse_screen(inputstream
);
49 if (screen
== NULL
) printf("Something went wrong...\n");
50 sokoban_print(screen
);
52 time_end_read
= clock();
53 time_start_encode
= clock();
55 lace_init(0, 1000000);
56 lace_startup(0, NULL
, NULL
);
58 sylvan_init_package(1LL<<21, 1LL<<27, 1LL<<20, 1LL<<26);
61 encode_screen(screen
);
67 DPRINT("Encoding coordinate based\n");
70 DPRINT("Encoding object based\n");
73 DPRINT("Encoding hybrid based\n");
79 time_end_encode
= clock();
83 ERRPRINT("Reading: %fs\n",
84 ((double) (time_end_read
-time_start_read
))/CLOCKS_PER_SEC
);
85 ERRPRINT("Encoding: %fs\n",
86 ((double) (time_end_encode
-time_start_encode
))/CLOCKS_PER_SEC
);
89 int main(int argc
, char **argv
)
93 while((optchar
= getopt(argc
, argv
, "cdhoy")) != -1){
97 DPRINT("Strategy changed to Coordinate based\n");
101 DPRINT("Debug enabled\n");
108 DPRINT("Strategy changed to Object based\n");
112 DPRINT("Strategy changed to Hybrid\n");
116 ERRPRINT("Unknown option `-%c'.\n", optopt
);
118 ERRPRINT("Unknown option char `-\\x%x'.\n", optopt
);
127 ERRPRINT("You have not specified a file, reading from stdin\n");
131 for(int filepathindex
= optind
; filepathindex
< argc
; filepathindex
++){
132 char *currentfilepath
= argv
[filepathindex
];
133 ERRPRINT("Processing: %s\n", currentfilepath
);
134 FILE *currentfile
= fopen(currentfilepath
, "r");
135 DPRINT("Opening file\n");
137 DPRINT("Closing file\n");