Проблема Fizz Buzz - это очень простая проблема, которую используют некоторые, чтобы отсеять респондентов, которые не знают, как программировать. Проблема в:
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
Целью этой модификации проблемы Fizz Buzz является выполнение вышеупомянутого алгоритма с использованием шаблонов C ++, так что требуется как можно меньше операций во время выполнения.
Вы можете уменьшить N до меньшего диапазона, если вам нужно, чтобы вписаться в объекты TMP, где это необходимо.
Это не ожидается "гольф".
Ответы:
Вот моя попытка (она пролежала около дня, потому что я не был уверен, подходит ли она как решение). Удивительно, но единственный фрагмент, который я включил в @Chris, изменился
template<int N, int m3, int m5>
наtemplate<int N, int m3=N%3, int m5=N%5>
Кроме того, так как это моя первая попытка TMP, любые предложения по улучшению моего кода будут оценены.
источник
Абсолютно не решение для гольфа:
Пример тестового кода:
источник
Хорошо, я наконец-то нашел способ сделать это. В отличие от предыдущих решений , мое решение строит всю строку вывода во время компиляции и только время выполнения вызова один вызов
cout
«S<<
оператора. Я использую,boost::mpl
чтобы держать код несколько управляемым.К сожалению, код будет взорван
boost::mpl::string
жалобами на слишком большие строки при использованииn
больше 9.источник
362 персонажа.
источник
?:
? Я думал, что это может быть оценено во время компиляции. Конечно, у меня есть гигантская конкатенация строк, происходящая здесь во время выполнения.local b = io.read ("* n") local i = 1, в то время как (i <= b) делать, если i% 15 == 0, затем печатать ("FizzBuzz"), если i% 3 == 0, то печатать ("Fizz ") иначе если% 5 == 0, то напечатайте (" Buzz "), в противном случае напечатайте (i) конец i = i + 1 конец
источник
C++
, а ваш ответ на Lua (?). Вы хотели опубликовать общий вопрос FizzBuzz ?