Le problème Fizz Buzz est un problème très basique à résoudre qui est utilisé par certains pour éliminer les personnes interrogées qui ne savent pas comment programmer. Le problème est:
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
L'objet de cette modification du problème Fizz Buzz est d'exécuter l'algorithme ci-dessus à l'aide de modèles C ++ de manière à ce que le moins d'opérations d'exécution nécessaires soient possibles.
Vous pouvez réduire N à une plage plus petite si vous le souhaitez afin de tenir dans les objets TMP si nécessaire.
Cela ne devrait pas être un "golf".
Réponses:
Voici ma tentative (l'avais traîné pendant un jour ou deux, parce que je ne savais pas si cela convenait comme solution). Étonnamment le seul bit de I incorporé @ Chris changeait
template<int N, int m3, int m5>
àtemplate<int N, int m3=N%3, int m5=N%5>
De plus, comme c'est ma première tentative de TMP, toute suggestion sur l'amélioration de mon code serait appréciée.
la source
Solution totalement non golfée:
Exemple de code de test:
la source
D'accord, j'ai finalement réussi à tenter ma chance. Contrairement aux solutions précédentes, ma solution crée la chaîne de sortie entière au moment de la compilation et le seul appel au moment de l'exécution est un seul appel à
cout
l'<<
opérateur de. J'utiliseboost::mpl
pour garder le code quelque peu gérable.Malheureusement, le code explosera en se
boost::mpl::string
plaignant de chaînes trop grandes lors de l'utilisation den
plus de 9.la source
362 caractères.
la source
?:
? J'ai pensé que cela pourrait être évalué au moment de la compilation. Bien sûr, j'ai une concaténation de chaînes géante qui se produit lors de l'exécution ici.local b = io.read ("* n") local i = 1 tandis que (i <= b) faire si i% 15 == 0 puis imprimer ("FizzBuzz") elseif i% 3 == 0 puis imprimer ("Fizz ") elseif i% 5 == 0 puis print (" Buzz ") else print (i) end i = i + 1 end
la source
C++
, et votre réponse est en Lua (?). Vouliez-vous publier une question générique sur FizzBuzz ?