Вызов
Напишите программу, которая выводит текст на 99 бутылок пива, но вместо «beer» выведите «fizz», если количество бутылок на стене кратно 3, «buzz», если оно кратно 5, и «fizzbuzz», если оно кратно 3 и кратно 5. Если количество бутылок на стене не кратно 3 или 5, просто выведите «beer» как обычно.
Текст песни
99 bottles of fizz on the wall, 99 bottles of fizz.
Take one down and pass it around, 98 bottles of beer on the wall.
98 bottles of beer on the wall, 98 bottles of beer.
Take one down and pass it around, 97 bottles of beer on the wall.
97 bottles of beer on the wall, 97 bottles of beer.
Take one down and pass it around, 96 bottles of fizz on the wall.
96 bottles of fizz on the wall, 96 bottles of fizz.
Take one down and pass it around, 95 bottles of buzz on the wall.
95 bottles of buzz on the wall, 95 bottles of buzz.
Take one down and pass it around, 94 bottles of beer on the wall.
....
3 bottles of fizz on the wall, 3 bottles of fizz.
Take one down and pass it around, 2 bottles of beer on the wall.
2 bottles of beer on the wall, 2 bottles of beer.
Take one down and pass it around, 1 bottle of beer on the wall.
1 bottle of beer on the wall, 1 bottle of beer.
Go to the store and buy some more, 99 bottles of fizz on the wall.
Это код-гольф , поэтому выигрывает самая короткая подача на каждом языке.
code-golf
string
kolmogorov-complexity
musicman523
источник
источник
Ответы:
Python 2 ,
263253245 байтПопробуйте онлайн!
источник
['ab','cd'][x]
можно переписать как'acbd'[x::2]
, просто чтобы сохранить несколько байтовC (GCC),
276274 байтаСпасибо Нейлу за сохранение двух байтов!
Кто не любит непревзойденные скобки в расширениях макросов?
Ungolfed:
Смотрите это в прямом эфире на Колиру!
Альтернативная версия (276 байт)
источник
#define w" on the wall"
на*w=" on the wall"
.#define w
с ,*w=
чтобы сохранить байт там. Честно говоря, я не так уж хорошо знаком с гольфом C, но я предполагаю, что он делаетw
неявно определенный глобальный символ *.#define
dw
является строковым литералом, который автоматически вставляется со смежными строковыми литералами. Еслиw
это переменная, я должен использовать фактическое форматирование строки внутриprintf
.Рёда , 273 байта
Попробуйте онлайн!
Будет гольф дальше с утра.
источник
PHP, 242 байта
Попробуйте онлайн!
PHP, 244 байта
Попробуйте онлайн!
используйте функцию strtr
PHP, 245 байт
Попробуйте онлайн!
использовать анонимную функцию в строке, чтобы получить sustring в зависимости от целого числа
расширенный
источник
function x($n){return"$n bottle".($n-1?s:'')." of ".(($n%3?'':fizz).($n%5?'':buzz)?:beer);}$y=" on the wall";for($b=99;$b;){$c=x($b);echo"$c$y, $c.↵",--$b?"Take one down and pass it around":"Go to the store and buy some more",", ".x($b?:99)."$y.↵↵";}
. :)use
в сочетании с анонимной функцией, которая экономит 1 байт в этой версии05AB1E ,
151146143 байтаПопробуйте онлайн!
источник
SOGL ,
136135134133131 байтПрежде всего, 3-я функция:
Первая функция:
Вторая функция:
И основная часть:
Потерял пару байтов из-за ошибки, которая
O
ставит новую строку до и после нее (и как-то это восходит к V0.9 (это код V0.11))источник
Ява,
344340339 байт(-4 байта после игры в гольф fizzbuzz; -1 байт для удаления случайных пробелов)
Слегка разглажено (используется отступ в 1 пробел для устранения горизонтальной прокрутки):
источник
JavaScript (ES6),
316309 байтЭто полная программа, а не функция. Ничего очень креативного, это просто наивный подход (отсюда и байтаун!). Я использую
console.log()
вместо того,alert()
потому что многие браузеры имеют ограничение на количество символов, которые могут быть отображены с помощьюalert()
. Обратите внимание, что все пробелы и символы новой строки необходимы.Ungolfed:
Вот фрагмент кода:
Кстати, с этим ответом я получил бронзовый значок в код-гольфе ! Никогда не думал, что достигну этого никогда (хотя это не большое достижение).
источник
d
функция не нуждается в()
s, потому что?:
она ассоциативна справа, но вы можете сохранить еще больше байтов, используяd=a=>(a%3?"":"fizz")+(a%5?"":"buzz")||"beer"
.Сетчатка , 230 байт
Попробуйте онлайн! Объяснение:
Вставки 99
_
с.Изменяет все, кроме последнего,
_
на строкуTake one down and pass it around, $.'#.¶¶$.'#, $.'.¶
, где¶
есть новая строка и$.'
количество оставшихся подчеркиваний. Это эффективно отсчитывает от 98 до 1.Добавляет первую строку первого стиха в «компактном» формате.
Добавляет вторую строку последнего стиха. Почему я должен прыгать через обручи, чтобы использовать
_
не знаю, но,$
кажется, совпадают дважды, поэтому я не могу это использовать. Пойди разберись.Подставляет строку, которая появляется в стихе несколько раз.
Это соответствует целым числам в стихах и ставит суффиксы на соответствующую бутылку (и) и снова расширяется до одинарной, готовясь выбрать напиток. (Я сохраняю 1 байт на
99
этом пути.)Замените точные кратные с соответствующим напитком.
источник
sed ,
468459456 байтПопробуйте онлайн!
Требуется
-r
флаг.объяснение
Удерживающее пространство содержит шаблон из двух повторяющихся линий с числами, представленными как
[A-I][0-9]
(отдельные цифры для десятков и единиц), и видом напитка, представленным какX*Y*Z
, гдеX
отслеживаются-N mod 3
иY
из-N mod 5
.На каждой последующей итерации числа уменьшаются, а
X
s иY
s обновляются. Затем удерживающее пространство копируется в пространство образца, превращается в строки песни и печатается.источник
C
349345344 байтаНу что ж, поехали. Это заняло час.
Попробуйте онлайн!
источник
Javascript (ES6),
236234233232 байтадемонстрация
Ungolfed
источник
Рубин , 261 байт
Попробуйте онлайн!
источник
shortC ,
314312 байтИзвините, что нет объяснения, но я полностью забыл, как это работает.
источник
Древесный уголь ,
307297 байтПопробуйте онлайн!
ДА МЫ МОЖЕМ! Ссылка на подробную версию, это может быть много в гольфе, я уверен.
источник
⁺
tcl, 298
демонстрация
источник