#include <stdio.h>
enum PokerRank {
CARD5, CARD4, CARD3, PAIR2, PAIR1, PAIR0,
STRAIGHT, FULLHOUSE,
MAXPOKERRANK,
};
int CheckRank(int *d){
int p[7] = {0};
int i, j;
int tmp;
for (i = 0; i < 5; i++) {
p[d[i]]++;
}
if (p[1] && p[2] && p[3] && p[4] && p[5]) return STRAIGHT;
if (p[2] && p[3] && p[4] && p[5] && p[6]) return STRAIGHT;
// sort
for (i = 0; i < 6; i++) {
for (j = i + 1; j < 7; j++) {
if (p[i] < p[j]) {
tmp = p[j];
p[j] = p[i];
p[i] = tmp;
}
}
}
if (p[0] == 5) return CARD5; // 5 card
if (p[0] == 4) return CARD4; // 4 card
if ((p[0] == 3) && (p[1] == 2)) return FULLHOUSE; // Full House
if (p[0] == 3) return CARD3; // 3 card
if ((p[0] == 2) && (p[1] == 2)) return PAIR2; // 2 Pair
if (p[0] == 2) return PAIR1; // 1 Pair
return PAIR0; // Buta (No Pair)
}
void DicePoker(void) {
int d[5] = {1, 1, 1, 1, 1};
int r[MAXPOKERRANK] = {0};
int i;
int loop = 1;
int count = 0;
while (loop) {
r[CheckRank(d)]++;
count++;
d[0]++;
for (i = 0; i < 5; i++) {
if (d[i] > 6) {
if (i == 4) {
loop = 0;
break;
}
d[i] = 1;
d[i + 1]++;
}
}
}
printf("5 dice poker rate :\n"); printf("------------------------------------\n");
printf("5 Card = %4d/%d (%.2f%%)\n", r[CARD5], count, (float)r[CARD5]*100/count);
printf("4 Card = %4d/%d (%.2f%%)\n", r[CARD4], count, (float)r[CARD4]*100/count);
printf("Straight = %4d/%d (%.2f%%)\n", r[STRAIGHT], count, (float)r[STRAIGHT]*100/count);
printf("Full House = %4d/%d (%.2f%%)\n", r[FULLHOUSE], count, (float)r[FULLHOUSE]*100/count);
printf("3 Card = %4d/%d (%.2f%%)\n", r[CARD3], count, (float)r[CARD3]*100/count);
printf("2 Pair = %4d/%d (%.2f%%)\n", r[PAIR2], count, (float)r[PAIR2]*100/count);
printf("1 Pair = %4d/%d (%.2f%%)\n", r[PAIR1], count, (float)r[PAIR1]*100/count);
printf("No Pair = %4d/%d (%.2f%%)\n", r[PAIR0], count, (float)r[PAIR0]*100/count);
}
int main(void) {
DicePoker();
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgplbnVtIFBva2VyUmFuayB7CiAgICBDQVJENSwgQ0FSRDQsIENBUkQzLCBQQUlSMiwgUEFJUjEsIFBBSVIwLAogICAgU1RSQUlHSFQsIEZVTExIT1VTRSwKICAgIE1BWFBPS0VSUkFOSywKfTsKCmludCBDaGVja1JhbmsoaW50ICpkKXsKICAgIGludCBwWzddID0gezB9OwogICAgaW50IGksIGo7CiAgICBpbnQgdG1wOwogICAgICAgIAogICAgZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewogICAgICAgIHBbZFtpXV0rKzsKICAgIH0KICAgIAogICAgaWYgKHBbMV0gJiYgcFsyXSAmJiBwWzNdICYmIHBbNF0gJiYgcFs1XSkgcmV0dXJuIFNUUkFJR0hUOwogICAgaWYgKHBbMl0gJiYgcFszXSAmJiBwWzRdICYmIHBbNV0gJiYgcFs2XSkgcmV0dXJuIFNUUkFJR0hUOwogICAgCiAgICAvLyBzb3J0CiAgICBmb3IgKGkgPSAwOyBpIDwgNjsgaSsrKSB7CiAgICAgICAgZm9yIChqID0gaSArIDE7IGogPCA3OyBqKyspIHsKICAgICAgICAgICAgaWYgKHBbaV0gPCBwW2pdKSB7CiAgICAgICAgICAgICAgICB0bXAgPSBwW2pdOwogICAgICAgICAgICAgICAgcFtqXSA9IHBbaV07CiAgICAgICAgICAgICAgICBwW2ldID0gdG1wOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgCiAgICBpZiAocFswXSA9PSA1KSByZXR1cm4gQ0FSRDU7ICAvLyA1IGNhcmQKICAgIGlmIChwWzBdID09IDQpIHJldHVybiBDQVJENDsgIC8vIDQgY2FyZAogICAgaWYgKChwWzBdID09IDMpICYmIChwWzFdID09IDIpKSByZXR1cm4gRlVMTEhPVVNFOyAgLy8gRnVsbCBIb3VzZQogICAgaWYgKHBbMF0gPT0gMykgcmV0dXJuIENBUkQzOyAgLy8gMyBjYXJkCiAgICBpZiAoKHBbMF0gPT0gMikgJiYgKHBbMV0gPT0gMikpIHJldHVybiBQQUlSMjsgIC8vIDIgUGFpcgogICAgaWYgKHBbMF0gPT0gMikgcmV0dXJuIFBBSVIxOyAgLy8gMSBQYWlyCiAgICByZXR1cm4gUEFJUjA7ICAgLy8gQnV0YSAoTm8gUGFpcikgICAgICAgICAKfQoKdm9pZCBEaWNlUG9rZXIodm9pZCkgewogICAgaW50IGRbNV0gPSB7MSwgMSwgMSwgMSwgMX07CiAgICBpbnQgcltNQVhQT0tFUlJBTktdID0gezB9OwogICAgaW50IGk7CiAgICBpbnQgbG9vcCA9IDE7CiAgICBpbnQgY291bnQgPSAwOwoKICAgIHdoaWxlIChsb29wKSB7CgkgICAgcltDaGVja1JhbmsoZCldKys7CgkgICAgY291bnQrKzsKCSAgICAKCSAgICBkWzBdKys7CgkgICAgZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewoJICAgICAgICBpZiAoZFtpXSA+IDYpIHsKCSAgICAgICAgICAgIGlmIChpID09IDQpIHsKCSAgICAgICAgICAgICAgICBsb29wID0gMDsKCSAgICAgICAgICAgICAgICBicmVhazsKCSAgICAgICAgICAgIH0KCSAgICAgICAgICAgIGRbaV0gPSAxOwoJICAgICAgICAgICAgZFtpICsgMV0rKzsKCSAgICAgICAgfQoJICAgIH0KICAgIH0KICAgIAogICAgcHJpbnRmKCI1IGRpY2UgcG9rZXIgcmF0ZSA6XG4iKTsKICAgIHByaW50ZigiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG4iKTsKICAgIAogICAgcHJpbnRmKCI1IENhcmQgICAgID0gJTRkLyVkICglLjJmJSUpXG4iLCAKICAgICAgICAgICAgICAgIHJbQ0FSRDVdLCBjb3VudCwgKGZsb2F0KXJbQ0FSRDVdKjEwMC9jb3VudCk7CiAgICBwcmludGYoIjQgQ2FyZCAgICAgPSAlNGQvJWQgKCUuMmYlJSlcbiIsIAogICAgICAgICAgICAgICAgcltDQVJENF0sIGNvdW50LCAoZmxvYXQpcltDQVJENF0qMTAwL2NvdW50KTsKICAgIHByaW50ZigiU3RyYWlnaHQgICA9ICU0ZC8lZCAoJS4yZiUlKVxuIiwgCiAgICAgICAgICAgICAgICByW1NUUkFJR0hUXSwgY291bnQsIChmbG9hdClyW1NUUkFJR0hUXSoxMDAvY291bnQpOwogICAgcHJpbnRmKCJGdWxsIEhvdXNlID0gJTRkLyVkICglLjJmJSUpXG4iLCAKICAgICAgICAgICAgICAgIHJbRlVMTEhPVVNFXSwgY291bnQsIChmbG9hdClyW0ZVTExIT1VTRV0qMTAwL2NvdW50KTsKICAgIHByaW50ZigiMyBDYXJkICAgICA9ICU0ZC8lZCAoJS4yZiUlKVxuIiwgCiAgICAgICAgICAgICAgICByW0NBUkQzXSwgY291bnQsIChmbG9hdClyW0NBUkQzXSoxMDAvY291bnQpOwogICAgcHJpbnRmKCIyIFBhaXIgICAgID0gJTRkLyVkICglLjJmJSUpXG4iLCAKICAgICAgICAgICAgICAgIHJbUEFJUjJdLCBjb3VudCwgKGZsb2F0KXJbUEFJUjJdKjEwMC9jb3VudCk7CiAgICBwcmludGYoIjEgUGFpciAgICAgPSAlNGQvJWQgKCUuMmYlJSlcbiIsIAogICAgICAgICAgICAgICAgcltQQUlSMV0sIGNvdW50LCAoZmxvYXQpcltQQUlSMV0qMTAwL2NvdW50KTsKICAgIHByaW50ZigiTm8gUGFpciAgICA9ICU0ZC8lZCAoJS4yZiUlKVxuIiwgCiAgICAgICAgICAgICAgICByW1BBSVIwXSwgY291bnQsIChmbG9hdClyW1BBSVIwXSoxMDAvY291bnQpOyAgICAKfQoKaW50IG1haW4odm9pZCkgewogICAgRGljZVBva2VyKCk7CiAgICByZXR1cm4gMDsKfQo=