bool Permutation::next_permutation(int a, int b, int *p){
	if (b>a) {
		return next_permutation(b, a, p);
	}else {
		bool v = false;
		int max = a<b?b:a;
		int min = a<b?a:b;
		int *i = p+(min-1);
		while (*i<max) {
			(*i)++;
			v=is_valid_permutation(a, b, p);
			if (v) {
				break;
			}
		}
		if (!v && *p!=max) {
			*i=0;
			next_permutation(a, b-1, p);
			if(!is_valid_permutation(a, b, p)) {
				next_permutation(a, b, p);
			}
		}
		return is_valid_permutation(a, b, p);
	}
}
Esempio n. 2
0
File: main.c Progetto: bernied/mutti
/*
h / help              flag        "  display this help and exit"
v / version           flag        "  output version information and exit"
s / size              int         "  size of hands, defaults to 8 (7, 8, 9, 10, J, Q, K, A"
l / left              flag        "  left run"
r / right             flag        "  right run"
u / run               string      "  mutti run"
i / hi                flag        "  ace hi"
o / low               flag        "  ace low (default)"
*/
char*
handle_arguments(int argc, char** argv, struct arg_t* args)
{
  init_default_args(args);
  Cmdline(args, argc, argv);

  if (args->v) {
    printf("mutti version %s\n", VERSION);
  }

  uint32 size1 =0;
  if (args->u == NULL) {
    error("Required parameter: -u/--run <run>");
  }

  if (!(args->i ^ args->o)) {
    error("Excpecting -i/--hi or -o/--low to be set, not both.");
  }

  size1 = is_valid_permutation(args->u);
  if (!size1) {
    error("Given run (-u) is not a comma delimted permutation.");
  }

  if (args->s != 8) {
    error("Invalid size: expected 8!");
  }

  if (args->s != size1) {
    error("Given permutation size and specified permutation are not the same size.");
  }

  return argv[args->optind];
}