Помните детскую игру «Утка, утка, гусь» ? Нет? И я нет.
Соревнование
- Напечатайте слово «утка» на отдельных строках неограниченное количество раз.
- Напечатайте слово «гусь».
- Ваша программа заканчивается.
Правила
- Попытайтесь играть в игру с наименьшим количеством байтов.
- Там должна быть хотя бы одна утка.
- В конце списка должен быть ровно один гусь.
- На каждой линии должна быть ровно одна птица. Нет пустых строк.
- Случай выводимых строк не имеет значения.
- Пробел в пределах строки в порядке.
- Ваша программа должна закончиться.
- Ваша программа не должна постоянно производить одинаковое количество уток.
Веселиться!
Обратите внимание: этот вопрос не является дубликатом кратчайшего кода для получения недетерминированного вывода
Причины включают в себя:
- Ассоциация к детской игре
- Определены начальные и конечные требования строки результата. В другом вызове не указано никаких выходных данных.
- Ответы Для другого, не дублирующегося запроса в однозначном количестве байтов. Среднее значение для этого составляет около 30, или там около.
- По количеству совпадений между этим вызовом и этим вопросом любой вопрос о код-гольфе, включая тег «случайный», является дубликатом. Должны ли мы удалить их все?
- Кодовые ответы для этой задачи будут соответствовать другой (нелепо раздутым способом), но ответы на эту задачу не будут соответствовать этой.
Ответы:
Желе , 13 байт
Попробуйте онлайн!
Объяснение:
Более читаемая версия: попробуйте онлайн!
Всегда будет возвращать 1 или 2 утки.
источник
Язык сценариев работы Flashpoint , 48 байт
Всегда печатает одну или две утки.
random 1
возвращает число (с плавающей запятой)select
в диапазоне от 0 до 1. Это число передается в качестве аргумента вместе с массивом[s,""]
. Затем случайное число округляется до ближайшего целого числа (0 или 1), и элемент массива по этому индексу выбирается из массива.Звоните с:
Выход:
Альтернативная версия 56 байт:
источник
World of Warcraft 81 байт
Вот макрос, который вы можете запустить в World of Warcraft.
источник
/run for x=1,random(1,9)do print("Duck")end print("Goose")
Minecraft <1,13,
7254 байтаИзвини, мне пришлось.
Инструкции:
data/functions/minecraft/ddg.mcfunction
/function ddg
в игровой консолиКак это устроено:
Выводит слово «утка» для каждой сущности в мире, затем выводит слово «гусь». Поскольку сущности постоянно появляются и исчезают, количество «утки» не будет постоянным. Я использовал
tellraw
вместо гораздо более короткого,say
потому чтоsay
выводит имя объекта, аtellraw
выводит именно то, что ему говорят.Скриншот
Редактировать: Изменено {"текст": "утка"}, чтобы просто "утка" (и то же самое с "гусь")
источник
JavaScript,
4544423937 байтИмеет возможность вызвать ошибку переполнения.
Проверь это
источник
Октава ,
3833 байтаЭто не самый короткий (это 36 байт), но это мой любимый. Объяснение внизу.
Попробуйте онлайн!
Некоторые короткие варианты:
Это работает в принципе (33 байта), но время онлайн-переводчиков истекло:
Добавление нескольких байтов, чтобы сделать вывод короче, делает его 35 или 36 байтов:
Объяснение:
Я просто объясню последний случайный. Остальные похожи, но используют количество дней с 1 января, 0000 до сегодняшнего дня.
rand
возвращает случайное число на интервале (0, 1) . Таким образом,1/rand
возвращает число больше 1 . Поскольку диапазон1:f
, в которомf
случайное число с плавающей точкой больше 1 , идентичен1:floor(f)
,1:1/rand
создает диапазон 1 .. x , где x> = 1 .Я попытаюсь объяснить это так, как если бы Octave был языком, основанным на стеке.
источник
disp(['duck '+~pwd';'goose'])
? Не уверен, что это «неопределенный» достаточноPerl 5 , 20 байт
Сначала практический 26 байтов:
Утки от 1 до 9 раз, прежде чем выгуливаться.
Попробуйте онлайн!
Но если у вас много памяти и времени, то эта 20-байтовая версия (как предложено Крисом ) тоже работает:
Это также предполагает, что проблема 2038 года будет решена для Perl 5 , в противном случае она будет недействительной в течение 1 секунды 20 лет.
источник
1+$^T%9
на просто$^T
, он все еще работает, и вы сохраните 4 байта.Python 2 ,
3634 байтаПопробуйте онлайн!
Предложение Кевина Круйссена дает нам 34 байта:
источник
((id(id)%5)+1)
чтобы-~(id(id)%5)
избавиться от скобок. Советы по игре в гольф на <все языки> и Советы по игре в гольф на Python может быть интересно прочитать. Приятного пребывания!id(id)
может бытьid(0)
или я что-то упустил?id(0)
пару разных компьютеров, предполагает, что это константа.id([])
. Это должно инициализировать отдельный список при каждом запуске программы, что теоретически должно приводить к разным адресам памяти.Z Shell (+ wget & Netpbm),
168160150148145135120 байтНе самое короткое решение, но мне хотелось как-то изменить эту проблему (вдохновленный решением @ AlexG для этой другой проблемы ).
Этот скрипт генерирует изображение PPM, содержащее от 1 до 8 изображений уток и изображение гуся внизу на стандартном выходе. Он загружает две исходные картинки из Википедии, поэтому для его работы необходим доступ в Интернет.
Пример вывода, преобразованный в JPEG через pnmtojpeg :
источник
R 35 байт
Попробуйте онлайн!
rexp()
производит случайное число из функции экспоненциального убывания.+1
чтобы обеспечить хотя бы одну утку. Все строки после первой содержат начальный пробел (который является разделителем по умолчаниюcat
), но это разрешено.источник
exp(-1)
или около 36,8%.\n
на один байт короче. Если вы посетите "Попробуйте онлайн!" По ссылке видно, что эффект тот же.Баш ,
393837 байтПопробуйте онлайн!
Печатает количество уток, равное количеству цифр в целом числе, равномерно распределенном на [0,32767] (так, чаще всего пять уток (хорошее количество уток)).
-1 байт каждый благодаря @Chris и @sch, указывающим на пары кавычек, которые не вытягивают их вес.
источник
\n
с\\n
.sed s/[0-9]/duck\\n/g<<<$RANDOM\goose
может сбрить один байтsed
не совсем портативный. На некоторых платформах вы можете избежать одиночной обратной косой черты\n
. На других вы не получите новую строку независимо от того, что вы делаете.Pure Bash (без внешних утилит), 25
На основании ответа @ SophiaLechner , это также печатает большое количество уток .
Идея @ OlivierDulac использовать PID оболочки скрипта, сохраненный в
$
параметре, экономит 5 байтов.Попробуйте онлайн .
источник
RANDOM
к$
бритью на 5 байт? И можно также сделать очень длинную цепочку уток:yes duck|head -n $$;echo goose
$$
приемлемо - спасибо!yes duck | head -n $$;echo goose
) в качестве альтернативы (дольше, чем у вас, но за 5 дополнительных символов уйма уйм за уток ^^)Рубин , 30 байтов
Попробуйте онлайн!
Примечание: действительно 31 байт без
\n
читов.источник
Bash + Coreutils,
3627 байтПечатает слишком много уток (от 2 до
cat /proc/sys/kernel/pid_max
), затем один гусь.Спасенные девять байтов благодаря Цифровой Травме и Оливье Дюлаку.
Попробуйте онлайн! (но имейте в виду, что он может иногда обрезаться)
Та же длина, но без
echo
:Попробуйте онлайн!
a
это команда добавленияsed
иq
выхода. Оба работают только на линии$$
, что соответствует PID.источник
head -n $((1+(RANDOM % 5)))
$$
вместо$RANDOM
для моего ответа . Я думаю, что вы могли бы использовать то же самое, чтобы сэкономить 5 байтов. Ох и попробуйтеsed
тоже:yes duck|sed 1$$q;echo goose
yes duck|sed $$q;echo goose
все в порядке - я не думаю, что ваш сценарий когда-либо получит PID <1.PowerShell ,
353028 байтПопробуйте онлайн! (модифицированная версия)
Создает массив из
Get-Random
числа элементов. Это может занять некоторое время. Это добавляет,+1
чтобы гарантировать, что мы получаем по крайней мере одинduck
. Модифицированная версия также включает-ma
флаг ximum,5
так что вы можете видеть, что программа работает, как и ожидалось (модифицированная версия напечатает за 1, 2, 3 или 4duck
с доgoose
).Массив и одиночная
goose
строка остаются в конвейере, и неявноеWrite-Output
дает нам значения, разделенные символом новой строки, бесплатно.Вы не знаете, как мне было трудно не поменять последнюю строчку на "серая утка" ...
источник
0..(random)|%{'duck'};'goose'
выглядит как 29, а также будет генерировать где-то до [int] :: MaxValue (2,1 миллиарда) уток перед гусем. (И0..0
печатает утку)Python 2 , 54 байта
Попробуйте онлайн!
источник
C # (интерактивный компилятор Visual C #) , 55 байт
Попробуйте онлайн!
источник
Брахилог ,
2421 байт-3 байта благодаря Эрику Аутгольферу
Попробуйте онлайн!
На праздновании Языка месяца мой первый пост на брахилоге. Поток управления на этом языке крут.
Как это устроено:
источник
Редактор Geometry Dash World 2.2 - 4 объекта
Объяснение:
Триггер BG является случайным триггером текущего 2.2, поэтому он либо переключает ID группы 1, либо 2.
Первый «УТКА» имеет идентификатор группы 1, что дает 50% шансов быть удаленным или нет (переключенным).
На этом уровне нет объекта с идентификатором группы 2, поэтому есть вероятность 50% отображения 2 «УДАЧ».
Как воспроизвести это:
Первый «УТКА» имеет идентификатор группы 1.
У гуся и второй утки нет идентификатора группы
Внутри случайного триггера.
источник
05AB1E ,
1514 байтовПопробуйте онлайн!
Напечатает 2, 5 или 6 уток, а затем гуся.
-1 байт благодаря @Emigna, использующему 'для одного сжатого слова (утка)
источник
'М
так как утка это одно слово.['ÐœTΩ#].•zíΘ•»
'Ðœ₁Ω.D.•zíΘ•»
APL (Dyalog) , 22 байта
1 байт сохранен благодаря @EriktheOutgolfer
Попробуйте онлайн!
источник
'Goose'⊣⎕←⍣(?9)⊢'Duck'
Сетчатка , 17 байт
Попробуйте онлайн!
Попробуйте онлайн!
Печатает 1 или 2 утки с равной вероятностью.
объяснение
Установите рабочую строку
duck
и напечатайте ее с помощью завершающей строки (\
). Затем он переносится в другой выходной каскад, но?
к нему применяется случайный флаг ( ), поэтому он печатает только с вероятностью 50%.Заменить
duck
сgoose
, которая печатается неявно в конце программы.Вот забавная альтернатива, которая печатает 1 утку с вероятностью 50%, 2 утки с 25%, 3 утки с 12,5% ...:
источник
Vim (скрипт) в Linux,
4643 байта (4946 с:
в начале строки)Выполненный в виде
vim -S filename
или вставленная в работеvim
с:
перед каждой строкой.источник
\d
более[0-9]
. Кроме того, похоже, что vim не требует завершающего перевода строки, так что это может быть 45 байтов :)> <> ,
3122 байтаПопробуйте онлайн!
-9 байт на основе ревизии не дерева
источник
l?!;
и выйти с ошибкой.Befunge 98 ,
383025 байтПопробуйте онлайн!
Duck
вписывается в одну строкуисточник
#
второй строкеwhitespace within a line is fine
так что вы можете вырезать пару цитат (даже если результат выглядит странно)T-SQL ,
70 4443 байта (много уток)Спасибо @Zac Faragher!
Пересмотренная версия,
54 4340 байт (1 или 2 утки)Спасибо @BradC!
Я не могу заставить это работать правильно в SQL Fiddle , но он прекрасно работает в LINQPad и SSMS.
Не уверен, что это известное ограничение SQL Fiddle или я просто делаю что-то не так
источник
select
кprint
и заменить окончательный'duck'select'goose'
с'duck(linebreak)goose'
(с буквальным LineBreak, конечно)while rand()<.5print'duck'print'duck(linebreak)goose'
за 43.while
наif
. Печатает (случайным образом) одну утку или две, что (я считаю) все еще удовлетворяет вызов.Powershell -
3130 байтПредупреждение : Скорее всего, у вас будет много уток.
Random
включает в себя значения от 0 доInt32.MaxValue
так, в зависимости от того, насколько случайным является ваше число, это может быть много крякать.источник
$
в(Random)
. Попробуйте онлайн!Деление ,
2419 байтПопробуйте онлайн!
-5 байт благодаря Мартину Эндеру
источник
Брахилог , 21 байт
Попробуйте онлайн!
Эй, язык месяца неактивен, давай немного разберемся!
источник
Befunge
5735 байт (периметр всего поля -19x317x2 символов). Спасибо karhell за улучшение.Вторая строка помещает утку и новую строку в стек (назад) и выводит ее в виде строки. После этого 75% шансов вернуться к началу и снова напечатать утку, 25% (когда знак вопроса решит понизиться) напечатать гуся и остановиться.
источник
55+"kcud",,,,,#v?(linebreak here) @,,,,,"goose"<
ваш код будет сокращен до 35 байт