The "Fizz-Buzz test" is an interview question designed to help filter out the 99.5% of programming job candidates who can't seem to program their way out of a wet paper bag. The text of the programming assignment is as follows: : ''"Write a program that prints the numbers from 1 to 100. But for multiples of three print “Fizz” instead of the number and for the multiples of five print “Buzz”. For numbers which are multiples of both three and five print “F''''''izzBuzz”."'' Source: "Using FizzBuzz to Find Developers who Grok Coding" http://tickletux.wordpress.com/2007/01/24/using-fizzbuzz-to-find-developers-who-grok-coding/ ''It would be more interesting if the numbers were -50 to +50. -- mt <+*i + 67 Articles: * "Why Can't Programmers.. Program?" -- http://www.codinghorror.com/blog/archives/000781.html * http://peripateticaxiom.blogspot.co.uk/2007/02/fizzbuzz.html * http://imranontech.com/2007/01/24/using-fizzbuzz-to-find-developers-who-grok-coding/ * FizzBuzzInManyProgrammingLanguages * Video: How to write FizzBuzz in Ruby, with Test-Driven Development - http://youtu.be/CHTep2zQVAc I never got the fizz buzz test, but out of the blue lately I've been asked such stupid questions I was amazed I was even asked. Tell me about HTML. My favorite. How do you write a for loop. WTH? - (circa 2014) ---- '''Why Fizz-Buzz is "hard:"''' We can't understand why so many people "fail" the Fizz-Buzz test unless we understand why it is "hard" (for them). Understanding that, we may be able to evaluate the usefulness of this tool, and others, as filtering tools for candidates. I think Fizz-Buzz is "hard" for some programmers because (#1) it doesn't fit into any of the patterns that were given to them in school assignments, and (#2) it isn't possible to directly and simply represent the necessary tests, without duplication, in just about any commonly-used modern programming language. On #1, that it doesn't match the patterns they memorized from lectures and class assignments: I think this makes it a good discriminator, because I wish to hire candidates who can think for themselves -- not those who are limited to copying solutions from others. On #2, that it's hard to directly code it: Fizz-Buzz does '''not''' fall into the common pattern of if 1 then A else if 2 then B else if 3 then C else/otherwise D (Well it does, but not when you consider "1,2 & 3" to be atomic tests, like "is divisible by 3.") Consider... if (theNumber is divisible by 3) then print "Fizz" else if (theNumber is divisible by 5) then print "Buzz" else /* theNumber is not divisible by 3 or 5 */ print theNumber end if Now where do you put "FizzBuzz" in this structure? Like this...? if (theNumber is divisible by 3) then ---> if (theNumber is divisible by 5) then print "Fizz''''Buzz" else <--- print "Fizz" else if (theNumber is divisible by 5) then print "Buzz" else /* theNumber is not divisible by 3 or 5 */ print theNumber end if [ick!!!] (The structure of the if statements is icky, and there are two tests for the same condition -- (theNumber is divisible by 5).) PJB: I think this comment is the crux of the problem. Decision trees (embedded tests) don't have anything icky about them, and while the same condition may have to be repeated, it is performed in different branches, and therefore it is executed only once. Why newbie programmers still have this urge to write clever code instead of writing code that do clearly the job? Doing a "3 and 5" test makes the code more readable -- with more duplication: if (theNumber is divisible by 3) and (theNumber is divisible by 5) then print "Fizz''''Buzz" else if (theNumber is divisible by 3) then print "Fizz" else if (theNumber is divisible by 5) then print "Buzz" else /* theNumber is not divisible by 3 or 5 */ print theNumber end if Maybe there's no simple and satisfying solution to the code structuring issue. (...except in COBOL-85, which would be ironic. ;-) -- JeffGrigg PJB: there is a simple and satisfying solution to the code structuring issue, but it involves a lisp macro. I'm rather late to this page but I made a new Java solution that is way smaller than the one below: public class fizzbuzz { public static void main(String[] args){ for(int i = 1; i <= 100; i++){ String test = ""; test += (i % 3) == 0 ? "fizz" : ""; test += (i % 5) == 0 ? "buzz" : ""; System.out.println(!test.isEmpty() ? test : i); } } } --Alex North Update: I made it even smaller but now it has some minor repetition: public class fizzbuzz { public static void main(String[] args) { for(int i = 0; i < 100; i++, System.out.println(i % 3 == 0 || i % 5 == 0 ? ((i % 3) == 0 ? "fizz" : "") + ((i % 5) == 0 ? "buzz" : "") : i)); } } --Alex North Here is a simple Java solution: public class Test { public static void main(String[] args) { String buzz = "buzz", fizz = "fizz"; //initialise the string variables for (int i = 1; i <= 100; i++) { if (i % 15 == 0) //check if number in position i is divisable by 15, if so don't check other 2 conditions - we don't want a double print { System.out.println(buzz + fizz + " " + i)); } else if (i % 3 == 0 ) { System.out.println(buzz + " " + i); } else if (i % 5== 0) { System.out.println(fizz + " "+ i); } } } } * 'Another simple Java Solution' * boolean flag = true; for(int i=0;i<16;i++){ if(i%3==0){ System.out.print("Fizz"); flag=false; } if(i%5==0){ System.out.print("Buzz"); flag=false; } if (flag) System.out.print(i); System.out.print(","); flag = true; } * ''What feature of COBOL-85 supports this?'' ''There's a very satisfactory solution to the code structuring issue, as demonstrated by the following VBA:'' Public Sub fizzbuzz() For n = 1 To 100 Select Case 0 Case n Mod 15 f = "FizzBuzz" Case n Mod 3 f = "Fizz" Case n Mod 5 f = "Buzz" Case Else f = n End Select Debug.Print f Next n End Sub -- MarcThibault ---- ---- This (deliberately) inelegant looking php code will do the job without any modulus or if...then (other than what's implicit in a for loop) calls. The focus is on the algorithm, so it's language agnostic (hence the avoidance of simpler and more elegant php constructs - might as well have written it in pseudo-code). I am putting it out here since I haven't seen any example that avoids both if and modulus. --- Syed Hasan ---- Yes, the observation that a number divisible by 3 and 5 is also divisible by 3 * 5 is the key to a neat FizzBuzz solution. - twf ''When I see a solution with x % 15, I am inclined to declare it to be obfuscated duplication, and refactor it back into !(x % 3) && !(x % 5) so that the duplication is more obvious (and the program reads closer to the spec.)'' ''I'm also inclined to ReplaceTempWithQuery every time I see code that creates a temp var referred to twice (inventing a name and saying it three times!) rather than saying (x % 5) twice.'' ----- In response to MarcThibault question: What feature of COBOL-85 supports this? It is probably the EVALUATE statement. The modulus operator used in several solutions given here may not be the first thing that comes to the mind of a COBOL programmer (possibly a case of having ones problem solving techniques framed by the language used). A COBOL programmer may come to the conclusion that counters are all that is required. When a counter gets to the desired number then you have reached a multiple of that number. Do whatever you have to do and reset the counter. Here is a COBOL solution to FIZZBUZZ using counters... IDENTIFICATION DIVISION. PROGRAM-ID. FIZZBUZZ. DATA DIVISION. WORKING-STORAGE SECTION. 01 FIZZ-CNT PIC S9(4) BINARY. 01 BUZZ-CNT PIC S9(4) BINARY. 01 I PIC S9(4) BINARY. PROCEDURE DIVISION. MOVE ZERO TO FIZZ-CNT MOVE ZERO TO BUZZ-CNT PERFORM VARYING I FROM 1 BY 1 UNTIL I > 100 COMPUTE FIZZ-CNT = FIZZ-CNT + 1 COMPUTE BUZZ-CNT = BUZZ-CNT + 1 EVALUATE TRUE WHEN FIZZ-CNT = 3 AND BUZZ-CNT = 5 DISPLAY 'FIZZBUZZ' MOVE ZERO TO FIZZ-CNT MOVE ZERO TO BUZZ-CNT WHEN FIZZ-CNT = 3 DISPLAY 'FIZZ' MOVE ZERO TO FIZZ-CNT WHEN BUZZ-CNT = 5 DISPLAY 'BUZZ' MOVE ZERO TO BUZZ-CNT WHEN OTHER DISPLAY I END-EVALUATE END-PERFORM GOBACK . The REMAINDER from a DIVIDE statement could also have been used as in: DIVIDE I BY 3 GIVING I-DONT-CARE REMAINDER FIZZ-CNT IF FIZZ-CNT = ZERO DISPLAY 'FIZZ' END-IF The above is the type of coding that gives COBOL a reputation for being very long winded. It doesn't have to be that way ;-) ---- ForthLanguage can do it easily. : fizz ( n -- ? ) 3 MOD IF FALSE EXIT THEN TRUE ." Fizz" ; : buzz ( n -- ? ) 5 MOD IF FALSE EXIT THEN TRUE ." Buzz" ; : bazz ( n ? -- ) IF DROP EXIT THEN . ; : fizzBuzz ( n -- ) CR DUP fizz OVER buzz OR bazz ; : fizzBuzzes ( n -- ) 1+ 1 DO I fizzBuzz LOOP ; \ Tests fizzBuzz 100 fizzBuzzes You don't need a special case to print FizzBuzz. A number that divides by both three and five should already cause both Fizz and Buzz to print one after the other. Just don't use else. -- Michael Morris An alternative Forth solution which lets you define fizzbuzz-style at a higher level: \ addr is the data address of a noise word we want to output : make-noise ( addr -- ) cell+ count type ; \ allocate space for and and store a counted string : $store ( addr len -- ) dup , tuck here swap move allot ; \ define a word that makes a noise when passed a number \ which is divisible by its own parameter n : mod/noise ( n caddr len -- ) create rot , $store does> ( n data* -- flag) \ make a noise or not, indicate our decision with a flag >r r@ @ mod 0= dup if r@ make-noise then r> drop ; \ define fizz and buzz in terms of their modulo number and message string 3 s" Fizz" mod/noise fizz? 5 s" Buzz" mod/noise buzz? \ Now use them in our main word : fizzbuzz ( n) dup fizz? over buzz? or if space drop else . then ; \ And call it in a loop : fizzbuzzes 1+ 1 do i fizzbuzz loop ; 100 fizzbuzzes ---- Here is one way to do the testing - this is working in CeePlusPlus. -- JohnFletcher void test(int n) { bool is_fizz = test_fizz(n); bool is_buzz = test_buzz(n); if (is_fizz || is_buzz) { if (is_fizz) output_fizz(); if (is_buzz) output_buzz(); } else { output_number(n); } output_end_of_line(); } You almost have it. If you're putting both the tests and the printing into separate functions anyway, then you can perform the tests and the printing in the same function. Like so. void test(int n) { bool printed = fizz(n); printed |= buzz(n); if(!printed) { output_number(n); } output_end_of_line(); } What about good old C? -- Lemen int main() { for( int i=1; i<=100; i++) { if(i%3==0) printf("Fizz"); if(i%5==0) printf("Buzz"); if(i%3!=0 && i%5!=0) printf("%d",i); printf("\n"); } return 0; } But where's "FizzBuzz" case in the code above? ''Notice that there's no newline except in the fourth printf. If a number is a multiple of 15, the first two if-clauses are both true, so both cases run.'' or a more obtuse solution: int main (int argc, const char * argv[]) { char *formats[] = { "%d\n", "fizz\n", "buzz\n", "fizzbuzz\n" }; for (int i = 1; i <= 100; i++) printf(formats[(i % 3 == 0) + 2 * (i % 5 == 0)], i); return 0; } or not such readable but a little bit faster ;o) : #include const char* fmt_str[15] = {"FizzBuzz\n", "%d\n", "%d\n", "Fizz\n", "%d\n", "Buzz\n", "Fizz\n" "%d\n", "%d\n", "Fizz\n", "Buzz\n", "%d\n", "Fizz\n", "%d\n", "%d\n"}; int main(int argc, char* argv[]) { for(int i=1;i<=100;i++) printf(fmt_str[i%15], i); return 0; } Above C code: no, no, naughty programmer, you can't leave an undigested argument on the printf, that will crash on some platforms. ''If it crashes, the platform cannot be trusted to get anything right, because this is valid C: "If the format is exhausted while arguments remain, the excess arguments are evaluated (as always) but are otherwise ignored." Identical text in C89 and C99.'' Or Java with a different approach: class FizzBuzz { public static void main(String[] args) { for(int i=1; i<=100; i++) { String num=""; if(i%3==0) num+="Fizz"; if(i%5==0) num+="Buzz"; if(num.length()==0) num=Integer.toString(i); System.out.println(num); } } } ''Sometimes you just need PerlLanguage. -- EarleMartin'' #!/usr/bin/perl for (1..100) { my $fizz = ($_ % 3 == 0) ? "Fizz" : ""; my $buzz = ($_ % 5 == 0) ? "Buzz" : ""; ($fizz ne "" || $buzz ne "") ? print "$fizz$buzz\n" : print "$_\n"; } ''Or, as a one-liner:'' #!/usr/bin/perl print ( ((($_ % 3) ? "" : "Fizz") . (($_ % 5) ? "" : "Buzz")) || $_, "\n") for (1..100); or #!/usr/bin/perl @v=(0, "Fizz", "Buzz", "FizzBuzz"); for($v[0]=1;$v[0]<=100;$v[0]++){ $k = ($v[0]%3)?0:1; $k += ($v[0]%5)?0:2; print($v[$k]."\n"); } Slightly less elegant perl: @fizz=('Fizz',undef,undef) x 34; @buzz=('Buzz',undef,undef,undef,undef) x 21; map { print $fizz[$_].$buzz[$_] . (($fizz[$_].$buzz[$_]) ? '' : $_) . "\n"; } (1..100) -- ZakMcGregor, 2014.01.31 No love for brainfuck? >++++++++++[<++++++++++>-]<[>+>[-]>++++++++++[<++++++++++>-]<+<<[->>->+<<<]>>> [-<<<+>>>]<>>+++<<[->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]>[-<+>]+>[-]>[<<->>[-]]>[-] <<<[[-]++++++++++[>++++++++++<-]>++.+++.[-]<[-]+++++++++++[>+++++++++++<-]>+.. [-]<[-]<<[-]>>]<>>+++++<<[->+>-[>+>>]>[+[-<+>]>+>>]<<<<<<]>[-<+>]+>[-]>[<<->>[ -]]>[-]<<<[[-]+++++++++[>+++++++++++<-]>-.[-]<[-]+++++++++[>+++++++++++++<-]>. +++++..[-]<[-]<<[-]>>]<<[[-]>>++++++++++<[->-[>+>>]>[+[-<+>]>+>>]<<<<<]>[-]>>[ >++++++++[<++++++>-]<.[-]]<>++++++++[<++++++>-]<.[-]<<<]>[-]++++++++++.[-]<[-] <-] ''Python:'' import sys for i in range(-50, 100): if i%3==0: sys.stdout.write('Fizz') if i%5==0: sys.stdout.write('Buzz') if (i%5<>0 and i%3<>0): print i, print ---- '''Python:''' #!/usr/bin/env python for x in range(1,101): s = "" if x % 3 == 0: s += "Fizz" if x % 5 == 0: s += "Buzz" if s == "": s = x print s Yasyf M. ---- I JUST started programming 2 or 3 weeks ago, and I came up with this totally independently, so you can imagine my surprise at not seeing such an easy solution: for i in range(0,101): if i % 3 == 0 and not i % 5 == 0: print "fizz: %d" % i elif i % 5 == 0 and not i % 3 == 0: print "buzz: %d" % i elif i % 3 == 0 and i % 5 == 0: print "FIZZBUZZ: %d" % i else: print i _Jonny Evans Feb_2013 ---- Yet another python example : python -c "print '\n'.join(['Fizz'*(x % 3 == 2) + 'Buzz'*(x % 5 == 4) or str(x + 1) for x in range(100)])" -- crazydieter feb 2014 ---- Yet another Python example: for i in xrange(0,101): s = "" if i % 3 == 0: s += "Fizz" if i % 5 == 0: s += "Buzz" print s if len(s) else i -- Burillo apr 2014 *Dropping the* `len` *call would make this more idiomatic. An empty string is implicitly Falsey, and any none ptr string is implicitly Truthy. Similarly, * `not x <---> x == ""` when x is a string (to Yasyf's above solution). -- Adam Marchetti* ---- As I remember it from my childhood, the way we played this, ''fizz'' was not only for numbers divisible by three, but also numbers containing a three. And ''buzz'' similarly for five. The really adventurous did something similar for seven as well. -- JohnFletcher I ran across some mention of this. (You are not alone! ;-) http://paddy3118.blogspot.com/2007/03/fizz-buzzpy.html -- JeffGrigg ---- You haven't played FizzBuzz until you've played it at a (UnitedStates) state math meet. Starting rules combine the rules above and JohnFletcher's rules (a "fizz" for a multiple of three ''or'' one "fizz" per '3' digit). More elaborate rules are added as the game progresses: squares, primes, etc. Trying counting on the fly how many ways 211 is the sum of two squares, ''and'' determining whether it's prime, etc! Yeah and for fizz the direction changes and for buzz the next person is skipped for both the combination is then reverse and skip of course and that at the speed of speaking preferably. ''I take it this is no longer a programming exercise, but a DrinkingGame?'' ---- Three PHP ways - 1)---------------------- function FizzBuzz ($input_range, $output_vars){ for($i = $input_range['Start']; $i <= $input_range['End']; $i++){ if($i == 0){ continue; } $testing = ''; foreach ($output_vars as $key => $value){ if ($i % $key == 0) {$testing .= $value;} } $output .= ','. $i . ',' .$testing. '
'; } return $output; } $output_vars = array (3 => "Fizz", 5 => "Buzz", 15 => "FizzBuzz"); $input_range = array ("Start" => -60 , "End" => 100); echo FizzBuzz($input_range, $output_vars); 2)---------------------- $out = ''; for ( $i=1; $i <= 100; ++$i ) { if ($f = ($i%3 == 0)) $out .= 'Fizz'; if ($b = ($i%5 == 0)) $out .= 'Buzz'; if ($f == 0 && $b == 0) $out .= $i; $out .= ', '; } echo $out; 3)---------------------- $out = ''; for ( $i=1; $i <= $N; ++$i ) { $outp = ''; if ($i%3 == 0) $outp = 'Fizz'; if ($i%5 == 0) $outp .= 'Buzz'; if ($outp == '') $outp = $i; $out .= $outp.', '; } echo $out; -- ZoharBabin ---- Groovy, in 67 Characters: for(i in 1..100)println(i%3+i%5?i%3?i%5?i:"Buzz":"Fizz":"FizzBuzz") -- Roridge Here's Groovy in 61 characters: (1..100).each{println((it%3?"":"Fizz")+(it%5?"":"Buzz")?:it)} ---- Just BASIC: P = 0 for N = 1 to 100 if N mod 3 = 0 then print "Fizz"; : P = 1 if N mod 5 = 0 then print "Buzz"; : P = 1 if P > 0 then P = 0 : print else print N next N -- Lee ---- JavaScript var i = 1, f = 'Fizz', b = 'Buzz', out = ''; for (; i <= 100; i++) { out = !(i % 3) ? !(i % 5)? f+b : f : !(i % 5)? b : i; console.log(out); } -- Jin //Or just this maintenance nightmare --- for(i=1;i<=100;i++) console.log(((i%3)?(i%5)?i:'Buzz':(i%5)?'Fizz':'FizzBuzz')); --Kier // Readable javascript... for (var i = 1; i <= 100; i++) { var isDividibleByThree = i % 3 === 0; var isDivisibleByFive = i % 5 === 0; if (isDividibleByThree && isDivisibleByFive) { console.log('FizzBuzz'); } else if (isDividibleByThree) { console.log('Fizz'); } else if (isDivisibleByFive) { console.log('Buzz'); } else { console.log(i); } } ---- CoffeeScript k = (n, a, b) -> if n % b then a else a+this[b] fizzbuzz = (n, factors) -> (Object.keys(factors).reduce(k.bind(factors,i),'') or i for i in [1..n]) fizzbuzz(100, {3:'fizz',5:'buzz'}) CoffeeScript We begin by defining the zz method that conditionally adds word-zz to an array ... Array.prototype.zz = (word, bool) -> this.push "#{word}zz" unless bool; this console.log([].zz('fi',i%3).zz('bu',i%5).join(' ') or i) for i in [1..100] ---- CoffeeScript ["fizz" unless i%3]+["buzz" unless i%5] or i for i in [1..100] ---- Io Range;1 to(100) foreach(x,if(x%15==0,writeln("FizzBuzz"),if(x%3==0,writeln("Fizz"),if(x%5==0,writeln("Buzz"),writeln(x))))) -- Jake ---- Sh seq 1 100 | while read L; do F=$(($L % 3)) B=$(($L % 5)) [ $F -eq 0 ] && echo -n Fizz [ $B -eq 0 ] && echo -n Buzz [ $F -ne 0 ] && [ $B -ne 0 ] && echo -n $L echo done ---- SetlLanguage program fizzbuzz; (for m in [1..100], m3 in {m mod 3}, m5 in {m mod 5}) print(['',m](1+sign(m3*m5)) +/ {[0,'fizz']}{m3} +/ {[0,'buzz']}{m5}); end; end fizzbuzz; ---- PowerShell 2.0 switch (1..100) { {-not ($_ % 15)} {'FizzBuzz'; continue} {-not ($_ % 5)} {'Buzz'; continue} {-not ($_ % 3)} {'Fizz'; continue} default {$_} } -DaveL ---- The most concise PowerShell solution I could come up with (83 characters): 1..100|%{$o="";if($_%3-eq0){$o+="fizz"};if($_%5-eq0){$o+="buzz"};if(!$o){$o=$_};$o} Rob Fulwell ---- PowerShell in 62 characters: 1..100|%{(-join(@('Fizz')[$_%3],@('Buzz')[$_%5]),$_|?{$_})[0]} line0 ---- '''PowerShell''' - ''(Latest Microsoft Windows Operating System Language using Microsoft .NET Framework and created from and sharing similiarity to an amalgam of other languages such as ECMAScript, C, C++, Bash, Perl, etc.)'' ''Note: Remove the hash "#" to uncomment the last "# $return" and have only the output itself. Add a hash "#" to comment the preceding line "{0,3:G}..." to remove the nice advanced custom -f format operator output.'' The example below adds the optional "7" = "woof" variant to the code without increasing complexity. The if statements are atomic and build up the $return variable so that further modulus checks can be added independently and easily. The $return variable's name is non-specific to the language and was only used for the sake of legacy and historical association to the "return" keyword in many languages to output the data further out into the program. So in other words, you can change the $return variable into anything you like to make the code shorter if you wish. The complex looking line "{0,3:G}" -f "${_}" + ": $return" uses the PowerShell's -f format operator and .NET Framework's Format() methods on string tokens to select the first token "0", right-align it by 3-characters "3" and format the output using the "G" general format type for variables such as numbers and strings without adding group separators or decimal points. '''Multiple "if" statements ''' ''Code:'' 1 .. 100 | % { $return = "" if ( -not ( $_ % 3 ) ) { $return += "fizz" } if ( -not ( $_ % 5 ) ) { $return += "buzz" } if ( -not ( $_ % 7 ) ) { $return += "woof" } if ( $return -eq "" ) { $return = $_ } "{0,3:G}" -f "${_}" + ": $return" # $return } '''Single "if" Statement''' ''Code:'' 1 .. 100 | foreach { $number = $_ $return = "" ( 3, "fizz" ), ( 5, "buzz" ), ( 7, "woof" ) | foreach { if ( -not ( $number % $_[0] ) ) { $return += $_[1] } } if ( $return -eq "" ) { $return = $number } "{0,3:G}" -f "${_}" + ": $return" # $return } ''Output:'' 1: 1 2: 2 3: fizz 4: 4 5: buzz 6: fizz 7: woof 8: 8 9: fizz 10: buzz 11: 11 12: fizz 13: 13 14: woof 15: fizzbuzz 16: 16 17: 17 18: fizz 19: 19 20: buzz 21: fizzwoof 22: 22 23: 23 24: fizz 25: buzz 26: 26 27: fizz 28: woof 29: 29 30: fizzbuzz 31: 31 32: 32 33: fizz 34: 34 35: buzzwoof 36: fizz 37: 37 38: 38 39: fizz 40: buzz 41: 41 42: fizzwoof 43: 43 44: 44 45: fizzbuzz 46: 46 47: 47 48: fizz 49: woof 50: buzz 51: fizz 52: 52 53: 53 54: fizz 55: buzz 56: woof 57: fizz 58: 58 59: 59 60: fizzbuzz 61: 61 62: 62 63: fizzwoof 64: 64 65: buzz 66: fizz 67: 67 68: 68 69: fizz 70: buzzwoof 71: 71 72: fizz 73: 73 74: 74 75: fizzbuzz 76: 76 77: woof 78: fizz 79: 79 80: buzz 81: fizz 82: 82 83: 83 84: fizzwoof 85: buzz 86: 86 87: fizz 88: 88 89: 89 90: fizzbuzz 91: woof 92: 92 93: fizz 94: 94 95: buzz 96: fizz 97: 97 98: woof 99: fizz 100: buzz '''Alternate Rules: If number contains a matching digit also say the word.''' ''Code:'' 1 .. 100 | foreach { $number = $_ $return = "" ( 3, "fizz" ), ( 5, "buzz" ), ( 7, "woof" ) | foreach { $value = $_[0] $word = $_[1] if ( -not ( $number % $value ) ) { $return += $word } $number.ToString().ToCharArray() | foreach { $char = $_ if ( $char -eq $value.ToString() ) { $return += $word } } } if ( $return -eq "" ) { $return = $number } "{0,3:G}" -f "${_}" + ": $return" #$return } ''Output:'' 1: 1 2: 2 3: fizzfizz 4: 4 5: buzzbuzz 6: fizz 7: woofwoof 8: 8 9: fizz 10: buzz 11: 11 12: fizz 13: fizz 14: woof 15: fizzbuzzbuzz 16: 16 17: woof 18: fizz 19: 19 20: buzz 21: fizzwoof 22: 22 23: fizz 24: fizz 25: buzzbuzz 26: 26 27: fizzwoof 28: woof 29: 29 30: fizzfizzbuzz 31: fizz 32: fizz 33: fizzfizzfizz 34: fizz 35: fizzbuzzbuzzwoof 36: fizzfizz 37: fizzwoof 38: fizz 39: fizzfizz 40: buzz 41: 41 42: fizzwoof 43: fizz 44: 44 45: fizzbuzzbuzz 46: 46 47: woof 48: fizz 49: woof 50: buzzbuzz 51: fizzbuzz 52: buzz 53: fizzbuzz 54: fizzbuzz 55: buzzbuzzbuzz 56: buzzwoof 57: fizzbuzzwoof 58: buzz 59: buzz 60: fizzbuzz 61: 61 62: 62 63: fizzfizzwoof 64: 64 65: buzzbuzz 66: fizz 67: woof 68: 68 69: fizz 70: buzzwoofwoof 71: woof 72: fizzwoof 73: fizzwoof 74: woof 75: fizzbuzzbuzzwoof 76: woof 77: woofwoofwoof 78: fizzwoof 79: woof 80: buzz 81: fizz 82: 82 83: fizz 84: fizzwoof 85: buzzbuzz 86: 86 87: fizzwoof 88: 88 89: 89 90: fizzbuzz 91: woof 92: 92 93: fizzfizz 94: 94 95: buzzbuzz 96: fizz 97: woof 98: woof 99: fizz 100: buzz ---- Java solution (without the main-method boilerplate): public static void printFizzBuzz() { for (int i=1; i <= 100; i++) { boolean fizz = (i % 3) == 0; boolean buzz = (i % 5) == 0; if (fizz && buzz) { System.out.print("fizzbuzz"); } else if (fizz) { System.out.print("fizz"); } else if (buzz) { System.out.print("buzz"); } else { System.out.print(i); } if (i != 100) { System.out.println(); } } } ---- Clojure (doseq [x (map #(cond (zero? (mod % 15)) "FizzBuzz" (zero? (mod % 3)) "Fizz" (zero? (mod % 5)) "Buzz" :else %) (range 1 101))] (println x)) ---- Ruby puts (1..100).map {|i| f = i % 3 == 0 ? 'Fizz' : nil b = i % 5 == 0 ? 'Buzz' : nil f || b ? "#{ f }#{ b }" : i } - s C# for (int i = 1; i <= 100; i++) { if (i % 3 == 0 && i % 5 == 0) { Console.WriteLine("FizzBuzz"); continue; } if (i % 3 == 0) { Console.WriteLine("Fizz"); continue; } if (i % 5 == 0) { Console.WriteLine("Buzz"); continue; } Console.WriteLine(i); } C# (deleted scene) for(int x = 1; x <= 100; x++) { string output = ""; if(x%3 == 0) output += "Fizz"; if(x%5 == 0) output += "Buzz"; if(output == "") output = x.ToString(); Console.WriteLine(output); } ===================================== Inelegantly, in Haskell (by agox): fizzbuzz xs = [if x `mod` 3 == 0 && x `mod` 5 == 0 then "FizzBuzz" else if x `mod` 3 == 0 then "Fizz" else if x `mod` 5 == 0 then "Buzz" else show x | x <- xs] ---- -- A Haskell implementation optimised for reading (by cruftee): main = print [ fizzbuzz x | x <- [1..100] ] where fizzbuzz x | x `multipleOf` [3, 5] = "FizzBuzz" | x `multipleOf` [3] = "Fizz" | x `multipleOf` [5] = "Buzz" | otherwise = show x where m `multipleOf` ns = all (\n -> m `mod` n == 0) ns -- A Haskell implementation that makes an infinite list, taking only the words you want for every prime as a list IN ONE LINE (by bb010g): (\words -> let minus xs ys = if tail xs == [] then xs else case (compare (head xs) (head ys)) of LT -> (head xs):minus (tail xs) ys; EQ -> minus (tail xs) (tail ys); GT -> minus xs (tail ys) in fmap ((\q n -> let pairs = zip (fix (\f (p:xs) -> p : f (xs `minus` [p*p, p*p+2*p..])) $ [3,5..]) q in let string = concatMap (\x -> if (n `mod` (fst x)) == 0 then snd x else "") pairs in if string == "" then show n else string) words) [1..]) -- Use as follows: "take 420 $ ($FUNCTION) ["Fizz","Buzz","Bizz","Bazz","Boom","Bang"]". The words get associated with primes, starting from 3 (3,5,7,9,11,13,17...). Haskell implementation using monoids (easily extended to "woof", etc) import Data.Monoid import Data.Maybe fb n = fromMaybe (show n) (d 3 "Fizz" <> d 5 "Buzz") where d k msg = if n`rem`k == 0 then Just msg else Nothing main = mapM_ (putStrLn . fb) [1..100] ---- In python: for i in xrange(1,101): print [i,'Fizz','Buzz','FizzBuzz'][(i%3==0)+2*(i%5==0)] simple and clear: for n in range(1,101): print ('' if n%3 else 'Fizz')+('' if n%5 else 'Buzz') or n ---- Python: Perhaps clearer and more easily extensible. values = ((3, "Fizz"), (5, "Buzz")) for n in range(1, 101): res = ''.join(v for (k, v) in values if not n % k) print(res if res else n) - jefallbright ---- Python for readability: for num in range (1, 101): fizz = "" if num % 3 else "Fizz" buzz = "" if num % 5 else "Buzz" print fizz + buzz if fizz or buzz else num - @espeed ---- Awesome C# version using custom numeric format strings: for (int i = 1; i < 101; i++) Console.WriteLine("{0:#;}{1:;;Fizz}{2:;;Buzz}", i % 3 * i % 5 == 0 ? 0 : i, i % 3, i % 5); ---- In ABAP DATA: l_mod3 TYPE i, l_mod5 TYPE i. DO 100 TIMES. l_mod3 = sy-index MOD 3. l_mod5 = sy-index MOD 5. IF l_mod3 = 0 AND l_mod5 = 0. WRITE : / 'FizzBuzz'. CONTINUE. ENDIF. IF l_mod3 = 0. WRITE : / 'Fizz'. CONTINUE. ENDIF. IF l_mod5 = 0. WRITE : / 'Buzz'. CONTINUE. ENDIF. WRITE : / sy-index. ENDDO. ---- C++ again: #include #include struct Matcher { int multiple; const int factor; const char * const noise; inline Matcher (int n, const char * s) : multiple (n), factor (n), noise (s) { } inline void operator () (int n, bool &toSetIfMatched) { if (n > multiple) multiple += factor; else if (n == multiple) toSetIfMatched = true, std::cout << noise; } }; int main (int ac, char **av) { int upTo = ac > 1 ? atoi (av[1]) : 100; Matcher threes { 3, "Fizz" }; Matcher fives { 5, "Buzz" }; for (int n = 1; n <= upTo; ++n) { bool matched = false; threes (n, matched); fives (n, matched); if (!matched) std::cout << n; std::cout << '\n'; } return EXIT_SUCCESS; } ''Wow. Peculiar, unclear, '''and''' inefficient. Nice!'' I'm not even a programmer! I'm an artist! public class FizzBuzz { public static void main( String [] args ) { Object[] arr= new Object[101]; for(int i=1; i<101; i++) { if(i%3==0&&i%5==0) arr[i]="fizzbuzz"; else if(i%3==0) arr[i]="fizz"; else if(i%5==0) arr[i]="buzz"; else arr[i]=i; System.out.println(arr[i]); } print(arr); } } ---- Another PHP solution, extensible for additional values $map = array(3=>"Fizz",5=>"Buzz" /*,7=>"Bazz"*/); $i=0; while ($i<100) { ++$i; $res = $i; foreach ($map as $k=>$v) { if ($i%$k == 0) $res .= $v; } echo " $res, "; } ---- I see there's no lisp solution. While I'm at it, let me implement syntax that generalizes the idea of evaluating any sequence of independent conditionals, and a final "if-not" part for when none of them met the condition. This should be R7RS-Small compliant Scheme (R5RS if it weren't for the named let): (define-syntax any-or (syntax-rules () ((any-or (condition action) ... (if-none if-none-action)) (let ((any-condition-met #f)) (when condition (set! any-condition-met #t) action) ... (if (not any-condition-met) if-none-action))))) (define (fizz-buzz) (let loop ((i 0)) (any-or ((zero? (modulo i 3)) (display "Fizz")) ((zero? (modulo i 5)) (display "Buzz")) (if-none (display i))) (newline) (unless (= 100 i) (loop (+ 1 i))))) ---- You can do it nicely in Lua. function fizzbuzz() -- without repeating logic for i = 1, 100 do local isfizz = 0 == (i % 3) and io.write"Fizz" local isbuzz = 0 == (i % 5) and io.write"Buzz" if not isfizz and not isbuzz then io.write(i) end io.write("\n") end end fizzbuzz() function fizzbuzz() -- with repeating logic for i = 1, 100 do print( 0 == (i % (3*5)) and "FizzBuzz" or 0 == (i % 3 ) and "Fizz" or 0 == (i % 5 ) and "Buzz" or i ) end end fizzbuzz() I'm not sure if there's a way to do this without either duplicating logic or using variables. -- DecoPerson ---- The above LuaLanguage solutions seem inelegant. Here's the most straightforward approach to the problem: for i = 1, 100 do local fizz = 0 == i % 3 local buzz = 0 == i % 5 if fizz and buzz then print "FizzBuzz" elseif fizz then print "Fizz" elseif buzz then print "Buzz" else print(i) end end And this is a version of the above which abuses boolean logic to 'golf' the output into a single call to print(): for i = 1, 100 do local fizz = 0 == i % 3 local buzz = 0 == i % 5 print( (fizz or buzz) and ((fizz and "Fizz" or "") .. (buzz and "Buzz" or "")) or i ) end ---- Here is a Javascript implementation that does not use ifs: var input = []; for (i = 1; i <= 100; ++i) { input[i - 1] = i; } var divisibleBy = function(what, inputList) { return inputList.filter(function(item, index) { return !(item % what); }); }; var fizzes = divisibleBy(3, input); var buzzes = divisibleBy(5, input); var fizzbuzzes = divisibleBy(15, input); var transform = function(to, onWhat) { return function(item, index) { onWhat[item - 1] = to; }; }; fizzes.each(transform("Fizz", input)); buzzes.each(transform("Buzz", input)); fizzbuzzes.each(transform("FizzBuzz", input)); input.each(function(item, index) { document.write(item + "
"); }); C# private void mmain() { for (int i = 0; i <= 100; i++) { Multiplicity result = CheckMultiplicity(i); PrintAccordingToMultiplicity(result, i); } } private Multiplicity CheckMultiplicity(int i) { if (IsMultipleOf5An3(i)) { return Multiplicity.IsMultipleOf5An3; } if (IsMultipleOf5(i)) { return Multiplicity.IsMultipleOf5; } if (IsMultipleOf3(i)) { return Multiplicity.IsMultipleOf3; } return Multiplicity.IsMultipleOfNone; } private bool IsMultipleOf5An3(int n) { return IsMultipleOf5(n) && IsMultipleOf3(n); } private bool IsMultipleOf5(int n) { return IsMultipleOf(n, 5); } private bool IsMultipleOf3(int n) { return IsMultipleOf(n, 5); } private bool IsMultipleOf(int n, int mulNumber) { return n % mulNumber == 0; } void PrintAccordingToMultiplicity(Multiplicity mm, int n) { switch (mm) { case Multiplicity.IsMultipleOf3: break; case Multiplicity.IsMultipleOf5: break; case Multiplicity.IsMultipleOf5An3: break; case Multiplicity.IsMultipleOfNone: break; } } enum Multiplicity { IsMultipleOf3, IsMultipleOf5, IsMultipleOf5An3, IsMultipleOfNone }; ---- Matlab: % FizzBuzz by "Cause" for inum = 1:100 fizzbuzz = ''; if mod(inum,3) == 0 fizzbuzz = [fizzbuzz 'Fizz']; end if mod(inum,5) == 0 fizzbuzz = [fizzbuzz 'Buzz']; end if isempty(fizzbuzz) disp(inum) else disp(fizzbuzz) end end ---- function [ ] = fizzbuzz( n ) % another MATLAB solution cells=arrayfun(@(x) num2str(x),1:n,'uni',false); [ cells{3:3:n} ] = deal('Fizz'); [ cells{5:5:n} ] = deal('Buzz'); [ cells{15:15:n} ] = deal('FizzBuzz'); disp(sprintf('%s\n',cells{:})); end ---- % alternative script to demonstrate FizzBuzz in Matlab without loops, by Stoove %create cell array, first column should be integers 1-100. also spacer column i = transpose(linspace(1,100)); c(1:100,1) = cellstr( int2str( i ) ); c(1:100,2:3) = cellstr(''); spacer(1:100,1) = ' '; %logic only requires two logical index functions c(mod(i,3)==0,2) = cellstr('fizz'); c(mod(i,5)==0,3) = cellstr('buzz'); %string array for printing [ char(c(:,1)) spacer char( strcat(c(:,2),c(:,3)) ) ] ---- Common Lisp using conditional formatting: (loop for i from 1 to 100 do (format t "~[Fizz~;~]~[Buzz~;~]~:[~a~;~] " (mod i 3) (mod i 5) (zerop (* (mod i 3) (mod i 5))) i)) or with named predicates (loop for i from 1 to 100 do (let ((fizz (zerop (mod i 3))) (buzz (zerop (mod i 5)))) (format t "~:[~;Fizz~]~:[~;Buzz~]~:[~a~;~] " fizz buzz (or fizz buzz) i))) or with circular lists and type punning (loop for i from 1 to 100 and x in '#1=("" "" "Fizz" . #1#) and y in '#2=("" "" "" "" "Buzz" . #2#) do (unless (concatenate 'list (princ x) (princ y)) (princ i)) (terpri))) ---- I didn't see a concise Java solution above. for (int i = 1; i <= 100; i++) { String thisLine = ""; if (i % 3 == 0) thisLine = thisLine + "Fizz"; if (i % 5 == 0) thisLine = thisLine + "Buzz"; if (thisLine.isEmpty()) thisLine = String.valueOf(i); System.out.println(thisLine); } ---- Fizz buzz in Oracle PL/SQL. select iteration, decode(iteration / 3, trunc(iteration / 3), 'fizz') || decode(iteration / 5, trunc(iteration / 5), 'buzz') || ' ' as fizzbuzz from ( select level as iteration from dual connect by level <= 100 ) Or more precisely/efficiently (Ok, pedantically) select decode(level, trunc(level / 15)*15, 'fizzbuzz', trunc(level/3)*3, 'fizz', trunc(level/5)*5, 'buzz', level) from dual connect by level <= 100; --@BrenBart ---- Fizz buzz in Java - generalized to handle any number fizzes, buzzes or other modulus operations public class FizzBuzz { public static void main(String[] args) { (new FizzBuzz()).deFizz(1, 100, new int[] {3,5}, new String[] {"Fizz", "Buzz"}, System.out); } public void deFizz(int min, int max, int[] mods, String[] modsVals, PrintStream writer) { if( writer == null ) { throw new IllegalArgumentException("Writer must not be null"); } if( mods == null || modsVals == null ) { throw new IllegalArgumentException("Mods and ModsVals must not be null"); } int modsSize = mods.length; if(modsSize == 0 || mods.length != modsVals.length) { throw new IllegalArgumentException("Mods and ModsVals must have more than one value and the same number of agruments"); } for(int count = min; count <= max; count++) { boolean match = false; for(int countIn = 0; countIn < modsSize; countIn++ ) { if( count % mods[countIn] == 0 ) { writer.print(modsVals[countIn]); match = true; } } if(!match) { writer.print(count); } writer.println(""); } } } --- Another in PHP - 0 returned from the Modulus is false and a positive value is true. And while we're at it, why not use while? It gets lonely. $i = 1; while ($i <= 100) { if (!($i%3)) print "Fizz"; if (!($i%5)) print "Buzz"; if ($i%3 && $i%5) print $i; print "\n"; $i++; } ---- Scala! (1 to 100) foreach { n => if (n % 3 == 0) print("Fizz") if (n % 5 == 0) print("Buzz") if (n % 3 != 0 && n % 5 != 0) print(n) println } ---- ---- F# [1..100] |> Seq.map (function | x when x%5=0 && x%3=0 -> "FizzBuzz" | x when x%3=0 -> "Fizz" | x when x%5=0 -> "Buzz" | x -> string x) |> Seq.iter (printfn "%s") ---- Surprise, more python! This time in a single list comprehension ['fizzbuzz' if i % 3 == 0 and i % 5 == 0 else 'fizz' if i % 3 == 0 else 'buzz' if i % 5 == 0 else i for i in range(1,101)] ---- BASIC without IF or Modulo operator (Tested with Commodore BASIC 2.0) 100 print chr$(14):rem Select uppercase/Lowercase mode on Commodore 110 dim nr$(100) 120 for x=1 to 100:nr$(x)=str$(x):next 130 for x=3 to 100 step 3:nr$(x)="Fizz":next 140 for x=5 to 100 step 5:nr$(x)="Buzz":next 150 for x=3*5 to 100 step 3*5:nr$(x)="Fizz"+"Buzz":next 160 for x=1 to 100:Print nr$(x):next 170 end ---- Another point of view in terms of performance... I think the following test if (theNumber is divisible by 3) and (theNumber is divisible by 5) then should be the last, as it would fail 14 times before it is true; while testing for divisible by 3 only fails twice before it is true. ---- Fizz buzz in Bash... #!/bin/bash for i in {1..100} do if [ $(($i % 3)) = 0 ]; then echo -n "Fizz" fi if [ $(($i % 5)) = 0 ]; then echo -n "Buzz" fi if [ $(($i % 3)) != 0 ] && [ $(($i % 5)) != 0 ]; then echo -n "$i" fi echo done ---- Alternative Fizz buzz Bash implementation (performs fewer operations than above, so slightly faster): #!/bin/bash for i in {1..100} do s="" if [ $(($i % 3)) = 0 ]; then s="Fizz" fi if [ $(($i % 5)) = %d\n0 ]; then s="${s}Buzz\nBuzz" fi if [ "$s" = "" ]; then s=$i fi echo $s done ---- If you're doing something small like fizzbuzz over and over, you may care about performance aspects of your code (and comments on this won't hurt if you are interviewing) Still interested in why or why not people might find fizzbuzz hard to do. I'm with an early poster in thinking that if a person can't do something they've not seen in class, they probably aren't a good risk -- but the aesthetic hesitation maybe can be shaken loose. int i; // implementation 1 // 0 tests (are ifs expensive on your architecture?) // 2 mods, 1 bitwise op, 3 logical ops per i (mods are usually expensive) // 1 array store and 1 array fetch per i (in what part of memory iBuzz\ns that array and how expensive to access it?) // also a conversion from int to string for 8/15 of the i // 36 chars used in memory // this one does not use any knowledge re: the incidence of multiples of 3, 5, 15 // could get rid of the store using the nice formatting one halfway up the page above // could get rid of the store and the conversion for 7/15 of the i by including an if-test char fb_array[4][9] = {" ", "fizz", "buzz", "fizzbuzz"}; for (i=1; i<=100; i++) { sprintf(fb_array[0], "%d", i); printf("%s\n", fb_array[ !(i%3) ^ (!(i%5))<<1 ] ); } // implementation 2 // 2 if-tests -- 2 mods/2 logical ops per i for (i=1; i<=100; i++) { if (!(i%3)) { printf("fizz"); if (!(i%5)) printf("buzz\n"); else printf("\n"); } else if (!(i%5)) printf("buzz\n"); else printf("%i\n", i); } // implementation 3 // uses knowledge about incidence of multiples of 3, 5, 15 // up to 3 if-tests and up to 3 mods/3 logical ops per i // expected ~2.75 if-tests and ~2.75 mods/logical ops per i for (i=1; i<=100; i++) { if (!(i%15)) printf("fizzbuzz\n"); else if (!(i%3)) printf("fizz\n"); else if (!(i%5)) printf("buzz\n"); else printf("%i\n", i); } // implementation 4 // 3 if-tests and 4 mods/3 logical ops per i for (i=1; i<=100; i++) { if (!(i%3)) printf("fizz"); if (!(i%5)) printf("buzz"); if ((i%3)&&(i%5)) printf("%i", i); printf("\n"); } ---- For each i: perform 2 increments, 2 NOTs, 2 adds, 0-2 register writes One time setup up front: 2 mods, 2 ifs, 0-2 adds/register writes Counter-based solution, NO expensive mods after the initial setup This one allows for arbitrary lower and upper, not just 1 and 100 Negative values work for lower and upper as well. int main () { const int FIZZ_NUMBER = 3; const int BUZZ_NUMBER = 5; int lower=1; int upper=100; int i; register int fizz_counter=(lower%FIZZ_NUMBER); register int buzz_counter=(lower%BUZZ_NUMBER); if (fizz_counter<0) fizz_counter = FIZZ_NUMBER+fizz_counter; if (buzz_counter<0) buzz_counter = BUZZ_NUMBER+buzz_counter; for (i=lower; i<=upper; i++) { if (!(fizz_counter-FIZZ_NUMBER)) { printf("fizz"); fizz_counter=0; if (!(buzz_counter-BUZZ_NUMBER)) { printf("buzz"); buzz_counter=0; } printf("\n"); } else if (!(buzz_counter-BUZZ_NUMBER)) { printf("buzz\n"); buzz_counter=0; } else printf("%i\n", i); fizz_counter++; buzz_counter++; } return(0); } ---- C++ one-line code without duplicating string literals and without using additional variables. #include using namespace std; int main() { for (int i = 1; (i & 0x0FF) <= 100; ++i &= 0x0FF) cout << (!((i & 0x0FF) % 3) ? (i |= 0x100), "Fizz" : "") << (!((i & 0x0FF) % 5) ? (i |= 0x100), "Buzz" : ""), ((i & 0x100) ? cout << "" : cout<< i), cout << "\n"; } --bitekas ---- my simple python code: def isMultipleOf(firstNum, secondNum): return firstNum % secondNum == 0; def fizzBuzz(num): if isMultipleOf(num,3) and not isMultipleOf(num,5): return "Fizz" elif isMultipleOf(num,5) and not isMultipleOf(num,3): return "Buzz" elif isMultipleOf(num,5) and isMultipleOf(num,3): return "FizzBuzz" else: return num for i in range(0,100): print fizzBuzz(i) --sayz ---- I think the problem people have with fizzbuzz is that it doesn't *seem* to map exactly to the tree structure that nested if-then-else produces. You can get a balanced tree out of it, but one of the mod choices shows up twice in the tree. This is perfectly OK, but leaves the impression that it could be done more efficiently. Fizzbuzz maps to a simple poset. If you were asked to describe how to get to that place two blocks away, you would say: one block east then one block north, or else one block north and one block east -- and you would be thinking about a rectangular city block structure. You wouldn't be thinking about: either go north or go east; now if you've gone north, etc -- unless you'd already started down one of those paths, in which case, you've chosen one of the branches, and the problem has become a tree anyway. Fizzbuzz also maps to a sieve. In a way, fizzbuzz seems like an exercise in seeing how well the applicant can either 1) correctly program a problem that doesn't immediately map to the logical structures at hand, or else 2) put together some logical structures that do map to the underlying problem. Either one of these skills applies to any position I've ever worked. I thought about what happens when you include more number-word combos, like adding in 7/beep. How does it generalize? How understandable and maintainable is it? How well does it map to the underlying structure of the problem? Here's the balanced tree version. Yuck! The structure of the problem is really unclear from a reading, although the tree is balanced. int main(int argc, char *argv[]) { int i; // 3 if-tests -- 3 mods/3 logical ops per i // for n number-word combos, get n if-tests -- n mods/n logical ops per i for (i=1; i<=105; i++) { if (!(i%3)) { printf("fizz"); if (!(i%5)) { printf("buzz"); if (!(i%7)) printf("beep\n"); else printf("\n"); } else if (!(i%7)) printf("beep\n"); else printf("\n"); } else if (!(i%5)) { printf("buzz"); if (!(i%7)) printf("beep\n"); else printf("\n"); } else if (!(i%7)) printf("beep\n"); else printf("%i\n", i); } return 0; } Here's a version that to me preserves the poset structure, via the array. I like this because the poset is exposed, and maybe you'll want that structure down the road. int main(int argc, char *argv[]) { int i; // 0 tests -- 3 mods, 2 bitwise op, 3 logical ops per i // also an array store and an array fetch per i // 2*2*2*14 = 112 chars used in mem // 0 tests -- n mods, n-1 bitwise op, n logical ops per i // plus 2*n array stores as an initial setup // 2^n*length chars used in mem char fb_array[2][2][2][14]; sprintf(fb_array[0][0][0], ""); sprintf(fb_array[0][0][1], "fizz"); sprintf(fb_array[0][1][0], "buzz"); sprintf(fb_array[0][1][1], "fizzbuzz"); sprintf(fb_array[1][0][0], "beep"); sprintf(fb_array[1][0][1], "fizzbeep"); sprintf(fb_array[1][1][0], "buzzbeep"); sprintf(fb_array[1][1][1], "fizzbuzzbeep"); for (i=1; i<=105; i++) { sprintf(fb_array[0][0][0], "%d", i); printf("%s\n", fb_array[ !(i%7) ] [ !(i%5) ][ !(i%3) ] ); } return 0; } Here's the sieve version. I like this because the structure of the sieve is clear. int main(int argc, char *argv[]) { int i; // 4 if-tests -- 3 mods/3 logical ops per i // for n number-word combos, n+1 if-tests -- n mods/n logical ops per i int match; for (i=1; i<=105; i++) { match = 0; if (!(i%3)) { printf("fizz"); match = 1; } if (!(i%5)) { printf("buzz"); match = 1; } if (!(i%7)) { printf("beep"); match = 1; } if (match) printf("\n"); else printf ("%i\n", i); } return 0; } ---- No, not a poset, because you have to hit "fizz" before "buzz" (you never see "buzzfizz"). Here's a less wasteful database version. This is easily changed to accommodate more (or fewer) entries of the form 3/fizz int main () { const int values = 3; // you can change this const int wordlength = 4; struct numberword { int num; char word[wordlength+1]; }; struct numberword numberword_array[values]; // you can change the next entries numberword_array[0].num = 3; sprintf(numberword_array[0].word, "fizz"); numberword_array[1].num = 5; sprintf(numberword_array[1].word, "buzz"); numberword_array[2].num = 7; sprintf(numberword_array[2].word, "beep"); // if values is not 3, add/take away database entries numberword_array[x] as above, so there are values of these char string[14]; int i, j; for (i=1; i<=105; i++) { strcpy(string, ""); for (j=0; j println { (n % 3, n % 5) match { case (0, 0) => "FizzBuzz" case (0, _) => "Fizz" case (_, 0) => "Buzz" case _ => n.toString } } } ---- C with bit manipulation #include int main(int argc, char *argv){ int i; for(i=0; i<101; i++){ switch((i%5 == 0) << 1 | (i%3 == 0)){ case 0: printf("%d\n", i); break; case 1: printf("Fizz\n"); break; case 2: printf("Buzz\n"); break; case 3: printf("FizzBuzz\n"); break; } } } ---- ================================================================================================== One thing I love, love, love about programming is that there are so many ways to skin the cat and yet get the same results. Said another way, I enjoy the various solutions that are only limited by the programmers' creativity. Here's a Python example. def fizzBuzz(): x = 1 while x < 101: # add any other conditions here # as needed to modify the output if x % 3 == 0 and x % 5 == 0: print("FizzBuzz") elif x % 5 == 0: print("Buzz") elif x % 3 == 0: print("Fizz") else: print (x) x += 1 fizzBuzz() ================================================================================================== Ruby: class Array def fizzbuzz(x, word) n = x while x <= self.size self[x - 1] = word x += n end self end end (1..100).to_a.fizzbuzz(3, "Fizz").fizzbuzz(5, "Buzz").fizzbuzz(15, "FizzBuzz") -jbs ---- C# without ifs or fors (boilerplate excluded) Func[,] dict= new Func[2,2]; dict[0,0] = i => i.ToString(); dict[0,1] = i => "Fizz"; dict[1,0] = i => "Buzz"; dict[1,1] = i => "FizzBuzz"; Enumerable.Range(1,100).ToList().ForEach(i => Console.WriteLine(dict[i%3==0?1:0,i%5==0?1:0](i))); or, using the same trick, with a dictionary of dictionaries (and no explicit compares): var dict= new Dictionary>> { {false, new Dictionary> { {false, i => i.ToString()}, {true, _=> "Fizz"}}}, {true, new Dictionary> { {false, _ => "Buzz"}, {true, _=> "FizzBuzz"}}}; } Enumerable.Range(1,100).ToList().ForEach(i => Console.WriteLine(dict[i%3==0][i%5==0](i))); or using tuples for a more readable code var dict= new Dictionary, Func>(); dict.Add(Tuple.Create(false, false), i => i.ToString()); dict.Add(Tuple.Create(true, false), i => "Fizz"); dict.Add(Tuple.Create(false, true), i => "Buzz"); dict.Add(Tuple.Create(true, true), i => "FizzBuzz"); Enumerable.Range(1,100).ToList().ForEach(i => Console.WriteLine(dict[Tuple.Create(i%3==0,i%5==0)](i))); ---- Generators of a cyclic group define equivalence classes. We can exploit this to build a program that has no tests, save the loop condition. #include #include const char *fmts[] = { "%d", "%d", "Fizz", "%d", "Buzz", "Fizz", "%d", "%d", "Fizz", "Buzz", "%d", "Fizz", "%d", "%d", "FizzBuzz", }; #define NFMTS (sizeof(fmts) / sizeof(fmts[0])) int main(void) { int k; for (k = 0; k < 100; ++k) { printf(fmts[k % NFMTS], k + 1); printf("\n"); } return 0; } --DanCross ---- My Python entry: t = range(3, 101, 3) f = range(5, 101, 5) o = range(1, 101) for i in o: r = [] if i in t: r.append('Fizz') if i in f: r.append('Buzz') if not r: r.append(str(i)) print ''.join(r) ---- C/C++ #include #include using namespace std; main() { for (int mod3=1, mod5=1, i=1; i<=100; i++) { (!mod3) && cout << "Fizz"; (!mod5) && cout << "Buzz"; (mod3 && mod5) && cout << i; cout << '\n'; mod3 += (mod3==2) ? -2 : 1; mod5 += (mod5==4) ? -4 : 1; } } Java public static void FizzBuzz() { for(int i = 1; i <= 100; i++) { if(i % 3 == 0 && i % 5 == 0) System.out.println("FizzBuzz"); else if(i % 5 == 0) System.out.println("Buzz"); else if(i % 3 == 0) System.out.println("Fizz"); else System.out.println(i); } } ---- Shortest C++ ? #include int main(){ for(int i = 1 ; i <= 100 ; ++i) ( (i%5)? ((i%3)?(cout << i) :(cout << "Fizz")) : cout << ((i%3)? "Buzz" : "FizzBuzz") ) << endl; } on one line: #include int main(){ for(int i = 1 ; i <= 100 ; ++i) ( (i%5)? ((i%3)?(cout << i):(cout << "Fizz")): cout << ((i%3)? "Buzz": "FizzBuzz")) << endl; } ---- Another slightly faster Fizz-Buzz Bash implementation: #!/bin/bash for i in {1..100} do if [ $(($i % 15)) = 0 ]; then echo "FizzBuzz" elif [ $(($i % 3)) = 0 ]; then echo "Fizz" elif [ $(($i % 5)) = 0 ]; then echo "Buzz" else echo $i fi done ---- An even faster still Fizz-Buzz Bash implementation: #!/bin/bash for i in {1..100} do if [ $(($i % 3)) = 0 ]; then echo -n "Fizz" if [ $(($i % 5)) = 0 ]; then echo "Buzz" else echo fi elif [ $(($i % 5)) = 0 ]; then echo "Buzz" else echo $i fi done ---- I can't believe there's no LOLCODE yet. HAI I HAS A CHEEZBURGER ITZ 1 IM IN YR LOOP UPPIN YR CHEEZBURGER WILE BOTH SAEM CHEEZBURGER AN SMALLR OF CHEEZBURGER AN 100 I HAS A THREE ITZ BOTH SAEM MOD OF CHEEZBURGER AN 3 AN 0 I HAS A FIVE ITZ BOTH SAEM MOD OF CHEEZBURGER AN 5 AN 0 EITHER OF THREE AN FIVE, O RLY? YA RLY THREE, O RLY? YA RLY, VISIBLE "FIZZ"! OIC FIVE, O RLY? YA RLY, VISIBLE "BUZZ"! OIC VISIBLE "" NO WAI VISIBLE CHEEZBURGER OIC IM OUTTA YR LOOP KTHXBYE ---- In Ruby, concise yet easily read and comprehended, with no reference to the dreaded 15, and easily extensible if new conditions are to be added: (1..100).each do |num| message = "" message << "fizz" if num%3 == 0 message << "buzz" if num%5 == 0 message << num.to_s if message.length == 0 puts message end ---- # Super-optimized fizzbuzz! NO duplicate tests! NO remainders! NO use of the dreaded 15! And in Ruby! difAnswers = [ nil, # 1, 16, 31 ... nil, # 2, 17, 32 ... 'fizz', # 3, 18, 33 ... nil, # 4, 19 'buzz', # 5, 20 'fizz', # 6, 21 nil, nil, 'fizz', # 9, 24 'buzz', # 10, 25 nil, 'fizz', # 12, 27 nil, nil, 'fizzbuzz'] # 15, 30, 45, ... and we're done with the table! index = -1; for i in 1..100 do index += 1; if (difAnswers.size <= index) then index = 0; end; # I said no remainders and I meant it. result = difAnswers[index]; print result ? result : i.to_s, "\n"; end # This is not cheating since the table does not grow even if you extend it to the first trillion integers. # The least common multiple of 3 and 5 is 15, so the table only has 15 entries. --- Yet another Perl one liner, but one that returns an array using map & ternary operators, i.e. akin to the Python list comprehension solutions provided by others: map $_%15==0 ? 'fizzbuzz' : $_%5==0 ? 'buzz' : $_%3==0 ? 'fizz' : $_, 1..100); -or- remove the spaces to make it very hard to follow: map $_%15==0?'fizzbuzz':$_%5==0?'buzz':$_%3==0?'fizz':$_,1..100; -or- the negation of above: map !($_%15)?'fizzbuzz':!($_%5)?'buzz':!($_%3)?'fizz':$_,1..100; Checkout http://rosettacode.org/wiki/FizzBuzz#Perl for an even shorter print version, but here's a modified map version of the same: map((Fizz)[$_%3].(Buzz)[$_%5]||$_,1..100); --- Here is another Java one. public static void main() { String printingStuff; boolean isMultipul; for(int i = 0;i <=100;i++) { printingStuff = ""; isMultipul = false; if(i%3==0){ printingStuff = "Fizz"; isMultipul = true; } if(i%5==0){ printingStuff = printingStuff + "Buzz"; isMultipul = true; } if(!isMultipul){ printingStuff = Integer.toString(i); } System.out.println(printingStuff); } } ___________________________________________________________________________________________________________________________________________________ My Java Code - by Tejas S Murthy public static void main(String[] args) { StringBuilder sb = new StringBuilder(); String fb = "FizzBuzz"; String b = "Buzz"; String f = "Fizz"; String n = "\n"; for (int i = 1; i <= 100; i++) { sb.append((i%15 == 0 ? fb : (i%15%5 == 0 ? b : (i%15%3 == 0 ? f : i)))).append(n); } System.out.println(sb.toString()); } ---- One liner in Javascript (by CF): for (var i = 1; i <= 100; i++) console.log((i % 3 ? "" : "Fizz") + (i % 5 ? "" : "Buzz") || i) ---- in go (golang) package main import "fmt" func main() { fmt.Println("starting fizzbuzz") c := make([]int, 100) for i := range c { d := i + 1 threes := d%3 == 0 fives := d%5 == 0 if threes && fives { fmt.Println("FizzBuzz") } else if threes { fmt.Println("Fizz") } else if fives { fmt.Println("Buzz") } else { fmt.Println(d) } } } ---- Regarding the implementation labeled [ick!!!] at the top, I don't think it's particularly bad when you consider how many tests you need to do on each loop iteration. Yes, it's a bit clunky to have the extra (i % 5) test inside the (i % 3) "if", but the extra code allows a maximum of two tests per iteration, which is pretty efficient. ---- Everyone has been focusing on elegance, efficieny...or just posting whatever their solution is...I thought I'd contribute a little bit of pattern abuse to the tune of Java. import java.util.List; import java.util.ArrayList; public final class FizzBuzzRunner { int range; private FizzBuzzRunner(int range) { this.range = range; } private void run() { FizzBuzzVisitor visitor = new FizzBuzzPrintVisitor(new ConsolePrinter()); for(int i = 1; i <= range; ++i) { FizzBuzzFactory.create(i).accept(visitor); } } public static void main(String[] args) { if(FizzBuzzTest.runTests()) new FizzBuzzRunner(100).run();; } } interface FizzBuzzVisitor { public void visit(Fizz fiz); public void visit(Buzz buzz); public void visit(FizzBuzz fizBuzz); public void visit(Num num); } interface Printer { public void print(String s); } class ConsolePrinter implements Printer { public void print(String s) { System.out.println(s); } } class FizzBuzzPrintVisitor implements FizzBuzzVisitor { private Printer printer; public FizzBuzzPrintVisitor(Printer printer) { if(printer == null) throw new NullPointerException(); this.printer = printer; } public void visit(Fizz fiz) { printer.print("Fizz"); } public void visit(Buzz buzz) { printer.print("Buzz"); } public void visit(FizzBuzz fizBuzz) { printer.print("FizzBuzz"); } public void visit(Num num) { printer.print(Integer.toString(num.getVal())); } } interface IFizzBuzz { public void accept(FizzBuzzVisitor visitor); } class Fizz implements IFizzBuzz { public void accept(FizzBuzzVisitor visitor) { visitor.visit(this); } } class Buzz implements IFizzBuzz { public void accept(FizzBuzzVisitor visitor) { visitor.visit(this); } } class FizzBuzz implements IFizzBuzz { public void accept(FizzBuzzVisitor visitor) { visitor.visit(this); } } class Num implements IFizzBuzz { private int val; public Num(int val) { this.val = val; } public int getVal() { return val; } public void accept(FizzBuzzVisitor visitor) { visitor.visit(this); } } final class FizzBuzzFactory { private FizzBuzzFactory() {} public static int bit(int i) { return (i == 0) ? i : i/i; } public static IFizzBuzz create(int i) { int switchVal = bit(i%3) + (bit(i%5) << 1); IFizzBuzz result = null; switch(switchVal) { case 0: result = new FizzBuzz(); break; case 1: result = new Buzz(); break; case 2: result = new Fizz(); break; case 3: result = new Num(i); break; } return result; } } /* Simple test framework */ final class FizzBuzzTest { private static List tests = new ArrayList(); private FizzBuzzTest() {} public static boolean doTest(Test test) { String msg = test.run(); if(msg != null) { System.err.println("Failed test " + test.getName()); System.err.println("\t" + msg); return true; } return false; } private static abstract class Test { String name; public String getName() { return name; } public Test(String name) { FizzBuzzTest.tests.add(this); this.name = name; } public abstract String run(); } public static boolean runTests() { for(Test test : tests) if(doTest(test)) return false; return true; } /* Define tests here */ static { new Test("testFactory") { public String tryNum(int i, Class expected) { IFizzBuzz result = FizzBuzzFactory.create(i); if(result == null) { return "FizzBuzzFactory returned null! expected " + expected.toString(); } if(!expected.isInstance(result)) { return "FizzBuzzFactory return wrong value, expected " + expected.toString() + " for " + i; } return null; } class FacTestPair { public final int num; public final Class c; public FacTestPair(int num, Class c) { this.num = num; this.c = c; } } public String run() { List testPairs = new ArrayList(); testPairs.add(new FacTestPair(3, Fizz.class)); testPairs.add(new FacTestPair(5, Buzz.class)); testPairs.add(new FacTestPair(15, FizzBuzz.class)); testPairs.add(new FacTestPair(1, Num.class)); for(int i = 1; i < 10000; ++i) { FacTestPair newPair; if((i%3)==0 && (i%5)==0) newPair = new FacTestPair(i, FizzBuzz.class); else if((i%3)==0) newPair = new FacTestPair(i, Fizz.class); else if((i%5)==0) newPair = new FacTestPair(i, Buzz.class); else newPair = new FacTestPair(i, Num.class); testPairs.add(newPair); } for(FacTestPair ftp : testPairs) { String errStr = tryNum(ftp.num, ftp.c); if(errStr != null) return errStr; } return null; } }; abstract class ValidatingPrinterListener { public abstract void validate(String str); } class Validator extends ValidatingPrinterListener { public String expected; boolean failed = false; public void setExpected(String str) { this.expected = str; } public void validate(String str) { failed = !expected.equals(str); } public boolean getFailed() { return failed; } } class ValidatingPrinter implements Printer { ValidatingPrinterListener listener; ValidatingPrinter(ValidatingPrinterListener listener) { this.listener = listener; } public void print(String str) { listener.validate(str); } } new Test("testVisitor") { public String run() { Validator validator = new Validator(); FizzBuzzVisitor visitor = new FizzBuzzPrintVisitor(new ValidatingPrinter(validator)); validator.setExpected("Fizz"); new Fizz().accept(visitor); if(validator.getFailed()) return "Failed on Fizz"; validator.setExpected("Buzz"); new Buzz().accept(visitor); if(validator.getFailed()) return "Failed on Buzz"; validator.setExpected("FizzBuzz"); new FizzBuzz().accept(visitor); if(validator.getFailed()) return "Failed on FizzBuzz"; validator.setExpected("1"); new Num(1).accept(visitor); if(validator.getFailed()) return "Failed on Num"; return null; } }; new Test("alltogethernow") { public String run() { Validator validator = new Validator(); FizzBuzzVisitor visitor = new FizzBuzzPrintVisitor(new ValidatingPrinter(validator)); validator.setExpected("1"); FizzBuzzFactory.create(1).accept(visitor); if(validator.getFailed()) return "Failed on Num"; validator.setExpected("Fizz"); FizzBuzzFactory.create(3).accept(visitor); if(validator.getFailed()) return "Failed on Fizz"; validator.setExpected("Buzz"); FizzBuzzFactory.create(5).accept(visitor); if(validator.getFailed()) return "Failed on Buzz"; validator.setExpected("FizzBuzz"); FizzBuzzFactory.create(15).accept(visitor); if(validator.getFailed()) return "Failed on FizzBuzz"; return null; } }; } } ---- MySQL Select fizzbuzz solution: SELECT CASE WHEN MOD(a.i + b.i * 10 + 1, 3) = 0 AND MOD(a.i + b.i * 10 + 1, 5) = 0 THEN 'Fizz Buzz' WHEN MOD(a.i + b.i * 10 + 1, 3) = 0 THEN 'Fizz' WHEN MOD(a.i + b.i * 10 + 1, 5) = 0 THEN 'Buzz' ELSE a.i + b.i * 10 + 1 END AS FizzBuzz FROM (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) a, (SELECT 0 AS i UNION SELECT 1 UNION SELECT 2 UNION SELECT 3 UNION SELECT 4 UNION SELECT 5 UNION SELECT 6 UNION SELECT 7 UNION SELECT 8 UNION SELECT 9) b ORDER BY a.i + b.i * 10 + 1 Note MySQL allows sorting by a field that isn't selected, hence this works. Some flavours of SQL will only allow you to sort by a column in the SELECT and for these you would have to bring back 2 columns which wouldn't comply with the requirements of the FizzBuzz test ----- Visual FoxPro FizzBuzz solution (convert all the bullet points below to asterisks): * Program: FizzBuzz.Prg * 1. Print out numbers from 1 to 100 * 2. If number is divisible by 3, print 'Fizz' in lieu of the number * 3. If number is divisible by 5, print 'Buzz' in lieu of the number * 4. If number is divisible by both 3 and 5, print 'FizzBuzz' in lieu of the number ACTIVATE SCREEN LOCAL lnNumber FOR lnNumber = 1 TO 100 DO CASE CASE ((m.lnNumber % 3) = 0) AND ((m.lnNumber % 5) = 0) ? 'FizzBuzz' CASE (m.lnNumber % 3) = 0 ? 'Fizz' CASE (m.lnNumber % 5) = 0 ? 'Buzz' OTHERWISE ? m.lnNumber ENDCASE ENDFOR ----- Python 3 Solution (could be more readable, but I wanted to keep it tiny): for x in range(1,101): s = '' if not x % 3: s += 'fizz' if not x % 5: s += 'buzz' if not s: s = x print(s) -------------------- C# one-liner, for clarity rather than clever static void Main(string[] args) { for (int i = 1; i <= 100; i++) Console.WriteLine("{0}{1}{2}", i % 3 == 0 ? "Fizz" : string.Empty, i % 5 == 0 ? "Buzz" : string.Empty, (i % 3 != 0 && i % 5 != 0) ? i.ToString() : string.Empty); } -------------------- Another JavaScript 1-line solution var i=0;while(i<100)i++,console.log([i,'fizz','buzz','fizzbuzz'][(i%3==0)+2*(i%5==0)]); -------------------- I could argue that the best solution would be on the form: console.writeline("1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, Fizz, 14, Fizz Buzz, 16, 17, Fizz, 19, Buzz, Fizz, 22, Fizz, Fizz, Buzz, 26, Fizz, 28, 29, Fizz Buzz, Fizz, Fizz, Fizz Fizz, Fizz, Fizz Buzz, Fizz, Fizz, Fizz, Fizz, Buzz, 41, Fizz, Fizz, 44, Fizz Buzz,..."); All other developers/programmers are just overcomplicating things. :D -------------------- TCL solution - not very compact as I prefer clarity over brevity and like to make code as explicit as possible. for {set i 1} {$i<101} {incr i} { if {[expr $i % 15] == 0} { puts "FizzBuzz" } elseif {[expr $i % 3] == 0} { puts "Fizz" } elseif {[expr $i % 5] == 0} { puts "Buzz" } else { puts $i } } -------------------- C# - LINQ one-liner version: foreach (var s in Enumerable.Range(1, 100).Select(i => (i % 15) == 0 ? "FizzBuzz" : (i % 5) == 0 ? "Buzz" : (i % 3) == 0 ? "Fizz" : i.ToString())) { Console.WriteLine(s); } --------------------------------------------------------- LiveCode — a cross-compiler for Windows, Mac OSX, iOS, Android, et.al. with highly readable code: repeat with theNumber = 1 to 100 if theNumber mod 3 <> 0 and theNumber mod 5 <> 0 then put theNumber after field "textField" if theNumber mod 3 = 0 then put "Fizz" after field "textField" if theNumber mod 5 = 0 then put "Buzz" after field "textField" put return after field "textField" end repeat Here's an alternative using mod 15 and switch: repeat with theNumber = 1 to 100 switch 0 -- searches for a modulus of zero case theNumber mod 15 put "FizzBuzz" after field "textField" break case theNumber mod 3 put "Fizz" after field "textField" break case theNumber mod 5 put "Buzz" after field "textField" break default put theNumber after field "textField" end switch put return after field "textField" end repeat —mellington ------------------------------------------------------- PHP again: function f(){for($i=1;$i<101;++$i){echo(($a=($i%3?"":'Fizz').($i%5?"":'Buzz'))?$a:$i).PHP_EOL;}} ------------------------------------------------------- Python again, but with a Lambda! *gasp*: for i in range(1,101): x = lambda z: False if i % z else True if(x(3) and x(5)): print "FizzBuzz" if(x(3)): print "Fizz" elif(x(5)): print "Buzz" else: print i ------------------------------------------------------ The first thing that came to my mind is using a bitmask. 01 maps to fizz, 10 maps to buzz, 11 maps to fizzbuzz and 00 maps to everything else. Here it is in powershell: function fizzbuzz(){ for ($i=1; $i -lt 101; $i++){ $db=0; if ($i%3 -eq 0){$db = $db -bor 1} if ($i%5 -eq 0){$db = $db -bor 2} switch($db) { 1 { Write-Output "Fizz"} #01 2 { Write-Output "Buzz"} #10 3 { Write-Output "FizzBuzz"} #11 default {Write-Output $i} #00 } } } ------------------------------------------------------ This one is nice because you're just counting up, no dividing necessary. function fizzbuzz2(){ $a = 1..101 | % {""} for ($i=3; $i -le 100; $i +=3){$a[$i]="Fizz"} for ($i=5; $i -le 100; $i +=5){$a[$i]+="Buzz"} for ($i=1; $i -le 100; $i++){if ($a[$i] -eq ""){$a[$i]=$i}} return $a } And the equivalent in c. #include #include void main() { char a[101][9]; memset (a,'\0',sizeof(char)*9*101); int i=0; for (i=3; i<101; i+=3){strcpy(a[i],"fizz");} for (i=5; i<101; i+=5){strcat(a[i],"buzz");} for (i=1; i<101; i++){ (strcmp(a[i],"")==0) ? printf("%d\n",i): printf("%s\n",a[i]);} return; } -------------------------------------- Most readable C version I've managed so far, skipping #include boilerplate: void fizzbuzz(void) { char buffer[4]; for (int i = 1; i <= 100; i++) { snprintf(buffer, 4, "%i", i); printf("%s%s%s\n", (i % 3) ? "" : "fizz", (i % 5) ? "" : "buzz", ((i % 3) || (i % 5)) ? buffer : ""); } } -------------------------------------- I'd skip the mod 15 altogether, here is an VB.NET example: For i As Integer = 1 To 100 Dim _line As New System.Text.StringBuilder() _line.Append(i.ToString & vbTab) If (i / 3) = Int(i / 3) Then _ _line.Append("Fizz") If (i / 5) = Int(i / 5) Then _ _line.Append("Buzz") Console.WriteLine(_line) Next jmrjr1 + test.getName()); System.err.println(Buzz, -------------------------------------- Perl snippet.. { my $i; for ($i = 1; $i <= 100; $i++) { my $str1 = $i; my $str2; my $str3; if ($i % 3 == 0) { $str1 = ""; $str2 = "Fizz"; } if ($i % 5 == 0) { $str1 = ""; $str3 = "Buzz"; } print ("$str1$str2$str3\n"); } } ------------------------------------------------------- SQL Server, SELECT query (with recursive CTE): WITH CTE AS ( SELECT 1 AS num, 1 AS mod3, 1 AS mod5 UNION ALL SELECT num + 1, (num + 1) % 3, (num + 1) % 5 FROM CTE WHERE num < 100 ) SELECT num, CASE WHEN mod3 + mod5 = 0 THEN 'FizzBuzz' WHEN mod5 = 0 THEN 'Buzz' WHEN mod3 = 0 THEN 'Fizz' ELSE CAST(num AS VARCHAR(10)) END FROM CTE; And here's a SQL Server-specific version using subquery instead: SELECT num, CASE WHEN mod3 + mod5 = 0 THEN 'FizzBuzz' WHEN mod5 = 0 THEN 'Buzz' WHEN mod3 = 0 THEN 'Fizz' ELSE CAST(num AS VARCHAR(10)) END FROM ( SELECT number as num, number % 3 AS mod3, number % 5 AS mod5 FROM master.dbo.spt_values WHERE name IS NULL AND number BETWEEN 1 AND 100 ) AS numbers; -------------------------------- More C solutions that no one would ever use on a code test! If you used the first one and explained it you will probably get hired no further questions asked lol. void fizzbuzzHack() { char b; intbuzzfizz i; , i ); else cout printf(for (i = 1; i < 101; i++) { b = 1; b &= i % 3 ? 1 : printf("Fizz"); b &= i % 3 ? 1 : printf("Buzz"); b ? printf("%d", i) : printf("\n"); /* This works by noticing 1 & 4 (# of characters printed for "Fizz" or "Buzz") = 0 if you are wondering. Obviously 1 & 1 = 1 and 0 & anything = 0. Work out the test cases and you will see the rest. You can use 1 in the bitwise and with the printf for any string that has even # characters since you are guaranteed to have a binary representation with a 0 on the least significant bit. */ } } More accurate solution: #include int main() { int i; char b; for (i = 1; i < 101; i++) { b = i % 3 ? 1 : 0 & printf("Fizz"); /* b gets 1 if !divisible by 3. gets 0 if divisible by 3 */ b = (i % 5 ? 1 : 0 & printf("Buzz")) && b; /* same as above with 5 + logical and with above result. order matters. b = ... && b can be replaced with b &= ... of course */ b ? printf("%d\n", i) : printf("\n"); /* print number & newline if !divisible by 3 or 5. print new line otherwise. */ } return 0; } -JD -------------------------------- Compact solution in python that doesn't repeat tests: for i in range(1, 101): fizz = (i%3 == 0) * "fizz" buzz = (i%5 == 0) * "buzz" if fizz or buzz: print(fizz + buzz) else: print(i) Not as majestic as some of the leviathan one-liner solutions I've seen above, but perhaps more readable. - Dion Bridger -------------------------------- Re: Dion Bridger My simple python solution is nearly identical to yours, just a little more compact: for n in range(1,101): fizzbuzz = (not n%3) * "Fizz" + (not n%5) * "Buzz" print(fizzbuzz if fizzbuzz else n) -A.Kanyer -------------------------------- Branchless Java version: for (int i=1;i<=100;i++) { int a=((528>>i%15-1)&1)*4; int b=((-2128340926>>(i%15)*2)&3)*4; System.out.println("FizzBuzz".substring(a,b)+(a==b?i:"")); } - Riven ------------------------------- Took 1'30" to open editor, code, compile, and run: #include int main(void) { int i; for (i = 1; i <= 100; i++) { if (i % 3 && i % 5) printf("%d", i); if (i % 3 == 0) printf("Fizz"); if (i % 5 == 0) printf("Buzz"); printf("\n"); } return 0; } Now, can I have a job? ''Nope, not if takes you that long. Come back when you're under a minute in 6502 assembly language.'' ------------------------------- Wrote directly from beginning to end, ended up with slightly convoluted conditional logic. int main (void) { int i; for (i = 1; i <= 100; i++) { if (!((i % 5) * (i % 3))) { if(!(i % 3)) printf("fizz"); if(!(i % 5)) printf("buzz"); } else printf("%d", i); printf("\n"); } return 0; } ------------------------------- More C++ #include using namespace std; int main() { for(int i = 1; i <= 100; i++) { bool fizz = i % 3 == 0; bool buzz = i % 5 == 0; if(fizz && buzz) cout << "FizzBuzz" << endl; else if(fizz) cout << "Fizz" << endl; else if(buzz) cout << "Buzz" << endl; else cout << i << endl; } system("pause"); return 0; } -ToE_Software --- Here is a SWI-Prolog version: fizzbuzz :- fizzbuzz(1, 100). fizzbuzz(N, Max) :- N =< Max, !, findall(W, word(W, N), Ws), show(Ws, N), N1 is N + 1, fizzbuzz(N1, Max). word(fizz, N) :- divisible(N, 3). word(buzz, N) :- divisible(N, 5). divisible(N, D) :- X is N mod D, X = 0. show([], N) :- writeln(N), !. show(Ws, _) :- atomic_list_concat(Ws, S), writeln(S). Or, we could go crazy and define our own little mini-language: ?- op(300, xfx, for). ?- op(300, fy, find). ?- op(300, fy, show). ?- op(300, fy, use). ?- op(300, xfy, from). ?- op(300, xfy, to). ?- op(300, xfy, divides). ?- op(300, fy, writeln). ?- op(300, xfy, atomic_list_concat). fizzbuzz :- fizzbuzz from 1 to 100. fizzbuzz from Number to Max :- Number =< Max, !, find Words for Number, show Words for Number, Next is Number + 1, fizzbuzz from Next to Max. find Words for Number :- findall(Word, use Word for Number, Words). show [] for Number :- writeln Number, !. show Words for _ :- Words atomic_list_concat String, writeln String. use fizz for Number :- 3 divides Number. use buzz for Number :- 5 divides Number. Divider divides Number :- Remainder is Number mod Divider, Remainder = 0. - Mick Krippendorf ---------- Attempted this in JCreator a few minutes ago. I tried to make it easy-to-read, so feedback would be appreciated. import java.util.*; public class FizzBuzz { public static void main (String [] args) { int n=1; while (n<=100) {if (n%3==0 && n%5==0) System.out.printf ("FizzBuzz\n"); else if (n%3==0) System.out.printf ("Fizz\n"); else if (n%5==0) System.out.printf ("Buzz\n"); else System.out.printf ("%d\n", n); n++;} } } -Adi ----------------------- I see 2 things that make troubles here. 1. there are 2 bits (is it multiple of 3 and is it multiple of 5) and 4 outputs. This is perfect balance. But if we use conditional statement with 2 branches (like IF), then 3 statements are required to build a tree with 4 leaves. This 3rd condition confuses. A way to avoid this is by using bits and arrays: var a = [false, "Fizz", "Buzz", "FizzBuzz"]; for (var i=1; i<101; i++) { var bit0 = !(i%3); var bit1 = !(i%5); var index = (bit1 << 1) | bit0; console.log(a[index] || i); } Or shorter version: for (var i=1; i<101; i++) console.log(a[(!(i%5) << 1) | !(i%3)] || i); 2. we've got repeated strings here so optimization thirst makes us to use Fizz and Buzz only once. for (var i=1; i<101; i++) { console.log(((i%3?"":"Fizz") + (i%5?"":"Buzz")) || i ) } -Dan ----------------------- What? No Pascal yet? This runs in Freepascal, Delphi and probably more pascilators. //skipped headers, uses clause and stuff var b:byte; begin for b:=1 to 100 do begin if (b mod 15)=0 then writeln('fizzbuzz') else if (b mod 5)=0 then writeln('buzz') else if (b mod 3)=0 then writeln('fizz') else writeln(IntToStr(b)); end; end; -Nicolai ----------------------- Here is an attempt with only function calls (in c, mostly stolen and thrown together): #include //This looks familiar! const char *s[]={ "%d", "%d", "Fizz", "%d", "Buzz", "Fizz", "%d", "%d", "Fizz", "Buzz", "%d", "Fizz", "%d", "%d", "FizzBuzz" }; int last(int i) { return 0; } int main(int i) { printf(s[i%15],i+1); printf("\n"); //either main+0=main or main+(last-main)=last return (&main + (&last - &main)*(i/99))(i+1); } - Eric ----------------------- Minimalist Java Solution int output = 0; for(int i=0; i<100; i++) { output = i; if(output % 3 == 0){ system.println.out("fizz"); output = null;} if(output % 5 == 0){ system.println.out("buzz"); output = null;} system.println.out(output) } Guillaume Tousignant 10/12/2013 ---------------------- Most beautiful code ever written in shakespeare Romeo, a handsome count Juliet, an angry woman Hamlet, a letter holder Othelio, three Mercutio, five Act I: The counting of Romeo and the praising of Hamlet by Juliet Scene I: The prologue of the Counting [Enter Juliet and Romeo] Juliet: You are nothing! [Exit Romeo] [Enter Hamlet] Juliet: You are nothing! [Enter Othelio] Juliet: You are a warm summer's day! Juliet: You are the sum of youself and a flower! [Exit Othelio] [Enter Mercutio] Juliet: You are a happy bouncing bunny! Juliet: You are the sum of yourself and a tree! [Exeunt Juliet, Mercutio] Scene II: Where the FizzBuzz is calculated [Enter Romeo and Juliet] Juliet: You are the sum of yourself and a flower! Juliet: Art thou greater than the sum of the difference between a tall yellow happy smiling smelly shifty bouncing rabbit and a angry sad malelovent indifferent small beggar and a happy tall stranger? Romeo: If so, let us proceed to Scene VIII. Scene III: Where fizz is checked for Juliet: Art the remainder of the quotient of yourself the same as Othelio? Romeo: If so, let us proceed to Scene VI. Scene IV: Whence buzz is interrogated Juliet: Art the remainder of the quotient of yourself the same as Mercutio? Romeo: If so, let us proceed to Scene VII Scene V: Where a new line is created [Enter Juliet and Hamlet] Juliet: You are nothing! Juliet: You are as amazing as a godly flying silver happy UFO You are as happy as the difference of yourself and a rich banana stand You are as tall as the difference of yourself and godzilla Speak your mind! Hamlet: Let us proceed to Scene II Scene VI: The saying of Fizz [Enter Juliet and Hamlet] Juliet: You are nothing! Juliet: You are as good as the sum of a small little happy colorful pretty nice flower and a happy small pretty tree. You are as good as the difference of yourself and a happy child. Speak your mind! Juliet: You are as good as the sum of yourself and a amazing super walnut. You are as good as the difference of yourself and a banana. Speak your mind! Juliet: You are as amazing as the sum of yourself and a smiling tall flying happy balloon. You are as godly as the sum of yourself and a happy estastic chipmunk. Speak your mind! Speak your mind! Hamlet: Let us proceed to Scene IV Scene VII: Where the buzz is said [Enter Juliet and Hamlet] Juliet: You are nothing! Juliet: You are as tall as a indignant happy smiling yellow tall flying squirrel! You are as brave as the sum of yourself and a frenchman! Speak your mind! Juliet: You are as happy as the sum of yourself and a tall yellow scary sad bigfoot. You are as powerful as the sum of yourself and a short merry hobbit. You are as silly as the difference of yourself and a rabbit. Speak your mind! Juliet: You are as tall as the sum of yourself and a tall silly monster! You are as amazing as the sum of yourself and God! Speak your mind! Speak your mind! Hamlet: Let us proceed to Scene V Scene VIII: The End Juliet: I hate you all [Exuent] ---------------------- Yet another simple perl implementation, uncomment the one commented line for the woof on 7 for (1..100) { $out = ($_%3 == 0) ? "Fizz" : ""; $out .= ($_%5 == 0) ? "Buzz" : ""; #$out .= ($_%7 == 0) ? "Woof" : ""; $out = ($out eq "") ? $_ : $out; print "$out \n"; } ----------------------- Php implementation for($n=1; $n<101; $n++){ echo ($n%3==0 && $n%5==0 ? 'FizzBuzz ' : ($n%5==0 ? "buzz ": ($n%3==0 ?"fizz ":$n." "))); } ----------------------- Yet another Java implementation. Nothing unique here... but this exact method has not already been done above. public class FizzBuzz{ public static void main(String [] args){ for(int i=1; i<101; i++){ if(i%15==0){ System.out.println("FizzBuzz"); } else if(i%3==0){ System.out.println("Fizz"); } else if(i%5==0){ System.out.println("Buzz"); } else{ System.out.println(i); } } } } ----------------------- How about an Objective C version? Just started to code in it and it seemed fun. int i = 100; int multiplier = 0; NSMutableArray *newArray = [NSMutableArray arrayWithObjects: @1, @2, @"Fizz", @4, @"Bang", @"Fizz", @7, @8, @"Fizz", @"Bang", @11, @"Fizz", @13, @14, @"FizzBang", nil]; for(int j = 1; j<=i; j++){ if([[newArray objectAtIndex:j-1] isKindOfClass:[NSString class]] ){ NSLog(@"%@", [newArray objectAtIndex:j-1]); } else{ NSLog(@"%d", [[newArray objectAtIndex:j-1] intValue]+multiplier); } if(j%15 == 0){ j -= 15; i -= 15; multiplier += 15; } } ''you're not changing this array so NSArray would have sufficed'' ------------------------------------------------------- C++ - Fast as possible #include #include int main() { std::string str = ""; for (int i = 1; i < 101; ++i) { if (i % 15 == 0) str = "FizzBuzz"; else { if (i % 3 == 0) str = "Fizz"; else if (i % 5 == 0) str = "Buzz"; else str = std::to_string(i); } std::cout << i << ". " << str << std::endl; } std::cin.get(); return 0; } Martin "Sunny" Švandelík ----------------------------------------------------------- Java - I know there are many, but I didn't see fizzbuzz in Java with ternary public class fizzbuzz { public static void main(String[] args) { for (int i = 1; i < 101; i++){ System.out.println(((i%15 == 0) ? "fizzbuzz" : (i%3 == 0) ? "fizz" : (i%5 == 0) ? "buzz" : i)); } } } -Drew Christman (drewc.bsu@gmail.com) ----------------------------------------------------------- Original Author unknown. Found under the name "FizzBuzz of the Christ" in Python: for i in range(1,101): print("FizzBuzz"[i*i%3*4:8--i**4%5] or i) ----------------------------------------------------------- SQL Server CLR Example Executes with just : select * from dbo.FizzBuzz() Defined by a SQL CLR assembly function: using System; using System.Collections; using System.Collections.Generic; using System.Data.SqlTypes; using System.Linq; using Microsoft.SqlServer.Server; public partial class UserDefinedFunctions { [SqlFunction(DataAccess = DataAccessKind.Read, FillRowMethodName = "FillRows", TableDefinition = "Answer NVARCHAR(10)")] public static AnswerCollection FizzBuzz() { return new AnswerCollection(); } public static void FillRows(Object obj, out SqlString answer) { answer = (string) obj; } public class AnswerCollection : IEnumerable { IEnumerator IEnumerable.GetEnumerator() { return Enumerable.Range(1, 100).Select(i => (i%15) == 0 ? "FizzBuzz" : (i%5) == 0 ? "Buzz" : (i%3) == 0 ? "Fizz" : i.ToString()).GetEnumerator(); } } } @iamwesty ----------------------------------------------------------- R lapply(c(1:100), function(x){ if(x %% 15 == 0){ print('FizzBuzz') } else if (x %% 3 == 0){ print('Fizz') } else if (x %% 5 ==0){ print('Buzz') } else { print(x) } }) ~AFinch ----------------------------------------------------------- Here's a nice friendly version in ksh (KornShell). For the few people above interested in "woof" and the like, it should be obvious that other cases are pretty easy to add. —krz integer i for (( i = 1; i <= 100; ++i )) do (( i % 3 )) && s="" || s="Fizz" (( i % 5 )) || s+="Buzz" print ${s:-$i} done ----------------------------------------------------------- BASIC, no MOD required for i=1 to 100 let p$="" if ((i/3)=int(i/3)) then let p$=p$+"fizz" if ((i/5)=int(i/5)) then let p$=p$+"buzz" if p$ then print p$ else print i next i -Linkage ----------------------------------------------------------- Was bored at lunch. Got to thinking about how most Python examples use this-Feature or that-Feature, but I have yet to see any of them use a string multiplier. So I wrote a little ditty, it's not pretty, and for now it's a pity, but hey, that's what I got. #!/usr/bin/python # simple FizzBuzz fizz = lambda x: ((x%3)==0) buzz = lambda x: ((x%5)==0) def emitFizzBuzz(index): if fizz(index) or buzz(index): return (fizz(index) * u"fizz") + (buzz(index) * u"buzz") else: return index for myiter in range(1,100): print(emitFizzBuzz(myiter)) avery.p.payne@gmail.com ----------------------------------------------------------- Found this in a link on HN, decided to give it a shot with the shortest VBScript I could come up with in 5 mins For input = 1 to 100 retVal = CStr(input) If input Mod 3 = 0 Then retVal = retVal & "Fizz" If input Mod 5 = 0 Then retVal = retVal & "Buzz" If Not IsNumeric(retVal) Then retVal = replace(retVal,input,"") wscript.echo retVal Next epitti@gmail.com ----------------------------------------------------------- FizzBuzz in Python w/ Generators -- inspired by @dabeaz def fizzbuzz(max_num=101): for i in range(max_num): value = "" if i % 3 == 0: value += "Fizz" if i % 5 == 0: value += "Buzz" yield value if value else i for number, burp in enumerate(fizzbuzz()): print "%s: %s" % (number, burp) ------------------------------------------------------- SQL - classic DECLARE @i INT SET @i=1 WHILE @i<=100 BEGIN IF (@i % 3 = 0) AND (@i % 5 = 0) PRINT 'FizzBuzz' ; ELSE IF @i % 3 = 0 PRINT 'Fizz' ; ELSE IF @i % 5 = 0 PRINT 'Buzz' ; ELSE PRINT @i ; SET @i=@i+1 END --Roland ------------------------------------------------------- More Ruby. Down to 84 characters. (difficult to reduce further without the "leaky" ternary operator that Groovy seems to have… which looks very interesting) (1..100).map{|x|(f=[x%3>0,x%5>0]).inject(:&)?x:"#{f[0]?():'Fizz'}#{f[1]?():'Buzz'}"} => [1, 2, "Fizz", 4, "Buzz", "Fizz", 7, 8, "Fizz", "Buzz", 11, "Fizz", 13, 14, "FizzBuzz", 16, 17, "Fizz", 19, "Buzz", "Fizz", 22, 23, "Fizz", "Buzz", 26, "Fizz", 28, 29, "FizzBuzz", 31, 32, "Fizz", 34, "Buzz", "Fizz", 37, 38, "Fizz", "Buzz", 41, "Fizz", 43, 44, "FizzBuzz", 46, 47, "Fizz", 49, "Buzz", "Fizz", 52, 53, "Fizz", "Buzz", 56, "Fizz", 58, 59, "FizzBuzz", 61, 62, "Fizz", 64, "Buzz", "Fizz", 67, 68, "Fizz", "Buzz", 71, "Fizz", 73, 74, "FizzBuzz", 76, 77, "Fizz", 79, "Buzz", "Fizz", 82, 83, "Fizz", "Buzz", 86, "Fizz", 88, 89, "FizzBuzz", 91, 92, "Fizz", 94, "Buzz", "Fizz", 97, 98, "Fizz", "Buzz"] Slightly different: (1..100).map{|x|"FizzBuzz"[4*(x%3<=>0)..-1+4*(x%5<=>0)].gsub(/^$/,"#{x}")} => ["1", "2", "Fizz", "4", "Buzz", "Fizz", "7", "8", "Fizz", "Buzz", "11", "Fizz", "13", "14", "FizzBuzz", "16", "17", "Fizz", "19", "Buzz", "Fizz", "22", "23", "Fizz", "Buzz", "26", "Fizz", "28", "29", "FizzBuzz", "31", "32", "Fizz", "34", "Buzz", "Fizz", "37", "38", "Fizz", "Buzz", "41", "Fizz", "43", "44", "FizzBuzz", "46", "47", "Fizz", "49", "Buzz", "Fizz", "52", "53", "Fizz", "Buzz", "56", "Fizz", "58", "59", "FizzBuzz", "61", "62", "Fizz", "64", "Buzz", "Fizz", "67", "68", "Fizz", "Buzz", "71", "Fizz", "73", "74", "FizzBuzz", "76", "77", "Fizz", "79", "Buzz", "Fizz", "82", "83", "Fizz", "Buzz", "86", "Fizz", "88", "89", "FizzBuzz", "91", "92", "Fizz", "94", "Buzz", "Fizz", "97", "98", "Fizz", "Buzz"] --Maciek ------------------------------------------------------ Python down to 51 characters using the "auto print" of the python console, 57 with a print statement for i in range(100):i%3/2*'Fizz'+i%5/4*'Buzz'or i+1 This is the shortest you can go in python 2.7 I believe ------------------------------------------------------ Elixir (0.14.2) - Uses pattern matching with guards within the case statement to find a match. defmodule FizzBuzz do def check(i) do case i do i when rem(i, 3) == 0 and rem(i, 5) == 0 -> IO.puts "FizzBuzz" i when rem(i, 3) == 0 -> IO.puts "Fizz" i when rem(i, 5) == 0 -> IO.puts "Buzz" _ -> IO.puts "#{i}" end end end Enum.map( 1..100, fn(i) -> FizzBuzz.check(i) end ) ------------------------------------------------------ Apple Swift - written for clarity not obfuscation. Paste into a 'Playground' page, use 'View'->'Assistant Editor' ->'Show Assistant Editor' to display the results of the println. for n in (1...100) { switch (n) { case _ where n%3 == 0 && n%5 == 0: println("FizzBuzz") case _ where n%3 == 0: println("Fizz") case _ where n%5 == 0: println("Buzz") default: println(n) } } ----- An example of FizzBuzz being written from the ground up using Test-Driven Development and Ruby: http://youtu.be/CHTep2zQVAc n = 1 while n < 101: if n%3 == 0 and n%5 == 0: print "fizzbuzz" else if n%3 == 0: print "fizz" else if n%5 == 0: print "buzz" else: print n n += 1 Actually another way to do this is... boolean flag = true; for(int i=0;i<16;i++){ if(i%3==0){ System.out.print("Fizz"); flag=false; } if(i%5==0){ System.out.print("Buzz"); flag=false; } if (flag) System.out.print(i); System.out.print(","); flag = true; } [Moved the above from the FizzBuzz page to here on 2014-07-07.] --------------------------------------------------------------------- //Same bit mask idea but in C //Patrick #include #include main() { //FizzBuzz in C with bit approach // 00 neutral // 01 fizz // 10 buzz // 11 fizzbuzz int i=1; for (i=1; i<101; i++){ int x=0; if (!(i%3)){x = x | 1;} // 01 if (!(i%5)){x = x | 2;} // 10 switch(x){ case 1: printf("fizz\n");break; case 2: printf("buzz\n");break; case 3: printf("fizzbuzz\n");break; default: printf("%d\n",i); } } } --------------------------------------------------------------------- // Another bit-mask in C // Gary #include #include int main() { int i=0; printf("FizzBuzz!\n----------------\n"); for(i=1; i<=100; ++i) { int flag = (i%3==0) | (i%5==0)<<1; if (flag==0 ) printf("%d", i); if (flag & 1) printf( "Fizz"); if (flag & 2) printf( "Buzz"); putchar('\n'); } return 0; } --------------------------------------------------------------------- public class FuzzBuzz { public static void main(String [] args){ for(int i = 1 ; i < 101; i++){ if(i%5==0 && i%3 == 0){ System.out.println("Fizzbizz"); } else if(i%3 == 0){ System.out.println("Fizz"); } else if(i%5 ==0){ System.out.println("Bizz"); } else{ System.out.println(i); } } } } Python... for i in range(1,101): buzz = (not i % 5) * "Buzz" fizz = (not i % 3) * "Fizz" if fizz or buzz: print fizz+buzz else: print i --------------------------------------------------------------------- Scala again, this one with only 3 tests. Here is where I'm missing those ternary ifs - jmt 1 to 100 map { n => if ((if (n % 3 == 0) {print("Fizz");1} else 0) + (if (n % 5 == 0) {print("Buzz");1} else 0) == 0) print(n) println() } --------------------------------------------------------------------- JBoss Drools Rules implementation: package sandbox; // I N T E R N A L F A C T S ================================================== // - Drools will create a POJO with getters, setters, constructors and // correctly implemented hashcode/equals declare FizzBuzz count : int end declare Message text : String end // R U L E S ===================================================================== dialect "mvel" rule "Start FizzBuzz" when exists Integer() then insert(new FizzBuzz(1)); end rule "Count is divisible by 3, and not by 5" when $fizzBuzz : FizzBuzz(count % 3 == 0, count % 5 != 0) then insert(new Message("Fizz")); end rule "Count is divisible by 5, and not by 3" when $fizzBuzz : FizzBuzz(count % 3 != 0, count % 5 == 0) then insert(new Message("Buzz")); end rule "Count is divisible by 3 and by 5" when $fizzBuzz : FizzBuzz(count % 3 == 0, count % 5 == 0) then insert(new Message("FizzBuzz")); end rule "Count is not divisible by 5 or by 3" when $fizzBuzz : FizzBuzz(count % 3 != 0, count % 5 != 0) then String value = Integer.toString($fizzBuzz.count); insert(new Message(value)); end rule "Print FizzBuzz counter" when $message : Message() $fizzBuzz : FizzBuzz() then System.out.println($message.getText()); retract($message) end rule "Increment the FizzBuzz counter last" salience -1 when $countUpTo : Integer() $fizzBuzz : FizzBuzz(count <= $countUpTo) then $fizzBuzz.count = $fizzBuzz.count + 1; update($fizzBuzz); end rule "At the end remove all facts" when $countUpTo : Integer() $fizzBuzz : FizzBuzz(count > $countUpTo) then retract($countUpTo); retract($fizzBuzz); end ---- Here's one in EmacsLisp. Do M-x fizz-buzz. The output will go to the *fizz-buzz* buffer. (defun fizz-buzz () (interactive) (with-output-to-temp-buffer "*fizz-buzz*" (dotimes (i 100) (cond ((and (eq 0 (% i 3)) (eq 0 (% i 5))) (princ "FizzBuzz")) ((eq 0 (% i 3)) (princ "Fizz")) ((eq 0 (% i 5)) (princ "Buzz")) (t (princ i))) (princ "\n")))) --------------------------------------------------------------------- Another simple one in C#. for (int i = 1; i <= 100; i++) { if (i % 3 == 0) Console.Write("Fizz"); if (i % 5 == 0) Console.Write("Buzz"); if ((i % 3 != 0) && (i % 5 != 0)) Console.Write(i.ToString()); Console.Write("\n"); } ----------------------- A simple java program for fizz buzz will be --- import com.google.common.base.Strings; import com.sun.org.apache.xalan.internal.xsltc.compiler.util.Util; class FizzBuzz{ public static void main (String[] args){ FizzBuzz fb = new FizzBuzz(); for(int i =1; i <=100; i++){ String result = fb.printFizzBuzz(i); if(Strings.isNullOrEmpty(result)) Util.println(""+i); else Util.println(result); } } public String printFizzBuzz(int i){ String fizzbuzz=""; fizzbuzz = fizzbuzz+fizz(i); fizzbuzz = fizzbuzz + buzz(i); return fizzbuzz; } public String fizz(int i){ if(i%3 ==0) return "FIZZ"; else return ""; } public String buzz(int i) { if(i%5 == 0) return "BUZZ"; else return ""; } } --------------------------------------------------------------- FizzBuzz Implementation in Python by Shubhamoy '''This code also ensures that those numbers which are divisible by 3 and 5 should only output "fizzbuzz" instead of three outputs''' for i in range(1, 100): if(i%15==0): print "fizzbuzz" if(i%3==0): if(i%15!=0): print "fizz" if(i%5==0): if(i%15!=0): print "buzz" - Is this printing the iteration count if it doesn't print "fizz", "buzz" or "fizzbuzz"? - jmt --------------------------------------------------------------- Scala yet again, this time with 75% more obfuscation using both an implicit and anonymous functions - jmt val printIt: List[(Int => Unit)] = List(i => println(i), i => println("Fizz"), i => println("Buzz"), i => println("FizzBuzz")) implicit class IntModBool(me: Int) { def %%(i: Int) = if (me % i == 0) 1 else 0 } (1 to 100) map { n => printIt(n %% 3 + n %% 5 * 2)(n) } --------------------------------------------------------------- Another php solution which avoids an explicit loop. It uses the array_map function to call an anonymous function, having used the range function to create and array with elements containing the numbers 1 to 100. Not really readable though so just for amusement. array_map(function($n){echo(($n%15)?($n%5)?($n%3)?$n:'Fizz':'Buzz':'FizzBuzz')."\r\n";},range(1,100)); And a version that avoid both an explicit loop and any explicit modulus calculations array_map(function($n){$t=substr(base_convert($n,10,3),-1);$f=substr(base_convert($n,10,5),-1);switch(true){case $t==0&&$f==0:echo 'FizzBuzz';break;case $t==0:echo 'Fizz';break;case $f==0:echo 'Buzz';break;default:echo $n;}echo "\r\n";},range(1,100)); --------------------------------------------------------------- FizzBuzz for the 6502 by barrym95838 2013.04.04 https://github.com/acmeism/RosettaCodeData/blob/master/Task/FizzBuzz/6502-Assembly/fizzbuzz.6502 .lf fzbz6502.lst .cr 6502 .tf fzbz6502.obj,ap1 ;------------------------------------------------------ ; FizzBuzz for the 6502 by barrym95838 2013.04.04 ; Thanks to sbprojects.com for a very nice assembler! ; The target for this assembly is an Apple II with ; mixed-case output capabilities and Applesoft ; BASIC in ROM (or language card) ; Tested and verified on AppleWin 1.20.0.0 ;------------------------------------------------------ ; Constant Section ; FizzCt = 3 ;Fizz Counter (must be < 255) BuzzCt = 5 ;Buzz Counter (must be < 255) Lower = 1 ;Loop start value (must be 1) Upper = 100 ;Loop end value (must be < 255) CharOut = $fded ;Specific to the Apple II IntOut = $ed24 ;Specific to ROM Applesoft ;====================================================== .or $0f00 ;------------------------------------------------------ ; The main program ; main ldx #Lower ;init LoopCt lda #FizzCt sta Fizz ;init FizzCt lda #BuzzCt sta Buzz ;init BuzzCt next ldy #0 ;reset string pointer (y) dec Fizz ;LoopCt mod FizzCt == 0? bne noFizz ; yes: lda #FizzCt sta Fizz ; restore FizzCt ldy #sFizz-str ; point y to "Fizz" jsr puts ; output "Fizz" noFizz dec Buzz ;LoopCt mod BuzzCt == 0? bne noBuzz ; yes: lda #BuzzCt sta Buzz ; restore BuzzCt ldy #sBuzz-str ; point y to "Buzz" jsr puts ; output "Buzz" noBuzz dey ;any output yet this cycle? bpl noInt ; no: txa ; save LoopCt pha lda #0 ; set up regs for IntOut jsr IntOut ; output itoa(LoopCt) pla tax ; restore LoopCt noInt ldy #sNL-str jsr puts ;output "\n" inx ;increment LoopCt cpx #Upper+1 ;LoopCt >= Upper+1? bcc next ; no: loop back rts ; yes: end main ;------------------------------------------------------ ; Output zero-terminated string @ (str+y) ; (Entry point is puts, not outch) ; outch jsr CharOut ;output string char iny ;advance string ptr puts lda str,y ;get a string char bne outch ;output and loop if non-zero rts ;return ;------------------------------------------------------ ; String literals (in '+128' ascii, Apple II style) ; str: ; string base offset sFizz .az -"Fizz" sBuzz .az -"Buzz" sNL .az -#13 ;------------------------------------------------------ ; Variable Section ; Fizz .da #0 Buzz .da #0 ;------------------------------------------------------ .en ---- VBA Functions by Gary Lee With If statements Function FBuzz(lngNum As Long) As String If lngNum = 0 Then Exit Function If lngNum Mod 3 = 0 Then FBuzz = "Fizz" If lngNum Mod 5 = 0 Then FBuzz = FBuzz & "Buzz" If Len(FBuzz) = 0 Then FBuzz = lngNum End Function With Nested Case Select Function FBuzz2(lngNum As Long) As String If lngNum = 0 Then Exit Function FBuzz2 = lngNum Select Case lngNum Mod 3 Case 0: FBuzz2 = "Fizz" Select Case lngNum Mod 5: Case 0: FBuzz2 = FBuzz2 & "Buzz": End Select Case Else: Select Case lngNum Mod 5: Case 0: FBuzz2 = "Buzz": End Select End Select End Function ---- Here is a simple C one-liner: for( int i = 1; i <= 100; i++ ) printf( "%d\n\0__Fizz\n\0Buzz\n\0FizzBuzz\n"+(6 * (((i%5)==0)<<1 | ((i%3)==0))), i ); * Good* programmers can easily recognize the 4 if-then conditionals. The one liner is just a compact and obtuse version of the canonical verbose version: const char *aState[4] = { "%d\n" // Default ,"Fizz\n" // x % 3 ,"Buzz\n" // x % 5 ,"FizzBuzz\n" // x % 15 }; for( int i = 1; i <= 100; i++ ) { int iState = (((i % 5) == 0) << 1) | (((i % 3) == 0) << 0) ; printf( aState[ iState ], i ); } (*) The purpose of this test is to determine if you _are_ a good programmer! :-) -- Michael Pohoreski --------------------------------------------------------------- Pretty clean LiveScript version: for i from 1 to 100 output = '' if i % 3 is 0 then output += 'Fizz' if i % 5 is 0 then output += 'Buzz' if not output then output = i console.log output -- farzher --------------------------------------------------------------- This shell version implements (on POSIX-compatible systems) the assignment exactly as specified, unlike all of the other solutions presented: #!/bin/sh yes 'FizzBuzz' | tr -d '\n' Note that the assignment specified numbers, not integers, from 1 to 100, of which there are an infinite number when real numbers are included, and, similarly, the assignment specified multiples of 3 and 5, not integer multiples. It also did not specify that newlines separate each answer. -- some guy I know in pedantic mode --------------------------------------------------------------- PHP version using the ternary operator $index = 0; while ($index++ < 100) { $word = ($index % 3) ? '' : 'Fizz'; $word .= ($index % 5) ? '' : 'Buzz'; print ($word) ? $word.',' : $index.','; } -- cbdsteve --------------------------------------------------------------- Scala one-liner, similar to the C one-liner above - jmt for (n <- 1 to 100) println(List((15, "FizzBuzz"), (3, "Fizz"), (5, "Buzz")).find(t => n % t._1 == 0).getOrElse((0, n.toString))._2) --------------------------------------------------------------- After looking at so many answers, I figured, I could do another in less code than most using: 1. for loop 2. modulous operator 3. print the answers Regards, Emiliano Gaytan //FizzBuzz Answer to problem //Answer: using modulus operator, all too common across languages, simply test for remainder == 0 and print the Fizz or Buzz pers specs for($i=1; $i<=100; $i++) { $threemultiple = $i%3; //find remainder $i div by 3 $fivemultiple = $i%5; //find remainder $i div by 3 if( $threemultiple == 0) { printf ("Fizz"); } //Spec: print if multiple of three if( $fivemultiple == 0) { printf ("Buzz"); } //spec: print if multiple of five if ($threemultiple == 0 || $fivemultiple == 0 ) { echo( " at number " . $i . "
"); } // add line break if div by either 3 or 5 ------ Quick Factor solution, after all the idea was to do time in a short time span. It could be more compact with more thought but since this code only runs once, why bother : is3 ( n -- n ) [ 3 mod ] keep [ drop "fizz" ] unless ; : is5 ( n -- n ) [ 5 mod ] keep [ drop "buzz" ] unless ; : is15 ( n -- n ) [ 15 mod ] keep [ drop "fizzbuzz" ] unless ; 100 iota [ is15 [ print ] [ is5 [ print ] [ is3 [ print ] [ . ] if ] if ] if ] each Dave Carlton Category''''''None ------ Shortest Ruby version (shortest any language?) yet, I think at 64 characters including the puts: puts (1..100).map{|i|r=["Fizz"][i%3];r="#{r}Buzz"if i%5==0;r||i} Was recently asked a variant of this in an interview. Did NOT answer with this version. Uses the following 'interesting' Ruby features: * Array index past the end gives nil * "#{nil}" is empty string * nil is falsey and any string is truthy * puts outputs arrays with one entry per line Don't use it in an interview, you'd probably get the stink-eye... ;) -- mrs ------ C version using a single puts statement and nested ternary operators. the order of the conditional tests has been roughly optimized for faster execution #include int main() { int i; char buf[3]; for (i = 1; i <= 100; i++) puts( ( (i % 3) && (i % 5) ) ? snprintf(buf, 3, "%d", i), buf : !(i % 3) ? !(i % 5) ? "FizzBuzz" : "Fizz" : "Buzz"); return 0; } - Aron Dennen --------------------------------------------------------------- Here's one written in Lua for i = 1, 100 do if (i % 3 == 0) then io.write("Fizz") elseif (i % 5 == 0) then io.write("Buzz") else io.write(i) end io.write("\n") end C++ version using a stringstream #include #include int main() { std::stringstream ss; for (int i = 1; i != 101; ++i) { std::cout << (i % 3 == 0 && i % 5 == 0 ? "FizzBuzz" : (i % 3 == 0 ? "Fizz" : (i % 5 == 0 ? "Buzz" : (ss << i, ss.str())))) << std::endl; ss.str(""); } return 0; } C version #include int main() { for (int i = 1; i != 101; ++i) { if (i % 3 == 0 && i % 5 == 0) printf("FizzBuzz\n"); else if (i % 3 == 0) printf("Fizz\n"); else if (i % 5 == 0) printf("Buzz\n"); else printf("%d\n", i); } return 0; } -- Altenius vb.net using select case Module Module1 Sub Main() For i = 1 To 100 Select Case 0 Case i Mod 15 Console.WriteLine("FizzBizz" & vbNewLine) Case i Mod 5 Console.WriteLine("Bizz" & vbNewLine) Case i Mod 3 Console.WriteLine("Fizz" & vbNewLine) Case Else Console.WriteLine(i.ToString & vbNewLine) End Select Next Console.ReadLine() End Sub End Module -- Marius