Создайте кратчайшую запутанную реализацию FizzBuzz.
Чтобы считаться запутанным, оно должно удовлетворять как минимум одному из следующих:
- Не содержит слов "Fizz", "Buzz" или "FizzBuzz"
- Не содержит цифры 3, 5 или 15.
- Используйте любой из вышеперечисленных в заблуждение.
Помните: цель состоит в том, чтобы быть коротким и трудно следовать.
Пример кода, который вдохновил этот вопрос:
public class Default
{
enum FizzBuzz
{
Buzz = 1,
Fizz,
FizzBuzz
}
public static void Main(string[] args)
{
byte[] foo =
Convert.FromBase64String("IAmGMEiCIQySYAiDJBjCIAmGMEiCIQySYA==");
MemoryStream ms = new MemoryStream(foo);
byte[] myByte = new byte[1];
do
{
FizzBuzz fb;
ms.Read(myByte, 0, 1);
for (int i = 0; i < 4; i++)
{
fb = (FizzBuzz)(myByte[0] >> (2 * i)
& (int)FizzBuzz.FizzBuzz);
Console.Out.WriteLine( (((int)fb > 0) ? "" + fb : ""
+ ((ms.Position - 1) * 4 + i + 1)));
}
} while (ms.Position < ms.Length);
}
}
code-golf
obfuscation
restricted-source
mootinator
источник
источник
Ответы:
GolfScript,
7569656059 символовИтак, вы думаете, что GolfScript сам по себе уже запутан, не так ли? Ну, просто для того, чтобы следовать спецификации, я решил, что программа не должна содержать ни «fizz», ни «buzz», ни цифр 3, 5, ни 15. :-)
Да, есть несколько чисел, кратных 5, например, 25, 35, 90, 100 и 6875. Это красная сельдь? Вам решать. ;-)
источник
Javascript 97 символов - вообще никаких цифр
Номера? Кому нужен номер, когда у вас есть Javascript!
Примечание. Существует бесконечный цикл, который предупредит вас о последовательности.
Бонус (666 символов)
(толькоzfor
использовался во всем сценарии),
источник
z
.+!![]
то же самое, что1
и({}+"")[5]
то же, что иc
) и использование записи массива для доступа к методу (например,window['eval'](
то же самоеeval(
).Питон - 78 символов
источник
PostScript, 96 байт
Так запутанно это выглядит как случайный мусор.
Использование:
$ gs -q -dNODISPLAY -dNOPROMPT file.ps
источник
C ++: 886 символов
Я пытался скрыть «шипение» и «жужжание». Вы можете их заметить?
источник
DC (
256255 байт)Здесь я попытался (довольно успешно, если можно так выразиться) скрыть что-либо, кроме букв и
+-[];:=
(которые жизненно важны и их невозможно запутать). Это делает segfault после получения примерно 8482 или около того на моей машине, но это связано со стековыми проблемами, связанными со способом реализации рекурсии. Решение само по себе является правильным. 255 байт, если вы удалите пробелы (включены для удобства чтения)источник
Это было немного сложно внедрить с использованием отступа, поэтому суть:
Рубин, 4312 символов
https://gist.github.com/dzucconi/1f88a6dffa2f145f370f
источник
Brainfuck -
626656Идет от 1 до 255
источник
Brainfuck, 708 персонажей
Описание того, как это работает, доступно в моем вопросе о проверке кода
источник
Haskell -
147142138 символовКод на 19 символов длиннее, чем нужно, но я подумал, что эстетика того стоила! Я считаю, что все три "цели" выполнены.
источник
zZ' is applied to six arguments, but its type
(a0 -> b0 -> c0) -> [a0] -> [b0] -> [c0] 'имеет только три["1","2","3","4","5","6"...]
.bu
,fi
,zz
, иzZ
. Они могут быть сокращены до одной буквы имен.𝔼𝕊𝕄𝕚𝕟, 33 символа / 92 байта (неконкурентный)
Try it here (Firefox only).
Этот язык слишком OP для проблем с ограниченным источником.
источник
Javascript, 469 байт
Это было, наверное, самое веселое, что я когда-либо пробовал.
Попробуй здесь
источник
Рубин - 165 знаков
Это была моя первая попытка кода в гольф. У меня было много веселья. знак равно
источник
Perl 6 (52 байта)
Позвольте мне объяснить здесь. Это худшее нарушение правил, которое я сделал в такой задаче. Я знаю , что вы говорите - там очевидно
Fizz
иBuzz
здесь. Но давайте посмотрим на правила.Это позволяет избежать
3
,5
и15
. Поэтому это верное и действительно краткое решение.источник
Скала, 295 символов
источник
C (
237209 знаков)Хотя я не уверен, что это соответствует стандарту C :)
Это работает, хотя. На Linux с помощью GCC, то есть.
источник
Питон 3 - 338
Это мой первый гольф. Не самый короткий, но довольно уродливый! Ни один из запрещенных чисел или строковых литералов. Фирп, отрыжка!
источник
Питон - 157
Не совсем короткий, но я надеюсь, что читатель оценит чистый функциональный стиль и расширяемость до сколь угодно длинных значений.
источник
К, 155
Я мог бы немного поиграть в гольф, но я бы предпочел, чтобы это было более запутанным.
источник
Python 2 - 54 символа
Python 3 - 56 символов
Если вы не хотите, чтобы FizzBuzz появлялся:
Python 2 - 58 символов
Python 3 - 60 символов
Или как победить GolfScript с помощью Python;)
источник
i=0
означает, чтоwhile
цикл никогда не вводится.i<20
.JavaScript 111 символов - без ключей
a=b=c=0;while(a++<99)document.write((b>1?(b=0,"Fizz"):(b++,""))+(c==4?(c=0,"Buzz"):(c++,""))+(b*c?a:"")+"<br>")
источник
C # - 218 символов
Можно было бы сократить, если бы я ввел другие цифры, например, так: (всего 210 символов)
Решили убрать очевидное слово fizz and buzz и пойти на чуть более запутывание. Второй короче первого, но немного более прямолинеен в том, что происходит в дополнении.
источник
Это не совсем гольф, его около 120 линий.
Я думал, что сделаю что-то, что использует весь потенциал для неопределенного поведения с управлением памятью в C ++.
источник
Рубин - 89 символов
Я не могу взять кредит на этот кусок блеска, но я не мог оставить этот вопрос без моей любимой запутанной реализации :)
Реализация выше была написана Дэвидом Брэди и взята из рубиновой жемчужины fizzbuzz . Вот объяснение из исходного кода:
Рубин - 87 символов
Вот другая версия, которая использует более короткое начальное число, но таблица поиска находится в другом порядке. Вот объяснение из исходного кода:
источник
Python, 1 строка, 376 символов
pep8-E501 игнорируется. Работает только в python3.
источник
Альтернативный Рубин (126 символов)
Коротко и неясно, насколько нам это нравится. 3 и 5 на самом деле там, но не как целочисленные литералы, так что я думаю, что все еще имеет значение.
Обратите внимание, что это самая короткая версия Ruby без букв «Fizz», «Buzz», «FizzBuzz».
источник
Squeak (4.4) Smalltalk 206 байт
Или тот же алгоритм с менее явными сообщениями, тем же количеством символов
Я извиняюсь перед Аланом Кей за то, что я сделал с Smalltalk.
Некоторые из этих хаков переносимы на диалекты Smalltalk, для некоторых потребуется слой совместимости Squeak ...
Обратите внимание, что если вы выполняете в рабочей области, вы можете опустить объявления | fi zz buz | и получить 14 символов.
Если мы можем позволить себе 357 символов (315 с однобуквенными переменными), то лучше избегать тривиального #to: do: loop:
источник
Haskell 226 байт, включая пробелы для разметки;)
«Настоящий» код имеет размер 160 байт и может быть сжат, но в этом случае он теряет шипение.
Запустите его (для хорошего вывода):
Выход:
источник
Perl
Тот, который я сделал в 2009 году. Впрочем, это довольно легко выяснить.
Редактировать: Черт, он использует "Fizz" и "Buzz!" :( Я думал, что я изменил это.
источник
C 216 байт
источник