Masalah Fizz Buzz adalah masalah yang sangat mendasar untuk dipecahkan yang digunakan oleh beberapa orang untuk menyingkirkan orang yang diwawancarai yang tidak tahu cara memprogram. Masalahnya adalah:
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
Objek dari modifikasi masalah Fizz Buzz ini adalah untuk melakukan algoritma di atas menggunakan templat C ++ sehingga beberapa operasi runtime diperlukan sebagaimana dapat dilakukan.
Anda dapat mengurangi N ke kisaran yang lebih kecil jika Anda perlu agar sesuai dengan objek TMP jika diperlukan.
Ini tidak diharapkan menjadi "golf".
Jawaban:
Inilah usaha saya (memilikinya sekitar satu hari atau lebih, karena saya tidak yakin apakah itu cocok sebagai solusi). Anehnya, satu-satunya bit yang saya masukkan dari @Chris berubah
template<int N, int m3, int m5>
menjaditemplate<int N, int m3=N%3, int m5=N%5>
Selain itu, karena ini adalah upaya pertama saya di TMP, setiap saran untuk meningkatkan kode saya akan dihargai.
sumber
Solusi yang benar-benar non-golf:
Kode uji sampel:
sumber
Oke, saya akhirnya sempat mencoba ini. Berbeda dengan solusi sebelumnya solusi saya membangun seluruh string output pada waktu kompilasi dan satu-satunya run-time panggilan adalah panggilan tunggal untuk
cout
's<<
operator. Saya menggunakanboost::mpl
untuk menjaga kode agak mudah dikelola.Sayangnya kode akan meledak dengan
boost::mpl::string
mengeluh tentang string terlalu besar ketika menggunakan yangn
lebih besar dari 9.sumber
362 karakter.
sumber
?:
? Saya pikir itu bisa dievaluasi pada waktu kompilasi. Tentu saja, saya memiliki rangkaian string raksasa yang terjadi saat runtime di sini.local b = io.read ("* n") local i = 1 while (i <= b) lakukan jika i% 15 == 0 lalu cetak ("FizzBuzz") elseif i% 3 == 0 lalu cetak ("Fizz ") elseif i% 5 == 0 lalu cetak (" Buzz ") lain cetak (i) end i = i +1 end
sumber
C++
, dan jawaban Anda ada di Lua (?). Apakah Anda bermaksud memposting ke pertanyaan FizzBuzz generik ?