4 ms·
FizzBuzz: Write a program that prints the numbers 1 to 100. However, for multiples of 3 print "Fizz" and for multiples of 5 print "Buzz". For multiples of both
by switz 15y ago
FizzBuzz:
Write a program that prints the numbers 1 to 100. However, for multiples of 3 print "Fizz" and for multiples of 5 print "Buzz". For multiples of both 3 and 5, print "FizzBuzz".
- harichinnan 15y agoCouldn't resist using my new Haskell skills. show' :: Int -> String show' x |((rem x 3 == 0) && (rem x 5 == 0)) = "FizzBuzz" |rem x 3 == 0 = "Fizz" |rem x 5 == 0 = "Buzz" |otherwise = show x main :: IO () main = putStrLn $ foldl (\acc x -> acc ++"\n" ++ show' x) "" [1..100]
- tikhonj 15y agoA couple of suggestions: functions like rem look better infix: x `rem` 3 this means the same thing but is more readable (I think). Instead of folding, just map putStrLn over the list: mapM_ (putStrLn . show') [1..100] mapM_ is just a version of map for monads that ignores its result (it returns m () instead of m a). You can also use forM_ which is mapM_ with its arguments reversed. Finally, I think this site lets you format code by putting four spaces in front of each line. I hope :) Edit: One other thing. You don't need all those parentheses in the first line. rem x 3 == 0 && rem x 5 == 0 = "FizzBuzz" x `rem` 3 == 0 && x `rem` 5 == 0 = "FizzBuzz" Both versions should work and I think they are easier to read. I could see (rem x 3 == 0) also being clear, but the outermost parentheses do not help at all.
- it 15y agoHere's a shorter version: fizzbuzz x | x `mod` 3 == 0 && x `mod` 5 == 0 = "FizzBuzz" | x `mod` 3 == 0 = "Fizz" | x `mod` 5 == 0 = "Buzz" | otherwise = show x main = putStr $ unlines $ map fizzbuzz [1..100]
- rayval 15y agoFor us old-school types, here's the 60-second version in C: int main(int argc, char ** argv) { int i; for (i=0; i< 100; i++) { if( (i%3==0)&&(i%5==0)) printf("FizzBuzz"); else if(i%3==0) printf ("Fizz"); else if(i%5==0) printf ("Buzz"); else printf("%d",i); printf("\n"); } }
- acheron 15y agoI've gotten that one a few times, and I always write something that only contains the string 'Fizz' once and 'Buzz' once (i.e., doesn't say 'FizzBuzz' separately, just uses the same logic to print 'Fizz' and 'Buzz' both), because I figured that was partly the point; otherwise it would be "print 'Zarples' for both multiples". I've been told that it's the first time the interviewer saw it done that way, and now I see several replies here that also would take no modification to use 'Zarples' instead of 'FizzBuzz'. No point to this, I guess, other than that even something as simplistic as this is open to interpretation.