Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

fizz buzz

Name: Anonymous 2012-05-28 0:33


#include <vector>
#include <string>
#include <sstream>
#include <iostream>

class FizzBuzz
{
private:
    std::vector<std::string> container;
    static const int Mod3=0x01;
    static const int Mod5=0x02;
    int upto;
public:
    template<typename T> static inline std::string Stringify(T&);
    FizzBuzz(int upto)
    {this->upto=upto;}
    void Print();
private:
    inline void Process(unsigned int&, int&);
    std::vector<std::string> * Check();
};

template<typename T>
inline std::string FizzBuzz::Stringify(T& parm)
{
    std::stringstream out;
    out << parm;
    return out.str();
}

inline void FizzBuzz::Process(unsigned int& c, int& i)
{
    if(!(i%3))
        c |= Mod3;
    if(!(i%5))
        c |= Mod5;
}

std::vector<std::string> * FizzBuzz::Check()
{
    unsigned int cond;
    for(int i=0; i<upto; ++i, cond=0x0)
    {
        Process(cond, i);
        switch(cond)
        {
        case (Mod3 ^ Mod5):
            container.push_back("FizzBuzz");
            break;
        case Mod3:
            container.push_back("Fizz");
            break;
        case Mod5:
            container.push_back("Buzz");
            break;
        case (Mod3 & Mod5):
            container.push_back(Stringify(i));
            break;
        }
    }
    return &this->container;
}

void FizzBuzz::Print()
{
    std::vector<std::string> * results=Check(); //execute

    //print results
    for(auto iter=results->begin();
        iter!=results->end(); ++iter)
    {
        std::cout << *iter << std::endl;
    }
}

int main()
{
    FizzBuzz * demo=new FizzBuzz(100);
    demo->Print();
    delete demo;
   
    return EXIT_SUCCESS;
}

Name: Anonymous 2012-05-28 1:17

template <int n, int m3 = n % 3, int m5 = n % 5>
struct FizzBuzz {
    static int value() {return n;}
};

template <int n, int m5>
struct FizzBuzz<n, 0, m5> {
    static char const* value() {return "Fizz";}
};

template <int n, int m3>
struct FizzBuzz<n, m3, 0> {
    static char const* value() {return "Buzz";}
};

template <int n>
struct FizzBuzz<n, 0, 0> {
    static char const* value() {return "FizzBuzz";}
};

Newer Posts
Don't change these.
Name: Email:
Entire Thread Thread List