Fizzbuzz — основной инструментарий интервьюера. Его часто считают простым вопросом на доске, но это может быть несправедливой оценкой. В первый раз, когда вы сталкиваетесь с этой проблемой, особенно для новичков в алгоритмах, таких как я, это может быть очень сложно. Однако ответ, как и большинство проблем в программировании, удивительно прост.

Проблема —

Напишите алгоритм, который регистрирует все числа от 1 до n, за исключением чисел, кратных трем, которые должны быть "шум", и кратных пяти, которые должны быть "шум". Несколько и тех, и других должны быть зарегистрированы как "fizzbuzz".

напр. "1, 2, шипение, 4, жужжание, 6..."

Давайте начнем с разработки стратегии псевдокода, которой мы можем следовать, чтобы решить эту проблему:

  1. Создайте цикл for, который регистрирует каждое число от 1 до n.
  2. Проверить, делится ли каждое число на три, пять или на то и другое.
  3. Зарегистрируйте результат сопоставления.

Звучит как достаточно простой план, но все зависит от второго шага. Если мы не можем определить, делится ли число на наши цели, эта стратегия просто не работает. Существует множество сложных математических решений, которые мы могли бы использовать, но нам не нужно заморачиваться ни с одним из них. Скорее, в самое сердце JavaScript встроен инструмент, который сделает всю эту работу за нас…

Оператор по модулю —

Этот малоиспользуемый оператор (обозначенный знаком процента %) возвращает число остаток после деления, округляя это число вверх или вниз. Если остатка нет (например, 9 % 3), возвращается 0.

Используя этот инструмент, мы можем эффективно определить, делится ли одно число на другое без каких-либо сложных вычислений. Это отлично подойдет для нашей стратегии.

Решение -

Давайте шаг за шагом пройдемся по нашему ранее намеченному плану. Во-первых, мы построим цикл, регистрирующий каждое число от 1 до n. Я надеюсь, что вы можете сделать это самостоятельно, но если нет, практика делает совершенным.

Наш второй шаг можно разделить на три дополнительных подэтапа:

  • Проверить, делится ли число на три и пять
  • Проверить, делится ли число только на три
  • Проверить, делится ли число только на пять

Если вы еще не догадались, простого оператора if else должно быть более чем достаточно для наших нужд.

После каждой проверки мы можем перейти к третьему шагу и записать требуемый результат.

Вот и все! Как я уже говорил, решение этой проблемы очень простое, как только решение найдено и понято. Ключом является оператор по модулю, как только он обнаружен, практически любой алгоритм, требующий от вас нахождения чисел, делящихся на цель, довольно прост. Я обнаружил, что это верно для многих алгоритмов. Как только конкретная стратегия найдена, она становится действительно легкой.