I was reading Why Can’t Programmers… Program today and while I find questions like these annoying at interviews because PHP isn’t really used for that sort of thing, I set myself and my colleagues the task of writing out answers.
The question:
Print out the numbers 1 to 100. Where the number is a multiple of 3, print ‘Fizz’, otherwise if it is a multiple of 5 print ‘Buzz’. If the number is a multiple of 3 and 5, print ‘FizzBuzz’.
Here are our answers, and mind you, they’re all in PHP.
Lim is our budding project coordinator turned programmer. He’s just started getting into PHP, and here’s what Lim came up with:
for ($count=1; $count<=100; $count++)
{
if ($count%3 == 0 && $count%5 ==0){
print "FizzBuzz<br />";
}
elseif ($count%3 == 0){
print "Fizz<br />";
}
elseif ($count%5 == 0){
print "Buzz<br />";
}
else {
print $count."<br />";
}
}
An almost perfect textbook style answer.
Here’s what Foong came up with:
for($i=1;$i<=100;$i++)
{
$result=$i/3;
$result2=$i/5;
if(!preg_match("[\.]" , $result)&&!preg_match("[\.]" , $result2))
{
echo "FizzBuzz<br />";
}
elseif(!preg_match("[\.]" , $result))
{
echo "Fizz<br />";
}
elseif(!preg_match("[\.]" , $result2))
{
echo "Buzz<br />";
}
else
{
echo $i."<br />";
}
}
Certainly an example of … unique thinking. Foong’s had more than a year of experience programming in PHP, for the record.
Here’s what I came up with:
foreach(range(1,100) as $i)
echo $i % 3 == 0 ? ( $i % 5 == 0 ? "FizzBuzz\r\n" : "Fizz\r\n" ) : ( $i % 5 == 0 ? "Buzz\r\n" : $i."\r\n" );
Update: I’ve made a change to the code, Ken Brush a.k.a. shiruken noticed I’d missed something out :(
I love the conditional operator @_@
Also, no, I would never use code like this in production, or even casual coding. I just wanted to beat my colleagues on line-count :P
And now, the ‘proper’ textbook solution for all the Googlers:
for ($i = 1; $i <= 100; $i++)
{
if($i % 3 == 0 && $i % 5 ==0){
print "FizzBuzz<br />";
}
else if($i % 3 == 0){
print "Fizz<br />";
}
else if($i % 5 == 0){
print "Buzz<br />";
}
else {
print $i."<br />";
}
}