3 ms·
With regards FizzBuzz, my follow-up goes a bit like this: Now suppose the modulo test is really expensive. Suppose we're doing something complicated with large
by RiderOfGiraffes 16y ago
With regards FizzBuzz, my follow-up goes a bit like this:
Now suppose the modulo test is really expensive. Suppose we're doing something complicated with large records on disk and we want to do this is that's true, something else if the other is true, etc, etc, just as in FizzBuzz.
How would you restructure your code so it's still obvious to a maintainer what it's doing, but so that it avoids doing more modulo operations than necessary.
You see, all these trivial exercises can be used as starting points for deeper conversations about aspects of coding.
- axod 16y agoOr you could just ask "Do you know what a lookup table is", and "Can you write 15 entries into an array and cycle through them" ;) I agree it's a good starting point, but surely it's still just getting rid of the ridiculously bad programmers rather than anything else.
- jacquesm 16y agoWeird example, but fine, we can reduce the number of modulo operations if that is the one with the 'cost', but that's not very realistic given that we're printing stuff to stdout, but if we take your premise as true and we optimize for the cost of the modulo operator you would get silly solutions like this: main() { int i; int ncounters = 2; int counters[2] ; int presets[2] = { 5, 3}; int n; // number of counters that tripped int j; char * strings[2] = { "fizz", "buzz" }; // first time, copy presets to counters for (j=0;j<ncounters;j++) { counters[j] = presets[j]; } for (i=1;i<=100;i++) { n = 0; // reset number of counters that have zeroed for (j=0;j<ncounters;j++) { counters[j] = counters[j] - 1; // output relevant string when counter trips if (counters[j] == 0) { // separate strings by dashes if more than one counter trips if (n != 0) { printf("-"); } n++; counters[j] = presets[j]; printf("%s",strings[j]); } } // no counter tripped, just output the number if (n == 0) { printf("%d",i); } printf("\n"); } } Forgive the lack of comments and the hardcoded number of strings. No modulo operations. By asking the question that way you'd get solutions that you're not really looking for.
- jonsen 16y agoThe short version int c3 = 1; int c5 = 1; for ( int i = 1; i <= 100; i++, c3++, c5++ ){ if ( c3 == 3 ){ printf( "FIZZ" ); c3 = 0; } if ( c5 == 5 ){ printf( "BUZZ" ); c5 = 0; } if ( c3 && c5 ){ printf( "%d", i ); } }