Das Fizz Buzz-Problem ist ein sehr grundlegendes Problem, das von einigen verwendet wird, um Befragte auszusondern, die nicht programmieren können. Das Problem ist:
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
Das Ziel dieser Modifikation des Fizz Buzz-Problems besteht darin, den obigen Algorithmus unter Verwendung von C ++ - Vorlagen auszuführen, so dass so wenig Laufzeitoperationen wie möglich erforderlich sind.
Sie können N bei Bedarf auf einen kleineren Bereich reduzieren, um bei Bedarf in TMP-Objekte zu passen.
Es wird nicht erwartet, dass dies ein "Golf" ist.
Antworten:
Hier ist mein Versuch (hatte es einen Tag oder so herumliegen, weil ich nicht sicher war, ob es als Lösung geeignet war). Überraschenderweise änderte sich das einzige Bit, das ich von @Chris aufgenommen habe,
template<int N, int m3, int m5>
zutemplate<int N, int m3=N%3, int m5=N%5>
Da dies mein erster Versuch bei TMP ist, wären außerdem Vorschläge zur Verbesserung meines Codes willkommen.
quelle
Völlig nicht Golf Lösung:
Beispieltestcode:
quelle
Okay, ich bin endlich dazu gekommen, einen Versuch zu machen. Im Gegensatz zu den bisherigen Lösungen baut meine Lösung die gesamte Ausgabezeichenfolge bei der Kompilierung und der einzigen Laufzeit Anruf ein einziger Aufruf zu
cout
‚s -<<
Operator. Ich verwendeboost::mpl
, um den Code etwas überschaubar zu halten.Leider wird der Code explodieren,
boost::mpl::string
wenn Sie sich über zu große Zeichenfolgen beschweren, wenn Sien
mehr als 9 verwenden.quelle
362 Zeichen.
quelle
?:
? Ich dachte, das könnte zur Kompilierungszeit ausgewertet werden. Natürlich habe ich hier zur Laufzeit eine riesige String-Verkettung.local b = io.read ("* n") local i = 1 während (i <= b) tun, wenn i% 15 == 0, dann drucken ("FizzBuzz"), sonst wenn i% 3 == 0, dann drucken ("Fizz ") elseif i% 5 == 0 dann print (" Buzz ") else print (i) end i = i + 1 end
quelle
C++
und Ihre Antwort ist in Lua (?). Wollten Sie auf die generische FizzBuzz-Frage posten ?