From 9f101e40d4b9b12f243f464139badc36e091fde8 Mon Sep 17 00:00:00 2001 From: Jonathan Chan Date: Thu, 23 Aug 2018 09:51:57 -0700 Subject: [PATCH] Problem 84 - refactored, still broken --- 84 | Bin 9112 -> 9400 bytes 84.c | 150 +++++++++++++++++++++++++---------------------------------- 2 files changed, 64 insertions(+), 86 deletions(-) mode change 100644 => 100755 84 diff --git a/84 b/84 old mode 100644 new mode 100755 index be06bfe55410c05851d58a1e1ce5d78eb2f9f705..868c01a5039bd7efc73c7312c43f40a02bf2ce23 GIT binary patch literal 9400 zcmeHNe@q+K9e;P=hIC~IQi#$m4JHXItF$D*rbNxypm4%z7=sAVH=q-sf}o z4vf=o(*B#|Cw;%~`}zLzyYIbscf7~D|NQ%%Z9*s|LR?UV5E|&DM~G43g(SrNARovu zPPVk`XY|evYPU9JEBsi*Jaza1!#Jg%KDE`wj<49N6B1)=0>csaNV8$YLuccgzJ>WF z?#0Ex{6wkaLo7u{Q7SGtg2N3X79Z}8ZKw+Km7yTaw@Z4s*bOL?`8LPLd`4d=G8h_y zQ(-=@%y&d4AZFb++Fj!d4n$*{7hIU{w9LnQ#74X&pQGO3h7pX#hr-ckrKT|7%QByP zJBagJVQ#}1j($5F?J>g9-T^ok=9`fD-0=|?=E%>_d2$2=H;lHHQ!RNG42bu^ofm~Y z=LzPpO>{GiXvBz}>+c?j7=!VlPt50DC-X7hZM>iP^TseDUH>Uxg&dz(CLqqw$MLyy zgf6%b1O5F2QR#ly_zuZ@6RrdL{PEbe$g^#()8ofZJf^oDbJv)+pl-lylQJ2{m7i-b zo&$&I;1!|_T^V|J?gI)hFz4=R^v@uW_mcLR8X>CDFYFUy4*jPt9=?8FX%qd!Qt4@!AQ9KV9&Wo4=~$jK^(^`o~O61z25lX#cR7x{^cJhF71a7 zr4*tZSwRoEm^!pNTrcC2Oq|yUkAP_7HI_CkqGHPCZ{znLKNpLK`VTyE0OJUE!wKzk zApYJY>cRSbUg9Z<0gJ6zfno)U6)0BVf2csfXa3Fd?8U3poX$;~*Qak)PiJ?VH^N!LW0~z;|}`nB!zeH`z{K-r}^IPJD|Y6BB0n`<7=HoD!K5)1yJKJlnxd{kEmw z{>F{u;ao1)3hDqo1$q_~1ASl8Tj)OoY1Pfbspn0++x|;EUxSO~dDV7IWEE3iH~p*H zhE`?L|AFRgb_R?D6;#OU?CDW=e)< zhVTM5r_FaWK?o^*oqo@qUl(V(Rc-vBB1EPQhBx_nb!F{V;<{o6Rx|Zf;q5MdL%kW8 zy8khTyIdjGG zzeCr{)HS_82W^zoB;^?euqO-AmH}Qvt!U)N>5WxoKGYFQ;?AVcL?+a{b>yCXkcFZLA|4X z6>7_$HvJ2}U?6SXmo)wJ7=jM=v@?V`8d9Z6X3UaVdfFaRI{OlasIgq!F9yt&E?Knz*Wv<`)Ye0_SW`zo4vKYwYB%+3)JyJXZyN6^Yd@rFQO;$ z?^HI*m>0;c;JcL3cH0nKh1(xO9E}glzD@QgWbgVF`(g!(6)0AqSb<^%iWMkUpjd%o z1&S3YR-jmcVg-s7`2VRu<=%=@9BpMY57X?!aHAXNxj4N3+K@SS;7t{6z#W(xA!clQmX&0|3 zkG32;E?!q!#c!2Pkx&ETWmRt!Z>qiq@q4v*DD*9HL+u$D?v8{y2O^P}m{A7@V&Qlg zN2h;Mx$7ZH`oyS$!_?tuIDW3RFND+bpD4kwcuy5-S2P$Bmz1!0Uo8<6RoDu_XD;RTzm0ZWt3k7LNn^994kyE`goaJk7v(+;H$92_B<7wHaYSOC zQ4$YI%q?2txWwGjB0eiI&vuEwC-HuXFH6krL)v>J{({6`m$+Wys}g@n;%6l0mMh~g zNc>faMgVH`P?ZeW} zO*#6HO8cy|Uy|58r@t)yd5%o~pGtdL`u`jldYbGu0iKWFD8O$O;2Q;)_lH}W+%J3p zgz3iCT&VX7qqQF7um(zvU_R=w#J~Wt;EZ-G1*5$~7}VN}(&&U!Cr~HM0muQ!AG4s1 uAQqbu?6cPzdV;OX(a2xGhP|i_`w?JltY!BZ<2+sDbH#b0-1T7Mh5j3dz4O=r literal 9112 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 diff --git a/84.c b/84.c index 1d1eeed..007b545 100644 --- a/84.c +++ b/84.c @@ -1,113 +1,91 @@ #include #include #include -#include -#define GO 0 -#define JAIL 10 -#define G2J 30 +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 -#define CC1 2 -#define CC2 17 -#define CC3 33 - -#define CH1 7 -#define CH2 22 -#define CH3 36 - -#define C1 11 -#define E3 24 -#define H2 39 - -#define R1 5 -#define R2 15 -#define R3 25 - -#define U1 12 -#define U2 28 - -int CC[2] = {GO, JAIL}; -int CH[6] = {GO, JAIL, C1, E3, H2, R1}; - -unsigned long long freq[40] = {0}; +int freq[40] = {0}; int doubleRolls = 0; int position = GO; -int communityChestIndex = 0; -int chanceIndex = 0; +int cci = 0; +int chi = 0; -void moveToSquare(int square) { - position = square; - freq[square]++; -} - -void communityChest() { - communityChestIndex = ++communityChestIndex % 16; - if (communityChestIndex == 1 || communityChestIndex == 2) { - moveToSquare(CC[communityChestIndex - 1]); - } else { - moveToSquare(position); +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; } } -void chance() { - chanceIndex = ++chanceIndex % 16; - if (chanceIndex >= 1 && chanceIndex <= 6) { - moveToSquare(CC[chanceIndex - 1]); - } else if (chanceIndex == 7 || chanceIndex == 8) { - if (position == CH1) { - moveToSquare(R2); - } else if (position == CH2) { - moveToSquare(R3); - } else { - moveToSquare(R1); - } - } else if (chanceIndex == 9) { - if (position == CH2) { - moveToSquare(U2); - } else { - moveToSquare(U1); - } - } else if (chanceIndex == 10) { - position -= 3; - if (position == CH3) { - communityChest(); - } else { - moveToSquare(position); - } - } else { - moveToSquare(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 (unsigned long long i = 0; i < 20000000; i++) { - int die1 = (rand() % 4) + 1; - int die2 = (rand() % 4) + 1; - int dice = die1 + die2; - + 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 % 3; + doubleRolls = (doubleRolls + 1) % 3; if (doubleRolls == 0) { - moveToSquare(JAIL); - continue; + position = JAIL; } } - - position = (position + dice) % 40; if (position == G2J) { - moveToSquare(JAIL); - } else if (position == CC1 || position == CC2 || position == CC3) { - communityChest(); - } else if (position == CH1 || position == CH2 || position == CH3) { - chance(); - } else { - moveToSquare(position); + 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++) { - printf("%02d: %llu\n", i, freq[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); } } \ No newline at end of file