-
-
Save Hamled/cde899ddc8c9a883c45616b1eb38687c to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#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