Как называется этот способ решения проблемы Fizzbuzz? - PullRequest
0 голосов
/ 27 июня 2018

Я новичок в программировании, и в настоящее время я делаю тест FizzBuzz, сначала он выглядит просто, но у нас есть некоторые требования для его выполнения:

  • Я могу использовать только один if. Нет нескольких ветвей, тройной операторы или else.
  • Юнит-тесты.

Я сделал это, используя операторы switch, но, посмотрев в Интернете, я нашел этот путь, который короче, но неясно, каков этот процесс решения задачи FizzBuzz.

Это код:

var i, values = [, , 'fizz', , 'buzz', 'fizz', , , 'fizz', 'buzz', , 'fizz', , , 'fizzbuzz'];
for (i = 0; i < 100; console.log(values[i++ % 15] || i));

Если кто-нибудь понимает этот способ решения проблемы FizzBuzz, я был бы признателен, если бы это можно было объяснить.

1 Ответ

0 голосов
/ 27 июня 2018

Это называется «справочной таблицей». Шаблон ответов циклически просматривает все возможности каждые 15 чисел, потому что это наименьшее общее кратное 3 и 15. Таким образом, мы вычисляем число по модулю 15 и используем его в качестве индекса в массиве всех 15 возможностей.

Пустые элементы в массиве используются для печати самих чисел вместо fizz или buzz. Оставление элемента массива примерно эквивалентно указанию undefined в качестве значения, так что это просто более короткий способ записи

values = [undefined, undefined, 'fizz', undefined, 'buzz', 'fizz', undefined, undefined, 'fizz', 'buzz', undefined, 'fizz', undefined, undefined, 'fizzbuzz'];

Поскольку undefined является ложным, values[i++ % 15] || i будет i всякий раз, когда элемент массива не заполнен одной из строк.

...