Path: csiph.com!xmission!news.alt.net!not-for-mail From: owl Newsgroups: comp.os.linux.advocacy,sci.physics Subject: Re: I'm _still_ the best c coder here. Date: Sat, 5 Aug 2017 06:12:04 +0000 (UTC) Organization: O.W.L. Lines: 60 Message-ID: References: NNTP-Posting-Host: boom.rooftop.invalid X-Face: $BHf)vM$6p_?9L`jmOQ54JeNyL+%MZGGRfH8&grb[Y%-jU`MCPAQN=/SVDa{(/67bP(YB}rjV^h>cUh User-Agent: tin/2.2.1-20140504 ("Tober an Righ") (UNIX) (Linux/3.16.0-4-amd64 (x86_64)) Xref: csiph.com comp.os.linux.advocacy:425878 sci.physics:644481 In comp.os.linux.advocacy Jeff-Relf.Me wrote: > You ( Owl ) replied ( to me ): > > > Marek Novotny's c was better than Owl's or Fabian's, > > > but it wasn't as concise|readable as mine, I think. > > > Initially, he chose bash, not c. > > > > My code is far more "maintainable" than yours. > > No one would agree with you, no one. > not compared to my: http://Jeff-Relf.Me/FizBuz.HTM > > > It's trivial to expand [ my FiZBuz ] to use three or four values > > with no change in complexity for the decision logic, > > and using an array of function pointers > > instead of simply pointing printf() to an > > array of strings opens all kinds of possibilities. > > Your shit was 28 lines, and very convolulted/confusing. LOL! It's not confusing. It does exactly what you are doing below, only points into an array of function pointers instead of an array of char pointers. > Mine is 2 lines, 2^2 states, and easily modified to 2^3 states, > via: 4*!(x%3) + 2*!(x%5) + !(x%7). > > int x = 0 ; char *Say[4] = { "%d\n", "Buz\n", "Fiz\n", "FizBuz\n" }; > while ( x++ < 100 ) printf( Say[ 2*!(x%3) + !(x%5) ], x ); > And it hard-codes values, is limited to printf, and takes up as much space as mine when you expand the array to 2^4, not to mention that all your decision logic is entangled with the result function. Mine is clean: void (*f[])(int)={zero,one,two,onetwo, four,onefour,twofour,onetwofour, eight,oneeight,twoeight,onetwoeight, foureight,onefoureight,twofoureight,onetwofoureight}; int i=0,v=0; for(i=1;i<=MAX;i++) { if(i%ONE==0){v+=1;} if(i%TWO==0){v+=2;} if(i%FOUR==0){v+=4;} if(i%EIGHT==0){v+=8;} f[v](i); /* call the appropriate function */ v=0; } Flexible, easy to maintain, decision logic not entangled with a single function so custom-tailored functions can be created to handle different cases; can easily be modified to set values by parsing argv. Think things through, man. Look to the future. Sometimes trying to be as concise as possible can tie your hands and force you to end up doing a complete rewrite when you need added functionality.