From c50425679e9a2ebdf46d1816a8c061d961aed2dc Mon Sep 17 00:00:00 2001 From: Jonathan Chan Date: Fri, 24 Aug 2018 21:23:37 -0700 Subject: [PATCH] Problem 84 - improved random number for dice, but it's still wrong :( --- 84 | Bin 9400 -> 9448 bytes 84.c | 172 ++++++++++++++++++++++++++++------------------------------- 2 files changed, 82 insertions(+), 90 deletions(-) diff --git a/84 b/84 index 868c01a5039bd7efc73c7312c43f40a02bf2ce23..49c2f5f4bfd172c988e2d4c3c184b7a75047e41c 100755 GIT binary patch literal 9448 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 diff --git a/84.c b/84.c index 007b545..846e7a7 100644 --- a/84.c +++ b/84.c @@ -1,91 +1,83 @@ -#include -#include -#include - -const int GO = 0, JAIL = 10, G2J = 30; // GO/JAIL -const int CC1 = 2, CC2 = 17, CC3 = 33; // Community Chest -const int CH1 = 7, CH2 = 22, CH3 = 36; // Chance -const int R1 = 5, R2 = 15, R3 = 25; // Railway -const int U1 = 12, U2 = 28; // Utilities -const int C1 = 11, E3 = 24, H2 = 39; // other - -int freq[40] = {0}; -int doubleRolls = 0; -int position = GO; -int cci = 0; -int chi = 0; - -int chance() { - chi = (chi + 1) % 16; - switch (chi) { - case 1: return GO; - case 2: return JAIL; - case 3: return C1; - case 4: return E3; - case 5: return H2; - case 6: return R1; - case 7: - case 8: - if (position == CH1) return R2; - if (position == CH2) return R3; - return R1; - case 9: - if (position == CH2) return U2; - return U1; - case 10: position -= 3; - default: return position; - } -} - -int communityChest() { - cci = (cci + 1) % 16; - switch (cci) { - case 1: return GO; - case 2: return JAIL; - default: return position; - } -} - -int main(void) { - srand(time(NULL)); - - for (int i = 0; i < 40000000; i++) { - int die1 = (rand() % 6) + 1; - int die2 = (rand() % 6) + 1; - position = (position + die1 + die2) % 40; - if (die1 == die2) { - doubleRolls = (doubleRolls + 1) % 3; - if (doubleRolls == 0) { - position = JAIL; - } - } - if (position == G2J) { - position = JAIL; - } - if (position == CH1 || position == CH2 || position == CH3) { - position = chance(); - } - if (position == CC1 || position == CC2 || position == CC3) { - position = communityChest(); - } - freq[position]++; - } - - float sum = 0; - for (int i = 0; i < 40; i++) { - sum += freq[i]; - } - for (int i = 1; i <= 3; i++) { - int topSquare = 0, topValue = 0; - float topFreq = 0; - for (int j = 0; j < 40; j++) { - if (freq[j] > topValue) { - topSquare = j; - topValue = freq[j]; - topFreq = topValue / sum; - freq[j] = 0; - } - } - printf("#%d: %d @ %f%%\n", i, topSquare, topFreq * 100); - } +#include +#include +#include + +const int rolls = 40000000; +const int GO = 0, JAIL = 10, G2J = 30; // GO/JAIL +const int CC1 = 2, CC2 = 17, CC3 = 33; // Community Chest +const int CH1 = 7, CH2 = 22, CH3 = 36; // Chance +const int R1 = 5, R2 = 15, R3 = 25; // Railway +const int U1 = 12, U2 = 28; // Utilities +const int C1 = 11, E3 = 24, H2 = 39; // other + +int freq[40] = {0}; +int doubleRolls = 0, position = 0; +int cci = 0, chi = 0; + +int chance() { + chi = (chi + 1) % 16; + switch (chi) { + case 1: return GO; + case 2: return JAIL; + case 3: return C1; + case 4: return E3; + case 5: return H2; + case 6: return R1; + case 7: + case 8: + if (position == CH1) return R2; + if (position == CH2) return R3; + return R1; + case 9: + return (position == CH2) ? U2 : U1; + case 10: position -= 3; + default: return position; + } +} + +int communityChest() { + cci = (cci + 1) % 16; + switch (cci) { + case 1: return GO; + case 2: return JAIL; + default: return position; + } +} + +int main(void) { + srand(time(NULL)); + + for (int i = 0; i < rolls; i++) { + int die1 = rand() / ((double) RAND_MAX + 1) * 6 + 1; + int die2 = rand() / ((double) RAND_MAX + 1) * 6 + 1; + position = (position + die1 + die2) % 40; + if (die1 == die2) { + doubleRolls = (doubleRolls + 1) % 3; + if (doubleRolls == 0) { + position = JAIL; + } + } + if (position == G2J) { + position = JAIL; + } + if (position == CH1 || position == CH2 || position == CH3) { + position = chance(); + } + if (position == CC1 || position == CC2 || position == CC3) { + position = communityChest(); + } + freq[position]++; + } + + for (int i = 1; i <= 3; i++) { + int topSquare = 0, topValue = 0; + for (int j = 0; j < 40; j++) { + if (freq[j] > topValue) { + topSquare = j; + topValue = freq[j]; + freq[j] = 0; + } + } + printf("#%d: %d @ %f%%\n", i, topSquare, (float) topValue / rolls * 100); + } } \ No newline at end of file