Итак, на прошлой неделе я отправил вызов, чтобы сыграть в Duck, Duck, Goose . Это привело к тому, что ряд миннесотцев прокомментировали свои региональные вариации «серая утка» .
Итак, вот правила:
Используя этот список цветов:
Red
Orange
Yellow
Green
Blue
Indigo
Violet
Gray
Напишите программу, которая будет следовать этим правилам:
- Выберите один из этих цветов, добавьте его к слову «утка» и напечатайте результат в новой строке.
- Если цвет не был «серый», повторите шаг 1.
- Если цвет был «Серый», завершите свою программу.
Правила, которые необходимо соблюдать:
- Программа не должна последовательно печатать одинаковое количество строк.
- Это может начаться на «Серая утка», но не следует делать последовательно.
- В каждой строке должна быть ровно одна утка, и пустые строки не выводятся.
- Между цветом и уткой должен быть хотя бы один пробел.
- Пустое пространство до и после значительного выхода не имеет значения.
- Случай вывода не имеет значения.
- Цвета могут повторяться.
- Вывод не обязательно должен содержать каждый цвет каждый раз, но, возможно, ваш код будет выводить каждый цвет.
- Никакие цвета вне вышеуказанного массива не могут быть включены.
- Серый или серый приемлемы в вашем ответе.
- Цвета не должны быть последовательно в одном и том же порядке.
- Стремитесь к самой короткой программе. Наименьшее количество байтов побеждает.
Пример вывода:
Green duck
Orange duck
Yellow duck
Indigo duck
Yellow duck
Gray duck
Спасибо @Mike Hill за первое предупреждение об этом варианте.
Grey
один раз (так что мне не пришлось бы выбирать из всех них и проверять, выбрал ли яGrey
).Ответы:
05AB1E ,
4240 байтСохранено 2 байта благодаря Эрику Аутгольферу
Попробуйте онлайн!
источник
ind
естьëß
!LuaLaTeX,
220211 символовкоманда:
Не самый короткий, но самый модный. Основано на решении @ skillmon
источник
tikzducks
там :):)
6502 машинный код (C64), 124 байта
Интернет демо - Использование:
SYS49152
.Пояснение (комментируется разборка):
источник
sys 49152
.Perl 5 , 79 байт
Попробуйте онлайн!
источник
Такси , 1995 байт
Попробуйте онлайн!
Я думаю, что стоит отметить, что 47% этого кода просто выбирает случайное целое число от 1 до 8.
Кроме того, Такси настолько многословно, что жестко кодировать код
duck\n
после каждого цвета, а не объединять его позже.Вот версия без гольфа:
источник
Java (OpenJDK 9) , 133 байта
Попробуйте онлайн!
Пояснения
источник
Рубин ,
93 91 90 89 87 8685 байтСпасибо Dom Hastings за сохранение 2 байта, Кирилла Л. 1 байт и Асона Тухида 1 байт!
Попробуйте онлайн!
источник
()
код вокруг, и если вы используете$.
вместо того,s
чтобы хранить индекс, вы можетеs
вообще избежать создания (так$.
как он предварительно инициализирован для номера строки!). Вам нужно будет перейтиGrey
в конец списка и проверить$.<7
вместо этого. хотя. Надеюсь, это поможет!s=1
и$.
был идеальным!while s...
и место было нужно. Не видел этой возможности после переходаs
на$.
.Color+" duck"
сохраняет 1 байтЯзык сценариев работы Flashpoint , 133 байта
Звоните с:
Пример вывода:
Сначала я как-то неправильно понял задачу, как будто цель состояла в том, чтобы просто вывести различное количество строк, не обязательно заканчивающихся линией «Серой утки». После этой неверной интерпретации получился немного более интересный фрагмент кода:
источник
pdfTeX,
231220219209207 байтLuaTeX,
216206204 байтаисточник
Брахилог , 68 байт
Попробуйте онлайн!
источник
Рубин ,
8481 байтСпасибо Дому Гастингсу за -3 байта.
Попробуйте онлайн!
источник
$_
, вы можете просто получитьuntil/y/
в конце -3!PHP, 89 байт
Запустите
-nr
или попробуйте онлайн .источник
> <> , 107 байт
Попробуйте онлайн!
источник
Октава ,
114112 байтПопробуйте онлайн!
Существует множество различных опций размером от 112 до 118 байт ... Некоторые инициализируют индекс в начале и уменьшают его случайным числом для каждого цикла и ждут, пока он не станет равным 0 . Другие используют
printf
вместо того,disp
чтобы избегать некоторых скобок и так далее.источник
cat
иhorzcat
. Спасибо, хотя :)PHP ,
1331251111089792 байтаПопробуйте онлайн!
-8 байт благодаря @Olivier Grégoire
-3 байта благодаря @manatwork
-11 байт благодаря @Dom Hastings
источник
Grey
наX
, так как он не используется. Вы получите 6 байтов.for
состоянии «S не нуждаются в круглых скобках:x!=$b=$a[array_rand($a)]
. Кстати,?>
завершает заявление, нет необходимости;
перед ним.x
и используя$b=$a..
в качестве условия и используяrand(0,7)
вместоarray_rand
. Вы можете удалить перевод строки между?>
иGrey duck
тоже. Кроме того, ваша ссылка на TIO все еще содержит полные теги, вы можете добавить их-d short_open_tag=on
к флагам, чтобы это работало! :)Утилиты Bash + GNU, 72
Попробуйте онлайн .
источник
Баш, 96 байт
Благодаря @DigitalTrauma.
источник
>0
, однако, я ушел${#a}
вместо8
.${#a}
вместо8
? Это код-гольф - нет необходимости придавать вашему коду универсальность, чтобы его можно было модифицировать под разное количество цветов. Все, что вам нужно сделать, это соответствовать спецификации в наименьшем количестве байтов.JavaScript, 104 байта
Попробуйте онлайн
источник
new Date
для ГСЧ здесь.AWK , 114 байт
Попробуйте онлайн!
объяснение
Обратите внимание, что это требует «некоторого» ввода. Ввод может быть пустым. Чтобы избежать необходимости ввода, добавьте в первую строку
BEGIN
источник
PowerShell , 94 байта
Попробуйте онлайн!
Петли пока
$r
не равныGrey
. Внутри цикла,-split
в виде литеральной строки на новых строках, выбираетRandom
одну из них, затем печатает цвет плюсDuck
(технически, он остается на конвейере, и очистка конвейера на следующей итерации цикла вызывает aWrite-Output
). Обратите внимание, что теоретически возможно,Grey
чтобы никогда не было выбрано, и цикл продолжался бесконечно, но это почти никогда (в смысле вероятности) не произойдет.источник
R 101 байт
Попробуйте онлайн!
Сильно вдохновлен ответом @ user2390246 на соответствующий вызов. Нам нужны два источника случайности: изменение порядка цветов и выборка не-серых цветов утки.
sample
Будет принимать случайную выборку случайного размера заданного по экспоненциальному распределению с параметром скорости1
, усеченной до целого числа. Используя экспоненциальную distrubtion , к сожалению , означает , что существует вероятность того ,exp(-8)
или вокруг ,0.0003354
что образец будет по крайней мере8
, таким образом , мы должны образцаreplace=T
.источник
\n
его фактическим символом новой строки для 1colors()[c(26,254,498,552,640,652)]
вместо этогоscan(..)
должно быть около 83colors()
! Это несколько хороших гольфов, которые, я думаю, вы должны опубликовать в качестве собственного ответа, поскольку это менее элегантный способ получения цветов.Python 2 ,
138133120117116 байтовПопробуйте онлайн!
Гораздо лучше с некоторыми идеями от @EriktheOutgolfer. Спасибо!
-3 больше благодаря @ovs
-1 с благодарностью @Rod за новый классный трюк узнал :-)
источник
Сетчатка ,
6968 байтСпасибо Лео за сохранение 1 байта.
Попробуйте онлайн!
объяснение
.
подавляет неявный вывод в конце программы (в противном случае мы получили бы две серые утки)./y/^{
оборачивает всю программу в цикл, который продолжается до тех пор, пока рабочая строка не содержитy
. Остальная часть этой строки устанавливает рабочую строку в список всех цветов, разделенных переводом строки.Мы извлекаем случайную строку из рабочей строки (и, следовательно, случайный цвет). И мы печатаем результат с трейлингом
duck
и переводом строки.источник
MATL ,
6864 байтаПопробуйте онлайн!
объяснение
источник
Python 3,
130,128,127,126, 125 байтов-1 от @ElPedro!
-1 от меня
-1 от @Bubbler!
Попробуйте онлайн!
источник
d!=c[0]
сохранить байт?print(d,'duck')
сохранить байт. Разделителем по умолчанию является пробел.Java (JDK 10) , 287 байт
Попробуйте онлайн!
Мой самый первый Codegolf! Очевидно, что он не конкурентоспособен, просто счастлив, что выучил достаточно Java (в настоящее время в CS200), чтобы иметь возможность участвовать.
источник
Котлин , 122 байта
Попробуйте онлайн!
источник
MS-SQL, 158 байт
Основано в основном на превосходном ответе Развана , но с использованием
STRING_SPLIT
функции, специфичной для MS-SQL 2016 и более поздних версий. Также используетGOTO
вместоWHILE
цикла.отформатирован:
источник
T-SQL ,
195185184 байтаисточник
BEGIN
.Python 2 , 98 байт
Смотри ма нет импорта!
(Печатает лишние пробелы между цветами и
duck
как разрешено в вопросе)Попробуйте онлайн!
Довольно плохой генератор псевдослучайных чисел, засеянный с идентификатором объекта 0 (но, похоже, он соответствует спецификации), который многократно дает целое число
x
, в [0,7], который используется для нарезки списка символов из этого индекса в шаги 8, чтобы получить имя цвета, которое печатается вместе сduck
кортежем, заставляя пробел между ними. Когда значениеx
становится равным нулюGrey
, печатается и оценка следующего ввода в ошибки генератора случайных чисел на основе модуля, пытающиеся разделить на ноль (v=1/x,v
пытается создать новый кортеж с первым элементом1/x
=1/0
)Точно так же 100 в Python 3 с
источник