После многих (двух?) Проблем, связанных с FizzBuzz, опубликованных недавно на PPCG, у меня возник соблазн придумать свою собственную. Вот ...
Fizz Buzz Lightyear
Напишите программу или функцию, которая принимает целое число nи печатает FizzBuzzдля любого числа, кратного 15, Fizzдля любого числа, кратного 3, и Buzzдля любого числа, кратного 5, вплоть до (и включая) n. Вывод для всех iдолжен сопровождаться переводом строки. Но есть поворот!
Каждый третий раз, когда вы печатаете Buzz, Buzz Lightyear, наконец, прислушивается к вашему вызову и терпит крах в вашей программе. Затем он представляет себя - но с тех пор, как он потерпел крах, некоторые из его слов смешались с результатами вашей программы:
Buzz Lightyear, Space Ranger, Universe Protection Unit.
FizzBuzz Lightyear, Space Ranger, Universe Protection Unit.
(то есть, только Append Lightyear, Space Ranger, Universe Protection Unit.к Buzzили FizzBuzz- то, что вы бы в противном случае отображается Обратите внимание на ведущее место.)
Тем не менее, Базз Лайтер, будучи космическим рейнджером, имеет очень острый слух, и поэтому печать FizzBuzzбудет учитываться при Buzzподсчете .
Затем Buzz слоняется вокруг, чтобы защитить ваш компьютер от всех этих злых выводов, пока вы не наберете другое число, которое делится на 5 (или 15, поскольку они тоже делятся на 5). Это означает, что пока вам не придется печатать Buzz(или FizzBuzz) снова, вы вообще ничего не печатаете.
Когда вы наконец достигли этого состояния, Базз отправляется:
To infinity and beyond!
Пример вывода
Это ожидаемый результат для n = 25: (обратите внимание, как он пропускает с 16 по 19)
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz Lightyear, Space Ranger, Universe Protection Unit.
To infinity and beyond!
Fizz
22
23
Fizz
Buzz
правила
Необязательный завершающий перевод новой строки приемлем.
Это код гольф; как таковой, самый короткий код, в байтах, выигрывает.
Предположим, что данные nдействительны и больше или равны 15 (то есть, когда задача впервые отклоняется от стандартного fizzbuzz)
Buzz приветствует вас, когда «Buzz Counter» (который считает оба Buzzи FizzBuzz) достигает 3; он уходит, когда печатается следующее Buzz(включая, опять же, оба Buzzи FizzBuzz).
Число, с которого он отправляется, не засчитывается в счет следующего «счетчика жужжания»; вместо этого вы должны Buzzснова начать отсчет es с 0. Например, программа, запущенная с n = 25(пример вывода), должна заканчиваться «Счетчиком жужжания», равным 1, поскольку именно столько раз Buzzбыло напечатано с момента последнего отъезда.
В случае nпопадания между одним из прибытий Базза и одним из его отъездов (т. Е. Он все еще там - вы ничего не печатаете), ожидается изящное завершение. Поэтому последней строкой вывода будет его введение
Стандартные лазейки запрещены.
nпопадает между прибытием Базз Лайтер и его отъездом?