O problema do Fizz Buzz é um problema muito básico de solução usado por alguns para eliminar os entrevistados que não sabem como programar. O problema é:
Set N = [0,100]
Set F = x in N where x % 3 == 0
Set B = x in N where x % 5 == 0
Set FB = F intersect B
For all N:
if x in F: print fizz
if x in B: print buzz
if x in FB: print fizzbuzz
if x not in F|B|FB print x
O objetivo dessa modificação do problema do Fizz Buzz é executar o algoritmo acima, usando modelos C ++, de modo que o mínimo de operações de tempo de execução seja necessário.
Você pode reduzir N para um intervalo menor, se necessário, para caber nos objetos TMP, quando necessário.
Não se espera que seja um "golfe".
Respostas:
Aqui está minha tentativa (ela ficou por mais ou menos um dia, porque eu não tinha certeza se era adequado como solução). Surpreendentemente, o único pedaço que incorporei do @Chris estava mudando
template<int N, int m3, int m5>
paratemplate<int N, int m3=N%3, int m5=N%5>
Além disso, como esta é minha primeira tentativa no TMP, todas as sugestões para melhorar meu código serão apreciadas.
fonte
Solução totalmente sem golfe:
Código de teste de amostra:
fonte
Ok, finalmente cheguei a dar uma chance a isso. Diferentemente das soluções anteriores, minha solução cria toda a cadeia de saída em tempo de compilação e a única chamada em tempo de execução é uma única chamada para
cout
o<<
operador. Estou usandoboost::mpl
para manter o código um pouco gerenciável.Infelizmente, o código explode com
boost::mpl::string
reclamações sobre cadeias muito grandes quando se usa algon
maior que 9.fonte
362 caracteres.
fonte
?:
? Eu pensei que poderia ser avaliado em tempo de compilação. Claro, eu tenho uma concatenação gigante de cordas acontecendo em tempo de execução aqui.local b = io.read ("* n") local i = 1 enquanto (i <= b) faz se i% 15 == 0 e depois imprime ("FizzBuzz") elseif i% 3 == 0 e imprime ("Fizz ") elseif i% 5 == 0, em seguida, imprima (" Buzz ") else print (i) end i = i + 1 end
fonte
C++
, e sua resposta está em Lua (?). Você queria postar na pergunta genérica do FizzBuzz ?