#include #include const int s[] = { 4, 6, 8, 10, 12, 20 }; main(int argc, char **argv) { int min, max, i, x; int dice = sizeof(s) / sizeof(*s); if (argc != 2) { fprintf(stderr, "usage: %s \n", argv[0]); exit(1); } if (sscanf(argv[1], "%d-%d", &min, &max) != 2) { fprintf(stderr, "error: malformed range: expecting 'x-y'\n"); exit(1); } for (i = 0; i < dice; ++i) if ((max - min) % (s[i] - 1) == 0) { x = (max - min) / (s[i] - 1); printf(min == x ? "%dd%d\n" : "%dd%d%s%d\n", x, s[i], x > min ? "-" : "+", abs(min - x)); } }