-module(fizzbuzz).
-export([start/1]).
start(N) -> fizzbuzz(N, []).
fizzbuzz([], Acc) -> lists:reverse(Acc);
fizzbuzz(N, Acc) ->[H|T]= N, fizzbuzz(T, [modfb(H)|Acc]).
modfb(0) -> 0;
modfb(X) -> mod1(X, X).
mod1(X, Y) when (X > -15) and ( X /= 0) and (X < 15) -> modb(Y);
mod1(0, _) -> fizzbuzz;
mod1(X, _) -> mod1(X rem 15, X).
modb(X) -> mod2(X, X).
mod2(X, Y) when (X > -5) and (X /= 0) and (X < 5) -> modf(Y);
mod2(0, _) -> buzz;
mod2(X, _) -> mod2(X rem 5, X).
modf(X) -> mod3(X, X).
mod3(X, Y) when (X > -3) and (X/= 0) and (X < 3) -> Y;
mod3(0, _) -> fizz;
mod3(X, _) -> mod3(X rem 3, X).