Create a gist now

Instantly share code, notes, and snippets.

@kazuho /fizzbuzz.cc
Last active Nov 17, 2017

What would you like to do?
compile-time fizzbuzz that emits optimized code
#include <cstdio>
struct String {
char b[1000];
size_t size;
constexpr String() : b(), size() {}
};
constexpr String operator+(String x, char y) {
x.b[x.size] = y;
x.size = x.size + 1;
return x;
}
constexpr String operator+(String x, const char *y) {
while (*y != '\0')
x = x + *y++;
return x;
}
constexpr String operator+(String x, String y) {
return x + y.b;
}
constexpr String numstr(int n) {
String s;
if (n >= 10)
s = numstr(n / 10);
return s + ('0' + n % 10);
}
constexpr String fizzbuzz(int n) {
String s;
for (int i = 1; i < n; ++i) {
if (i % 15 == 0) {
s = s + "FizzBuzz\n";
} else if (i % 3 == 0) {
s = s + "Fizz\n";
} else if (i % 5 == 0) {
s = s + "Buzz\n";
} else {
s = s + numstr(i) + '\n';
}
}
return s;
}
int main() {
constexpr String b = fizzbuzz(100);
fwrite(b.b, 1, b.size, stdout);
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment