@AlexShow163
Начинающий верстальщик

Как можно сократить код FizzBuzz до двух ифов?

Реализуйте функцию, которая выводит числа в диапазоне от begin до end. При этом:
- Если число делится без остатка на 3, то вместо него выводится слово Fizz
- Если число делится без остатка на 5, то вместо него выводится слово Buzz
- Если число делится без остатка и на 3, и на 5, то вместо числа выводится слово FizzBuzz
- В остальных случаях выводится само число
Функция принимает два параметра (begin и end), определяющих начало и конец диапазона (включительно).
Для простоты считаем, что эти параметры являются целыми числами больше нуля.
Если диапазон пуст (в случае, когда begin > end), то функция просто ничего не печатает.

function begin(begin , end) {
    for(let i = begin, i <= end, i++ {

        if(i%3 === 0 && i%5 === 0) {
            console.log('FizzBuzz')
    }
        else if(i%3 === 0) {
            console.log('Fizz')
            }
        else if(i%5 === 0){
            console.log('Buzz')            
    }else{
        console.log(i)        
}
  • Вопрос задан
  • 434 просмотра
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
for (let i = begin; i <= end; i++) {
  let str = '';
  if (!(i % 3)) {
    str += 'Fizz';
  }
  if (!(i % 5)) {
    str += 'Buzz';
  }
  console.log(str || i);
}

А вообще, давайте лучше сократим до 0 if'ов:

console.log(Array.from({ length: end - begin + 1 }, (_, i) => {
  i += begin;
  return (i % 3 ? '' : 'Fizz') + (i % 5 ? '' : 'Buzz') || i;
}).join('\n'));

// или

for (let i = begin; i <= end; console.log('FizzBuzz'.slice(i % 3 && 4, 4 << !(i % 5)) || i), i++) ;
Ответ написан
Комментировать
MagnusDidNotBetray
@MagnusDidNotBetray
Самый елеустремленный человек
Ровно два if'a:
function begin(begin , end) {
	for(let i = begin; i <= end; i++) {
		let res = '';
		if(i%3 === 0) {
			res += 'Fizz';
		}
		if(i%5 === 0){
			res += 'Buzz';
		}
    res = res || i;
    console.log(res);
	}
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@Karpion
Ну, можно такой вариант:
  1. Делаем заранее массив из 15 элементов. В нулевом элементе - "FizzBuzz". В элементах, кратных трём [3,6,9,12] - "Fizz". В элементах, кратных пяти [5,10] - "Buzz". В остальных - пусто.
  2. Вычисляем i%15. Берём соответствующий элемент массива.
  3. Если элемент массива не пустой - это ответ. Если пустой - то берём исходное число i. Это и будет единственный "if".
Как видите - я схитрил, заменив проверки на изъятие решения из готовой таблицы. очевидно - этот метод хорош только при малом размере таблицы. Вообще, табличные методы вычислений - весьма хороши в плане скорости, рекомендую; но естественно, про размер таблицы надо помнить.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы