#include #include #include #include #include "shuffle.h" static int rndrange(int max_excluding) { assert(max_excluding > 0 && max_excluding < RAND_MAX); return rand() % max_excluding; } int main() { Shuffle s; char c[64], *p, *argv[4]; int argc, i; int first, total, index, count; printf("> init TOTAL [FIRST]\n"); printf("> resize TOTAL\n"); printf("> get [INDEX] [COUNT]\n"); total = 0; for(;;){ c[sizeof(c)-1] = 0; printf("> "); if(fgets(c, sizeof(c), stdin) == NULL) break; if(c[sizeof(c)-1] != 0 || c[0] < 'a' || c[0] > 'z') continue; c[strlen(c)-1] = 0; argv[0] = p = c; for(argc = 1; argc < 4; argv[argc++] = p){ if((p = strchr(p, ' ')) == NULL) break; for(*p++ = 0; *p == ' '; p++); } if(strcmp(argv[0], "init") == 0 && argc >= 2 && argc <= 3){ if((total = atoi(argv[1])) < 1 || total >= RAND_MAX) printf("total is out of range [%d, %d]\n", 1, RAND_MAX-1); else{ first = argc > 2 ? atoi(argv[2]) : rndrange(total); shuffle_init(&s, rndrange, total, first); } }else if(strcmp(argv[0], "resize") == 0 && argc == 2){ total = atoi(argv[1]); shuffle_resize(&s, total); }else if(strcmp(argv[0], "get") == 0 && argc >= 1 && argc <= 3){ index = argc > 1 ? atoi(argv[1]) : 0; count = argc == 2 ? 1 : (argc == 3 ? atoi(argv[2]) : total); for(i = index; i < index+count; i++) printf("%d ", shuffle_one(&s, i)); printf("\n"); }else{ printf("?\n"); } } return 0; }