Вдохновленный цифрами в их полосах и 1, 2, Fizz, 4, Buzz
Вступление
Ваша задача - сгенерировать точно такой вывод:
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
16
17
Fizz
19
Buzz
Fizz
22
23
Fizz
Buzz
26
Fizz
28
29
FizzBuzz
31
32
Fizz
34
Buzz
Fizz
37
38
Fizz
Buzz
41
Fizz
43
44
FizzBuzz
46
47
Fizz
49
Buzz
Вызов
Это задание основано на задании Fizz Buzz, и здесь подведем итоги: выведите числа от 1 до 100 включительно, каждое число в отдельной строке, но если число кратно 3, вы должны вывести «Fizz» вместо Исходное число, если число кратно 5, вы должны вывести «Buzz» вместо исходного числа. Если число кратно 15, вы должны вывести «FizzBuzz» вместо исходного числа.
Однако в дополнение к вышеприведенному требованию следует также сделать отступ в каждой строке, используя пробелы, чтобы каждый столбец содержал только уникальные символы (исключая пробелы и символы новой строки). Пробелы, добавленные к каждой строке, - это минимум, необходимый для того, чтобы все строки появились до того, как в нем (включительно) появятся уникальные символы в каждом столбце.
Например, 1,2,Fizz,4
не нужен никакой отступы , потому что они уже имеют уникальные символы в каждом столбце (столбец 1: 12F4
, column2: i
, колонка3: z
, column4: z
), но при добавлении Buzz
мы должны отступ два пробелов , потому что в противном случае мы имели бы два z
«ю.ш. как в 3-м, так и в 4-м столбце. Поскольку для достижения цели достаточно двух пробелов, вы не должны делать отступ от трех пробелов. 7
и 8
не требует отступа, но при выводе 11
нам нужно сделать отступ на один пробел, потому что в 1-м столбце уже есть 1
. 13
затем нужно сделать отступ в три пробела, потому что теперь все столбцы 1, 2 и 3 имеют a 1
. Отступы для остальных строк следуют тому же правилу.
Чтобы упростить задачу, верхний предел был изменен на 50.
Спекуляции
Вы можете написать программу или функцию. Ни один из них не должен принимать непустые данные. Взять пустой ввод - это нормально.
Так как это задача KC, вам нужно создать вывод, как указано в разделе «Введение». Единственный трейлинг-перевод строки хорош. Нет заголовков или новых пробелов. Никаких дополнительных пробелов для каждой строки.
Ваша программа может завершиться с ошибкой или иметь непустой вывод STDERR, если STDOUT соответствует спецификации.
Это внутриязыковой код-гольф , программа с наименьшим количеством байтов выигрывает на своем языке.
Применяются лазейки по умолчанию .
источник
Ответы:
Python 2 , 127 байт
Попробуйте онлайн!
Похоже, что таблица поиска в пятьдесят байт повреждает размер кода меньше, чем логика, необходимая для отслеживания того, какие символы встречаются в каждом столбце.
источник
Python 2 ,
167166163161157 байтПопробуйте онлайн!
Редактирование:
while
короче чемfor..range()
на 1 байт.exec
...i%3/2
трюк из ответа Линн (-2 байта).a=map(set,[[]]*99)
, но я нашел другой путь , используяeval
иrepr
с тем же байтами (-4 байты).Используйте список наборов для отслеживания символов, используемых для каждого столбца, и установите неравенство для членства. Остальное следует точной спецификации.
источник
C (gcc) ,
145144 байта (143 для гекса)Попробуйте онлайн!
источник
Рубин , 129 байт
Попробуйте онлайн!
Двойной кредит отдается Линн за подход к таблице поиска и алгоритм fizzbuzz .
Алгоритм FizzBuzz очень интересен, и он основан на замечательном совпадении, что все положительные, не составные числа меньше 15 (кроме 3 и 5), если их повысить до 4-й степени, на 1 больше, чем кратное 15. В факт:
Значения
3**4%15
и5**4%15
точно равны 4: длина строки "Fizz". Мы можем использовать это, используя их для индексации конца строки длиной не менее 9 символов. Кратные 3 будут индексироваться с начала строки, а кратные 5 - с 5 символов с конца. Любое другое число будет пытаться индексировать перед началом строки и завершится ошибкой, возвращаясьnil
. Тогда 15, конечно же, индексы с 0-го символа. Тот факт, что длина «FizzBuzz» составляет всего 8 символов, является небольшим препятствием; мы используем символ новой строки, чтобы дополнить его, который позже будет игнорироватьсяputs
.Вполне возможно, что таблица поиска может быть переиграна с помощью более процедурного подхода, но моя попытка была в районе 190 байтов.
источник
[JavaScript (Node.js) REPL], 144 байта
`
Попробуйте онлайн!
Программа предупреждения сама запускает недопустимое время
JavaScript (Node.js) , 132 байта, Арнаулд
Попробуйте онлайн!
источник
Java (JDK 10) , 185 байт
Попробуйте онлайн!
кредиты
источник
Haskell ,
190 187 186 178176 байтПопробуйте онлайн!
Немного более читаемая (и аннотированная) версия:
Редактировать: в конечном итоге я добавил некоторые функции в версии для гольфа, чтобы сохранить больше байтов.
источник
JSTX , 122 байта
Попробуйте онлайн!
источник