diff --git a/1990/cmills/README.md b/1990/cmills/README.md index 17de471bf..9b3feb216 100644 --- a/1990/cmills/README.md +++ b/1990/cmills/README.md @@ -18,27 +18,37 @@ We used a patch from [Yusuke Endoh](/winners.html#Yusuke_Endoh) to get this to work in modern systems (it resulted in a bus error otherwise). Thank you Yusuke for your assistance! +[Cody Boone Ferguson](/winners.html#Cody_Boone_Ferguson) made the program safer +by using `fgets()` instead of `gets()`. Thank you Cody for your help in making +this safer! For the original code you can change the instances of: + + + !fgets(l,M,stdin) + +to: + + !gets(l) + ### Try: ./cmills 5000 -NOTE: this program uses `gets()` so you will likely get a warning under modern -systems. +## Judges' comments: -## Judges' comments - Compile notes: - - cc -DM=500 -DN=52 -DX="srand((int)time(0L))" -DV=void -o cmills cmills.c +The Makefile uses several `-D` defines. The following is is a list of the macros +that may be changed: -DM= -DN=<52 * number of decks used> -DX= - -DV= -## Author's comments +The macro `V` should remain `void`. + + +## Author's comments: This is a blackjack program. It does splits, doubling down, insurance, etc. diff --git a/1990/cmills/cmills.c b/1990/cmills/cmills.c index 8a9b25641..d27a29b54 100644 --- a/1990/cmills/cmills.c +++ b/1990/cmills/cmills.c @@ -7,13 +7,13 @@ #define B(n)b(l,n),(V)printf(l V exit();char*g,c[M],d[N],q[N],p[N],*e,*r=d+N,l[M],t[]="??",*k,*m="DEATHISDSev2oinpohae3ttsluuln4a?uibfe 5l\0rtlfrb6 ?a?el:e7$!n\0?e t8%ccp\0.%s9deelc.s T.@?-t.\t1;){if(r-d>N*3/4){B(8));F++r)*r=c[(r-d)%13];F)w= *(g=d+rand()%N),*g= -*r,*r++=w;r=d;}for(;;){B(3),y);if(!gets(l)||(w=atoi(l))<1)exit(0);if(w&1||w>M||w>y)B(1),yM||w>y)B(1),y=w/2&&u(5)&&(y+=(3*(h(0,1[q])==10)-1)*w/2);if(x==-21)goto _;if(v==-21){y+=w/2;goto