Problem Fizz Buzz to bardzo podstawowy problem do rozwiązania, z którego korzystają niektórzy, aby wyeliminować rozmówców, którzy nie umieją programować. Problemem jest:
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
Celem tej modyfikacji problemu Fizz Buzz jest wykonanie powyższego algorytmu przy użyciu szablonów C ++, tak że potrzeba jak najmniejszej liczby operacji wykonawczych.
W razie potrzeby możesz zmniejszyć N do mniejszego zakresu, aby zmieścić się w obiektach TMP, jeśli to konieczne.
To nie powinno być „golfem”.
Odpowiedzi:
Oto moja próba (leżał przez jakiś dzień, ponieważ nie byłem pewien, czy będzie to odpowiednie rozwiązanie). Zaskakująco, jedyny fragment, który wprowadziłem z @Chris, zmienił się
template<int N, int m3, int m5>
natemplate<int N, int m3=N%3, int m5=N%5>
Dodatkowo, ponieważ jest to moja pierwsza próba TMP, wszelkie sugestie dotyczące ulepszenia mojego kodu będą mile widziane.
źródło
Całkowicie nie golfowe rozwiązanie:
Przykładowy kod testowy:
źródło
Okej, w końcu udało mi się spróbować. W przeciwieństwie do poprzednich rozwiązań moje rozwiązanie buduje cały ciąg wyjściowy w czasie kompilacji i wywołanie tylko run-time jest pojedynczy wywołanie
cout
„s<<
operatora. Używam,boost::mpl
aby kod był w pewnym stopniu zarządzalny.Niestety, kod będzie wysadzał się z
boost::mpl::string
narzekaniem na zbyt duże ciągi znaków, jeśli używaszn
więcej niż 9.źródło
362 znaków.
źródło
?:
? Myślałem, że można to ocenić podczas kompilacji. Oczywiście mam tutaj podczas runtime gigantyczną konkatenację strun.lokalny b = io.read („* n”) lokalny i = 1 podczas gdy (i <= b) zrobić, jeśli i% 15 == 0 to wydrukować („FizzBuzz”) elseif i% 3 == 0 następnie wydrukować („Fizz „) elseif i% 5 == 0, a następnie wydrukuj („ Buzz ”) inaczej wydrukuj (i) koniec i = i + 1 koniec
źródło
C++
, a twoja odpowiedź to Lua (?). Czy miałeś na myśli zamieścić ogólne pytanie FizzBuzz ?