fizzbuzz - можно покороче?

ПРЕДУПРЕЖДЕНИЕ: я не прошу лучшего кода, я прошу более короткий код для HackerRank, просто чтобы узнать, что можно сделать, чтобы его сократить.

Я новичок в Java и пытался решить эту проблему FizzBuzz:

Напишите программу, которая печатает числа от 1 до 100. Но для числа, кратного трем, вместо числа выведите >“Fizz”, а для числа, кратного пяти, выведите “Buzz”. Для чисел, кратных как трем, так и пяти, выведите «FizzBuzz».

Я написал свое решение как можно короче.

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 персонажей. В любом случае, спасибо.


person dono    schedule 05.11.2013    source источник
comment
Для начала вы можете исключить эту переменную и просто напечатать свою причудливую строку. System.out.println((i%3==0)?(i%5==0)?FizzBuzz:Fizz:(i%5==0)?Buzz:i+);   -  person SBI    schedule 05.11.2013
comment
улучшение кода и использование меньшего количества символов не должны использоваться в одном предложении;)   -  person jan groth    schedule 05.11.2013
comment
Я бы подвел тебя. Удобочитаемость намного важнее, чем количество используемых символов.   -  person Scary Wombat    schedule 05.11.2013
comment
Добавляя к @SBI, вы можете удалить +"" после i в SOP. Это действительно неуместно.   -  person RainMaker    schedule 05.11.2013
comment
Люди, редактирующие вопрос: не форматируйте код, поскольку вопрос заключается в использовании как можно меньшего количества символов.   -  person JJJ    schedule 05.11.2013
comment
Думаю, понятно, что не стоит этого делать, тем не менее, это интересное занятие ;)   -  person SBI    schedule 05.11.2013
comment
Если это касается испытания HackerRank, знайте, что оценка основана на записях с нескольких языков. Учитывая, что оценка определяется общим количеством символов, Java всегда будет в невыгодном положении по сравнению с другими языками, такими как Perl или Python.   -  person Kippie    schedule 05.11.2013
comment
user2310... Забыл упомянуть, что это с веб-сайта hackerrank, где чем короче код, тем выше оценка. Я не хожу на собеседование на работу. Я просто пытаюсь учиться здесь.   -  person dono    schedule 05.11.2013
comment
Киппи, я знаю, я отфильтровал оценки по языку Java, и максимальная оценка была 6,3, что означает, что они написали это на 27 символов меньше, чем у меня.   -  person dono    schedule 05.11.2013


Ответы (2)


Как насчет чего-то вроде:

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

Внимание! этот код — всего лишь попытка сделать код короче. Это не так хорошо и не читабельно, каким должен быть обычный код!

person Jean Logeart    schedule 05.11.2013
comment
Это должно сопровождаться предупреждением не пытайтесь делать это дома. Люди могут спутать это с хорошим кодом. - person jan groth; 05.11.2013

Да, можно сделать еще короче. Доказательство: согласно таблице лидеров, наивысшая оценка для 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"));}}

Возможно, он еще не станет значительно короче, скорее всего, из-за шаблонный код для основного метода и метода печати. Основываясь на всем, что было предложено в этом QA до сих пор, можно достичь как минимум 6,90 в Java, если не текущего максимума, который составляет 7,00.

Например,

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

Как? Подсказка была любезно предоставлена ​​автором лучшего предложения Байроном Формволтом по адресу здесь.

Если мы новичок в написании сценариев bash, мы можем начать работу с несколькими упомянутыми ресурсами -tutorial">здесь, здесь и здесь.

Отказ от ответственности: даже если это может подойти для получения более высокого балла в рейтинге хакеров или просто для тренировки, это может не сработать для Best_coding_practices. В этом посте есть много возможностей для улучшения. Предложения приветствуются. Благодарности/Благодарности.

person user145657    schedule 15.08.2019