В детстве у моего друга был волшебный шар, к которому мы задавали вопросы и видели, какова была судьба этого вопроса.
Вызов
Ваша задача - написать программу (или функцию), которая при запуске (или вызове) выдает (или возвращает) случайный ответ из возможных ответов ниже. (Random быть: each output should have a nonzero chance of occurring but they do not need to meet any other criteria
)
Возможные ответы от Magic 8-ball (без учета регистра):
It is certain
It is decidedly so
Without a doubt
Yes definitely
You may rely on it
As I see it, yes
Most likely
Outlook good
Yep
Signs point to yes
Reply hazy try again
Ask again later
Better not tell you now
Cannot predict now
Concentrate and ask again
Don't count on it
My reply is no
My sources say no
Outlook not so good
Very doubtful
вход
Нет ввода.
Выход
Случайный выбор сверху. Дело не имеет значения.
правила
Стандартные лазейки не допускаются.
Это код-гольф , поэтому выигрывает самый короткий код в байтах для каждого языка!
code-golf
kolmogorov-complexity
random
DevelopingDeveloper
источник
источник
Signs point to yes
Ответы:
SOGL V0.12 , 166 байт
Попробуй здесь!
\ o / каждое слово было в словаре SOGLs!
источник
> <> , 438 байт
Попробуйте онлайн!
Не так интересно, но я думаю, что это первый ответ, где случайность не является равномерной. Я выкладываю все негативные сообщения как наименее вероятные :)
Некоторое объяснение:
Указатель начинает двигаться прямо с первой строки.
x
меняет указатель на случайное кардинальное направление. Если он идет вверх или вниз, он просто сталкивается с другимx
. Если он идет правильно, он отскакивает|
и ударяет то же самоеx
. Если он идет влево, он оборачивается и помещает текст этой строки в стек. Большинство линий затем попадают на ту же дорожку, направление^
которой меняется вверх. Это зацикливаетo
на первой строке, которая выводит стек, пока не будет пустым. Особый случай - этоYep
линия, которая имеет горизонтальный цикл|o<
.источник
Python 2,
369368 байтPython 3, 371 байт
Ранее я использовал
hash
встроеннуюhash(id)%20
функцию index ( ), которая возвращает случайное значение для каждого запуска интерпретатора Python начиная с https://bugs.python.org/issue13703 . Это не случайно для пустой строки, хотя (всегда 0), поэтому нужно использовать что-то еще,id
встроенный!При втором взгляде я мог бы использовать
id
напрямую, но, кажется, всегда выдает четные числа. IIRC,id(object)
в CPython просто возвращает расположение памятиobject
, так что это имеет смысл. Возможно, если бы я использовал Jython или IronPython, я мог бы пропустить деление на 7. В любом случае,hash(id)
vsid(0)//7
равен в Python 3, но может использовать/
оператор для усечения целочисленного деления в Python 2, сохраняя байт.источник
PowerShell , 354 байта
Попробуйте онлайн!
Ho-гул. Принимает все результаты, объединенные вместе с
0
s, затем-split
s0
для создания массива строк. Пропускает тот массив, вGet-Random
который случайным образом выберет один из них. Это осталось на конвейере и вывод неявный.источник
Python 2 , 385 байт
-1 байт благодаря овс.
Попробуйте онлайн!
источник
Applescript, 391
Мне нравится, как в списках AppleScript есть
some item
метод:источник
Утилиты Bash + GNU, 230
Двоичный вывод zopfli не очень хорошо представлен здесь; вместо этого вы можете восстановить скрипт из данных, закодированных в base64:
Обратите внимание, что, как разрешено в этом вопросе, сжатые данные распаковываются во все строчные буквы. Это делает сжатие zopfli немного более эффективным и экономит 16 байтов.
источник
tail +2
не работает для меня, ноsed 1d $0
все равно сохраняет байт Кроме того, поскольку вывод в STDERR разрешен по умолчанию, я не думаю, что вам нужноexit
. Также последние десять байт программы могут быть удалены.R , 360 байт
Попробуйте онлайн!
Не совсем самое элегантное решение. R имеет удобную функцию,
stdin
которая перенаправляет на исходный файл, так что вы можете помещать (небольшие) наборы данных в исходный код, сохраняя байты для разбиения строк или, что еще хуже, создавая сам вектор (все эти кавычки складываются в спешке). Наряду со встроенными для случайной выборки, это дает краткий ответ.источник
Древесный уголь ,
203184 байтаПопробуйте онлайн! Ссылка на подробную версию кода. Изменить: 19 байтов, сохранив все в нижнем регистре. Объяснение:
источник
Сетчатка ,
333331321 байтПопробуйте онлайн! Редактировать: 1 байт сохранен путем сжатия
doubt
и 1 байт, уменьшая все, чтобы я мог сжиматьreply
. Затем сохранил 10 байтов, используя @ Leo's Retina Kolmogorov golfer для текста в нижнем регистре (что совпадает с количеством байтов, которые он сохранил в моем 333-байтовом ответе).источник
Кокос , 380 байт
Кокосовый орех Порт totallyhuman «сек ответ
Попробуйте онлайн!
источник
T-SQL, 393 байта
Функция
STRING_SPLIT
доступна только в SQL 2016 и более поздних версиях.Лучшее, что я мог получить для предыдущих версий, используя
VALUES('It is certain'),('It is decidedly so'),...
было 464 символа.Отформатирован, чтобы вы могли видеть рабочую часть:
NEWID()
генерирует новый псевдослучайный идентификатор GUID, так что это способ сделать псевдослучайную сортировку.источник
Желе , 201 байт
-2 байта благодаря мистеру Xcoder. -1 байт благодаря пользователю 202729.
Попробуйте онлайн!
Блин , компрессия SOGL хороша.
источник
ỴX
в конец кода, чтобы он случайно05AB1E , 171 байт
Попробуйте онлайн!
объяснение
“ ... “
выдвигает строку всех необходимых слов.Некоторые слова взяты прямо из словаря 05ab1e.
Некоторые из них написаны в простой ascii (как
haze
).Некоторые из них объединены словарь и ASCII (как
do
+n't
).Тогда код обработки:
источник
,
и'
добавил.ye
,don
иha
), и -2 при сортировке списка по количеству слов и с помощью дельта сжатия.Рубин,
362361 байтПопробуйте онлайн!
источник
?.
вместо'.'
.?
строковомуPython 3, 386 байт
источник
Perl, 366
источник
As I see it, yes
.split
.print
и сохранить еще 1 байт. Просто поставьте одинарный знак плюс перед списком:print((0..9)[5])
станетprint+(0..9)[5]
.05AB1E ,
208217 байтПопробуйте онлайн!
Довольно базовое решение. Возможные ответы объединяются с символом x (так как его нет в ответах), а затем сжимаются (внутри • ), 'x¡Ω раскол на х и поп случайного выбора.
Спасибо @Emigna за указание на то, что сжатие алфавита не нравится 'или, очень. Исправлено с помощью сжатия сжатой строки с помощью don ' и , да .
источник
,
и'
пробелами, поэтому вывод для этих двух строк неверен.PHP ,
412385337384 байтаПопробуйте онлайн!
Довольно прямолинейное решение. Разделите строку разделителем (в данном случае
1
) и выберите случайный элемент из массива.источник
php
чтобы ваш код компилировался; 2, вы можете заменить'|'
с1
и все|
с1
для -2 байт; 3 следует рассмотреть возможность изменения ссылки на Trying it Online на TIO.run в соответствии с предпочтениями сообщества.PHP 7.2.3-1+ubuntu16.04.1+deb.sury.org+1 (cli) (built: Mar 6 2018 11:18:25) ( NTS )
. Не уверен, что в предыдущих версиях это имеет значение или нет. В любом случае, я редактировал вопрос.<?=
и отображать разнесение напрямую,[rand(0, 19)]
вместо того, чтобы сначала добавить к переменной<?= explode("1", "str1str1str")[rand(0, 19)]
Javascript, 372 байта
-10 байт благодаря Shaggy
Попробуйте онлайн!
источник
OR
вместо ,Math.floor()
чтобы сохранить 7 байт:Math.random()*20|0
.Befunge
1221870 байт (периметр всего поля -33x3630 * 29 символов). Спасибо Джо Кингу за то, что он помог мне удалить завершающие нули и убедил меня изменить рандомизатор.В верхней строке помещается символ «<» и позиция x (28), куда он должен идти в стеке. Затем мы вводим своего рода генератор случайных чисел. Это может быть улучшено, но это то, что я мог бы доставить в кратчайшие сроки ... «Случайное» число смещается, чтобы получить фактическую «случайную» строку для чтения.
После того, как случайное число сгенерировано, мы помещаем символ «<» в эту строку и помещаем буквы в стек, а в нижней строке выводим их снова.
Заметка; Если вы используете интерпретатор, на который я ссылался в заголовке этого поста, вы должны нажимать «Показать» после каждого запуска, потому что добавление символа «<» остается после выполнения.
источник
>:#,_@
чтобы избежать печати нулевых байтов. Да, и добавьте ссылку TIO.Java 8 ,
433,392,380, 379 байтПопробуйте онлайн!
источник
String#split
. Кроме того, вы можете сохранить дополнительные 11 байтов, используя(int)(Math.random()*20)
вместоnew java.util.Random().nextInt(20)
. И точка с запятой не учитывается при подсчете байтов лямбд. Итак, всего: 380 байт .Don't
вместоDon' t
.Красный , 367 байт
Попробуйте онлайн!
Это не кажется действительно случайным в TIO (хотя он прекрасно работает в Red Console), поэтому я добавил в заголовок random / seed.
источник
Excel, 399 байт
Так
CHOOSE(X.Y,<>)
же, какCHOOSE(X,<>)
, нет необходимости вINT
Не много игры в гольф вы можете сделать здесь, хотя ...
источник
Ацето , 345 + 1 = 346 байт (+1 для
-l
флага)Попробуйте онлайн!
Не слишком интересно, но я не могу придумать ничего более короткого в этом языке, ни сжатых строк, ни чего-либо еще.
источник
C - 426 байт
Использует неинициализированную переменную mod 20 для индексации в массив строк, содержащих все возможные выходные данные. Компиляторы жалуются, что stdio.h не включен, но работает нормально. Вероятно, потому, что так или иначе стандартная библиотека связана в любом случае. Повезло мне
источник
Go, 530 байт
Обратите внимание, что на игровой площадке Go из-за того, как работает посев, он всегда дает один и тот же результат. При работе на обычном компьютере все работает как надо.
Я думаю, что можно сэкономить немного больше, но мои знания в Go на этом заканчиваются :)
Отформатированная и тестируемая версия
источник
Excel-VBA,
362341339 байтГде
A1:T1
содержат разные варианты. Читает весь первый ряд листа в массивv
и индексирует случайную точку вдоль первых 19 значений.Удивлен, обнаружив, что индексация массива не требует целочисленных значений
источник
VBA, 358 байт
Функция анонимного непосредственного окна VBE, которая не принимает входные данные и не выводит их в STDOUT.
источник
Java 8, 379 байт
Попробуйте онлайн
источник