#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define LIMIT 100ul
typedef struct {
int k;
char *w;
} pair_t;
int main(void)
{
const pair_t dictionary[] = {
{.k = 2, .w = "Fuzz"},
{.k = 3, .w = "Fizz"},
{.k = 5, .w = "Buzz"},
{.k = 7, .w = "Bizz"}
};
for (size_t n=1; n <= LIMIT; ++n)
{
const char *start = "";
char *output = (char *)start;
for (size_t e=0; e < sizeof dictionary / sizeof (pair_t); ++e)
if (n % dictionary[e].k == 0)
{
output
= realloc(output
== start
? NULL
: output
, strlen(output
) + strlen(dictionary
[e
].
w) + 1); sprintf(output
, "%s%s", output
, dictionary
[e
].
w); }
if (output == start)
else
{
output = NULL;
}
}
}
I2luY2x1ZGUgPHN0ZGRlZi5oPgojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPHN0ZGxpYi5oPgojaW5jbHVkZSA8c3RyaW5nLmg+CgojZGVmaW5lIExJTUlUICAgMTAwdWwKCnR5cGVkZWYgc3RydWN0IHsKICAgIGludCAgICAgazsKICAgIGNoYXIgICAgKnc7Cn0gcGFpcl90OwoKaW50IG1haW4odm9pZCkKewogICAgY29uc3QgcGFpcl90IGRpY3Rpb25hcnlbXSA9IHsKICAgICAgICB7LmsgPSAyLCAudyA9ICJGdXp6In0sCiAgICAgICAgey5rID0gMywgLncgPSAiRml6eiJ9LAogICAgICAgIHsuayA9IDUsIC53ID0gIkJ1enoifSwKICAgICAgICB7LmsgPSA3LCAudyA9ICJCaXp6In0KICAgIH07CiAgICAKICAgIGZvciAoc2l6ZV90IG49MTsgbiA8PSBMSU1JVDsgKytuKQogICAgewogICAgICAgIGNvbnN0IGNoYXIgKnN0YXJ0ID0gIiI7CiAgICAgICAgY2hhciAqb3V0cHV0ID0gKGNoYXIgKilzdGFydDsKCiAgICAgICAgZm9yIChzaXplX3QgZT0wOyBlIDwgc2l6ZW9mIGRpY3Rpb25hcnkgLyBzaXplb2YgKHBhaXJfdCk7ICsrZSkKICAgICAgICAgICAgaWYgKG4gJSBkaWN0aW9uYXJ5W2VdLmsgPT0gMCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgb3V0cHV0ID0gcmVhbGxvYyhvdXRwdXQgPT0gc3RhcnQgPyBOVUxMIDogb3V0cHV0LCBzdHJsZW4ob3V0cHV0KSArIHN0cmxlbihkaWN0aW9uYXJ5W2VdLncpICsgMSk7CiAgICAgICAgICAgICAgICBzcHJpbnRmKG91dHB1dCwgIiVzJXMiLCBvdXRwdXQsIGRpY3Rpb25hcnlbZV0udyk7CiAgICAgICAgICAgIH0KCiAgICAgICAgaWYgKG91dHB1dCA9PSBzdGFydCkKICAgICAgICAgICAgcHJpbnRmKCIlenVcbiIsIG4pOwogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIHByaW50ZigiJXNcbiIsIG91dHB1dCk7CiAgICAgICAgICAgIGZyZWUob3V0cHV0KTsKICAgICAgICAgICAgb3V0cHV0ID0gTlVMTDsKICAgICAgICB9CiAgICB9Cn0K