有人正在努力创建一个脚本,以尽可能少的方式使用PHP打印FizzBuzz游戏
挑战
编写一个程序,打印从1到100的数字。但是对于三个打印的“Fizz”而不是数字的倍数和五个打印“Buzz”的倍数。对于三和五的倍数的数字打印“FizzBuzz”。
我的尝试:
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) ]
你能看到如何做得更好/改善吗?或者甚至做得更好?
感谢您的时间
答案 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 />';