I am trying to solve this :
Given the input number, n, return a string containing every value from 1 to n, inclusive. But first, you must follow the rules listed below.
Between each value, add a newline (“n”). Do not have any trailing newline after the last value.
Rules:
For each value, you must follow the following rules:
If the value is a multiple of 3, print the string “Fizz” If the value is a multiple of 5, print the string “Buzz” If the value is a multiple of both 3 & 5, print the string “FizzBuzz” Otherwise, print the integer value
Codes:
function fizz_buzz($n) { if($n <= 0) echo "Invalid"; else if($n%3 == 0 && $n%5 == 0){ echo 'FizzBuzz'; }else if($n%3 == 0){ echo "Fizz"; }else if($n%5 == 0){ echo "Buzz"; }else{ echo $n; } echo "n"; }
ERRORS:
estShouldWorkFor1 Log 1 Failed asserting that null is identical to '1'. testShouldWorkFor2 Log 2 Failed asserting that null is identical to '1 2'.
Should fulfill these test :
class FizzBuzzSolution extends TestCase { public function testShouldWorkFor1() { $this->assertSame("1", fizz_buzz(1)); } public function testShouldWorkFor2() { $this->assertSame("1n2", fizz_buzz(2)); } public function testShouldWorkFor3() { $this->assertSame("1n2nFizz", fizz_buzz(3)); } public function testShouldWorkFor5() { $this->assertSame("1n2nFizzn4nBuzz", fizz_buzz(5)); } }
Advertisement
Answer
You are almost there. You need to loop $n
times, to concatenate the strings/numbers together with newline
and to return the final string:
<?php function fizz_buzz($n){ if($n <= 0) return false; $output = ''; for($i = 1; $i <= $n; $i++){ if($i % 3 == 0 && $i % 5 == 0){ $output .= 'FizzBuzz'; }else if($i % 3 == 0){ $output .= "Fizz"; }else if($i % 5 == 0){ $output .= "Buzz"; }else{ $output .= $i; } if($i != $n){ $output .= 'n'; } } return $output; } $str = fizz_buzz(15); echo $str; ?>
Output for first 15 numbers (because 15 is the first one you can divide on both 3 and 5):
1n2nFizzn4nBuzznFizzn7n8nFizznBuzzn11nFizzn13n14nFizzBuzz