Skip to content

Instantly share code, notes, and snippets.

@Hamled
Forked from ben0x539/fizzbuzz.c
Last active February 12, 2021 10:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save Hamled/cde899ddc8c9a883c45616b1eb38687c to your computer and use it in GitHub Desktop.
Save Hamled/cde899ddc8c9a883c45616b1eb38687c to your computer and use it in GitHub Desktop.
#define MAX_DIGITS 5
#define NUMBER *p-- = itoa(i, buf); buf += MAX_DIGITS+1; --i;
#define FIZZ *p-- = "Fizz"; --i;
#define BUZZ *p-- = "Buzz"; --i;
#define FIZZBUZZ *p-- = "FizzBuzz"; --i;
char* itoa(int value, char* s) {
size_t i = MAX_DIGITS;
s[i--] = '\0';
char* ret = s + i;
#define WRITE_DIGIT(n) \
{ \
int place_val = (value / n) % 10; \
s[i] = place_val + '0'; \
ret = place_val == 0 ? ret : s + i; \
i--; \
}
WRITE_DIGIT(1);
WRITE_DIGIT(10);
WRITE_DIGIT(100);
WRITE_DIGIT(1000);
WRITE_DIGIT(10000);
return ret;
#undef WRITE_DIGIT
}
char mem[1024*128];
char ** fizzBuzz(int n, int* returnSize){
char* buf = mem;
char** v = (void*) buf;
buf += sizeof(char*)*n;
*returnSize = n;
int i = n;
while (i > 0) {
char** p = &v[i-1];
switch (i%15) {
case 14: NUMBER
case 13: NUMBER
case 12: FIZZ
case 11: NUMBER
case 10: BUZZ
case 9: FIZZ
case 8: NUMBER
case 7: NUMBER
case 6: FIZZ
case 5: BUZZ
case 4: NUMBER
case 3: FIZZ
case 2: NUMBER
case 1: NUMBER
case 0:
if (i == 0) break;
FIZZBUZZ
}
}
return v;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment