Skip to content

Instantly share code, notes, and snippets.

@osvein
Last active October 21, 2017 19:09
Show Gist options
  • Select an option

  • Save osvein/3fb985ef33da444bf4748866ad0fa957 to your computer and use it in GitHub Desktop.

Select an option

Save osvein/3fb985ef33da444bf4748866ad0fa957 to your computer and use it in GitHub Desktop.
#include <stdint.h>
#include <stdio.h>
#include <string.h>
#define FORDICE(n) for (dice[n] = 1; dice[n] <= 6; dice[n]++)
typedef uint_least8_t Score;
typedef uint_fast8_t Die;
Die dice[5];
uint_fast8_t freqtbl[6 + 1];
uint_fast32_t sums[15];
int
main(void)
{
int i;
memset(freqtbl, 0, sizeof(freqtbl));
FORDICE(0)
FORDICE(1)
FORDICE(2)
FORDICE(3)
FORDICE(4) {
int straight = 1, freq1, maxfreq = 0, maxfreq2 = 0;
Die die, maxdie = 1, maxdie2 = 1;
fprintf(stderr, "\033[G%d%d%d%d%d", (int)dice[0], (int)dice[1], (int)dice[2], (int)dice[3], (int)dice[4]);
for (i = 0; i < 5; i++) {
freqtbl[dice[i]]++;
sums[0] += dice[i];
sums[dice[i]] += dice[i];
}
freq1 = freqtbl[1];
for (die = 1; die < 7; die++) {
if (freqtbl[die] >= maxfreq) {
maxfreq2 = freqtbl[maxdie2 = maxdie];
maxfreq = freqtbl[maxdie = die];
} else if (freqtbl[die] >= maxfreq2) {
maxfreq2 = freqtbl[maxdie2 = die];
}
if (!freqtbl[die] && die != 1 && die != 6)
straight = 0;
freqtbl[die] = 0;
}
if (straight) {
if (freq1)
sums[11] += 15;
else
sums[12] += 20;
}
if (maxdie2 >= maxdie && maxfreq2 >= 2)
sums[7] += maxdie2 * 2;
else if (maxfreq >= 2)
sums[7] += maxdie * 2;
if (maxfreq >= 3)
sums[9] += maxdie * 3;
if (maxfreq >= 4)
sums[10] += maxdie * 4;
if (maxfreq >= 5)
sums[14] += 50;
if (maxfreq >= 2 && maxfreq2 >= 2) {
sums[8] += (maxdie + maxdie2) * 2;
if (maxfreq >= 3)
sums[13] += maxdie * 3 + maxdie2 * 2;
}
}
putc('\n', stderr);
for (i = 0; i < 15; i++)
printf("%u\t%Lf\n", sums[i], ((long double)sums[i]) / 7776);
return 0;
}

average = sum / 6^5 = sum / 7776

combination sum average
ones 6480 5/6
twos 12960 10/6
threes 19440 15/6
fours 25920 20/6
fives 32400 25/6
sixes 38880 30/6
one pair 53992 6749/972
two pairs 5104 319/486
three of a kind 17388 61/72
four of a kind 2184 91/324
small straight 1800 25/108
large straight 7200 25/27
full house 3280 205/486
chance 136080 35/2
yatzy 300 25/548
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment