fizzbuzz - 可以缩短吗?

时间:2013-11-05 08:09:13

标签: java fizzbuzz

警告:我不是要求更好的代码,我要求为HackerRank提供更短的代码,以便了解如何缩短代码。

我是Java的新手,正在尝试解决这个FizzBu​​zz问题:

  

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

我写的解决方案尽可能短。

class Solution{
public static void main(String[]b){
for(int i=1;i<101;i++){
String a=(i%3==0)?(i%5==0)?"FizzBuzz":"Fizz":(i%5==0)?"Buzz":i+"";
System.out.println(a);}}}

我得到了3.6分。但显然还有改进的余地,因为有些人写的话少了27个字。怎么可能?有什么建议?我并不关心队伍,我只是想知道自己缺少什么。

编辑:所以在你的帮助下,我这样做了:

class Solution{public static void main(String[]b){for(int i=1;i<101;i++){System.out.println((i%3==0)?(i%5==0)?"FizzBuzz":"Fizz":(i%5==0)?"Buzz":i);}}}

似乎我摆脱了14个字符。上帝知道其他人在失去13个角色方面做了什么。不管怎样,谢谢。

2 个答案:

答案 0 :(得分:3)

如下:

for(int i=0;i++<100;System.out.println((i%3>0?"":"Fizz")+(i%5>0?i%3>0?i:"":"Buzz")))

警告:此代码只是尝试缩短代码的练习。它既不好也不可读,正如普通代码应该尝试的那样!

答案 1 :(得分:0)

是的,可以使其更短。证明:根据leaderboard,java的最高分是7.00。

如何?剧透:标识符,括号,换行符,前后增量。条件可以写为i%3> 0或相反,例如i%3 <1。

class S{public static void main(String[]a){for(int i=0;++i<101;)System.out.println(i%3>0?i%5>0?i:"Buzz":"Fizz"+(i%5>0?"":"Buzz"));}}

它可能并没有变得明显更短,最可能是由于main和print方法的boilerplate代码所致。根据迄今为止在此质量检查中建议的所有内容,如果不是当前的最大值(7.00),则可以在Java中至少达到6.90。

例如

class S{public static void main(String[]a){for(int i=0;++i<101;)System.out.println(i%3>0?i%5>0?i:"Buzz":i%5>0?"Fizz":"FizzBuzz");}}

如果我们愿意尝试其他语言,则不妨尝试将JScaution/advisory一起使用。

herehere讨论了更多方法。

Java,C,C ++,C#,Python,Ruby,R,这些语言的提交都没有达到最高分数16.0。这就引出了一个问题,哪个提交导致了最高分?答案是bash脚本。证明:leaderboard for bash

如何?提示已由最高意见作者Byron Formwalt在here提供。

如果我们不熟悉bash脚本,我们不妨开始使用hereherehere中提到的资源很少。

免责声明:尽管这可能适合于在hackerrank中获得更高的分数或只是为了锻炼而已,但对于Best_coding_practices而言可能不是一个好习惯。这篇文章有很多改进的余地。欢迎提出建议。 Acknowledgements/Thanks