0

警告:我不是要求更好的代码,我要求的是更短的 HackerRank 代码,只是为了了解可以做些什么来缩短它。

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

编写一个打印从 1 到 100 的数字的程序。但是对于 3 的倍数打印 >“Fizz”而不是数字,对于 5 的倍数打印“Buzz”。对于 > 是 3 和 5 的倍数的数字,打印“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 个字符。总之感谢。

4

3 回答 3

5

怎么样的东西:

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

警告:此代码只是尝试使代码更短的练习。它不像普通代码应该尝试的那样好或可读!

于 2013-11-05T08:14:51.433 回答
0
function fizzBuzz(n) {
  for (i = 1; i <= n; i++) {
    let result = "";
    if (i % 3 === 0) result += "Fizz";
    if (i % 5 === 0) result += "Buzz";
    if (i % 7 === 0) result += "Foo";
    console.log(result || i);
  }
}

fizzBuzz(105);

它将检查每个条件,如果所有条件都为真,那么所有条件都将相加,并且它适用于单个真条件以及两个真条件。

于 2022-01-11T15:48:43.717 回答
0

是的,可以让它更短。证明:根据排行榜,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 方法的样板代码。到目前为止,基于此 QA 上建议的所有内容,如果当前的最大值不是 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");}}

如果我们愿意尝试其他语言,我们不妨谨慎/建议尝试JS

这里这里讨论了更多的方法。

Java、C、C++、C#、Python、Ruby、R,这些语言的提交都没有达到最高分,即 16.0。这将我们引向一个问题,哪个提交获得了最高分?答案是 bash 脚本。证明:bash 排行榜

如何?提示已由顶级提交的作者 Byron Formwalt 在此处提供。

如果我们是 bash 脚本的新手,我们可能希望从这里这里这里提到的少量资源开始。

免责声明:尽管这可能适用于在hackerrank中获得更高的分数或只是为了锻炼,但对于Best_coding_practices来说可能不是一个好的做法。这篇文章有很多改进的地方。欢迎提出建议。致谢/感谢

于 2019-08-15T15:04:43.410 回答