El problema de Fizz Buzz es un problema muy básico para resolver que algunos usan para descartar a los entrevistados que no saben programar. El problema es:
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
El objetivo de esta modificación del problema de Fizz Buzz es realizar el algoritmo anterior utilizando plantillas de C ++ de modo que se necesiten tan pocas operaciones de tiempo de ejecución como se pueda hacer.
Puede reducir N a un rango más pequeño si es necesario para que quepa dentro de los objetos TMP cuando sea necesario.
No se espera que sea un "golf".
Respuestas:
Aquí está mi intento (lo tuve por un día más o menos, porque no estaba seguro de si era una solución adecuada). Sorprendentemente, lo único que incorporé de @Chris fue cambiar
template<int N, int m3, int m5>
atemplate<int N, int m3=N%3, int m5=N%5>
Además, dado que este es mi primer intento en TMP, agradecería cualquier sugerencia para mejorar mi código.
fuente
Solución totalmente no golfizada:
Código de prueba de muestra:
fuente
Bien, finalmente pude intentarlo. A diferencia de las soluciones anteriores mi solución se basa toda la cadena de salida en tiempo de compilación y la llamada en tiempo de ejecución es solamente una sola llamada a
cout
's<<
operador. Estoy usandoboost::mpl
para mantener el código algo manejable.Lamentablemente, el código explotará al
boost::mpl::string
quejarse de cadenas demasiado grandes cuando se usan
más de 9.fuente
362 caracteres.
fuente
?:
? Pensé que podría evaluarse en tiempo de compilación. Por supuesto, aquí tengo una concatenación de cuerdas gigantes en tiempo de ejecución.local b = io.read ("* n") local i = 1 mientras que (i <= b) si i% 15 == 0 luego imprime ("FizzBuzz") si i% 3 == 0 luego imprime ("Fizz ") elseif i% 5 == 0 luego print (" Buzz ") más print (i) end i = i + 1 end
fuente
C++
, y su respuesta está en Lua (?). ¿Querías publicar en la pregunta genérica de FizzBuzz ?