PHP Fizzbuzz挑战赛

时间:2012-10-05 15:19:08

标签: php fizzbuzz

有人正在努力创建一个脚本,以尽可能少的方式使用PHP打印FizzBu​​zz游戏

挑战

  

编写一个程序,打印从1到100的数字。但是对于三个打印的“Fizz”而不是数字的倍数和五个打印“Buzz”的倍数。对于三和五的倍数的数字打印“FizzBu​​zz”。

我的尝试:

foreach(range(1,100) as $i) {
  $val = ($i % 3 == 0 ? "Fizz" : "").($i % 5 == 0 ? "Buzz" : "");
  echo (empty($val) ? $i : $val) .  '<br />';
}

某人的蟒蛇尝试

[ ("Fizz" if not i % 3 else "") + ("Buzz" if not i % 5 else "") + ("Baz" if not i % 7 else "") if _ else "" for i in range(0, 100) ]

你能看到如何做得更好/改善吗?或者甚至做得更好?

感谢您的时间

3 个答案:

答案 0 :(得分:19)

最优化的版本:

echo "1\n2\nFizz\n4\nBuzz\nFizz\n7\n8\nFizz\nBuzz\n11\nFizz\n13\n14\nFizzBuzz\n16\n17\nFizz\n19\nBuzz\nFizz\n22\n23\nFizz\nBuzz\n26\nFizz\n28\n29\nFizzBuzz\n31\n32\nFizz\n34\nBuzz\nFizz\n37\n38\nFizz\nBuzz\n41\nFizz\n43\n44\nFizzBuzz\n46\n47\nFizz\n49\nBuzz\nFizz\n52\n53\nFizz\nBuzz\n56\nFizz\n58\n59\nFizzBuzz\n61\n62\nFizz\n64\nBuzz\nFizz\n67\n68\nFizz\nBuzz\n71\nFizz\n73\n74\nFizzBuzz\n76\n77\nFizz\n79\nBuzz\nFizz\n82\n83\nFizz\nBuzz\n86\nFizz\n88\n89\nFizzBuzz\n91\n92\nFizz\n94\nBuzz\nFizz\n97\n98\nFizz\nBuzz\n";

答案 1 :(得分:5)

一种尺寸优化:

$val = ($i % 3 ? "" : "Fizz").($i % 5 ? "" : "Buzz");
              ^--- remove == 0       ^--- remove  == 0

PHP会轻而易举地将模数的结果转换为布尔值,而不进行相等测试。

同样

echo (!$val ? $i : $val);

不需要empty()测试 - 无论如何,空字符串计算为布尔值false。

如果你使用的是PHP 5.3+,你也可以使用快捷方式三元组:

echo ($val ?: $i)

答案 2 :(得分:2)

foreach(range(1,100)as$i)echo(''==($x=($i%3==0?"Fizz":"").($i%5==0?"Buzz":""))?$i:$x).'<br />';