Возможно, некоторые из вас уже знают эту игру: у вас есть коллекция желейных бобов разных цветов. Для каждого цвета боб может иметь разные вкусы, некоторые из них хорошие, а некоторые плохие, и вы не можете отличить их друг от друга. Вы должны выбрать боб определенного цвета и молиться, чтобы у вас был хороший.
Итак, напишите самую короткую программу, которая получает цвет по вашему выбору (из заданного списка) и случайным образом возвращает выбранный вкус. Вкус должен быть выбран из встроенного списка. Возможный список входов и выходов:
Input Output choices [only one from the list]
--------------------------------------------------
green lawn clippings, lime, mucus, pear
yellow rotten eggs, buttered popcorn
blue toothpaste, blue berry
orange vomit, peach
brown canned dog food, chocolate
white stinky socks, tutti-frutti, baby diapers, coconut
Правила:
- Вы можете предположить, что ввод будет всегда цветом из вариантов ввода.
- Регистр и завершающие пробелы и / или переводы строк не имеют значения.
- Вывод должен быть равномерно случайным: успешное выполнение программы должно давать разные результаты, и шансы получить данный вкус должны быть одинаковыми для всех вкусов в списке.
Это код-гольф , поэтому победит самая короткая программа!
code-golf
random
game
compression
Чарли
источник
источник
blueberry
не такblue berry
.Ответы:
C #,
418313305271 байтСлишком долго даже для C #, но я не могу понять, как это сделать короче.
Полная / Отформатированная версия:
источник
05AB1E , 126 байт
Объяснение:
Если кому-то интересно, вот несжатая строка:
Я, вероятно, могу сжать это больше, используя некоторые хитрые уловки и словарь.
Попробуйте онлайн!
источник
"eougwt"
до.•4Õ!Õ•
-1.eougwt
и.•4Õ!Õ•
, а не"eougwt"
и.•4Õ!Õ•
. К сожалению.JavaScript (ES6), 235 байт
Мне нужно выяснить, как сжимать строки в JS!
Если это не «достаточно случайно» для ваших вкусов, добавьте 7 байтов, заменив
new Date
наMath.random()
.Попробуй
источник
eluaoi
, я подумал об этом сам и подумал: «Оооо, смотри, как я умен», а потом увидел, как ты побил меня!new Date%a.length
не "равномерно случайным".eluaoi
примерно в одно и то же время: PMath.random
вместо этого.Желе ,
101100 байтПопробуйте онлайн!
источник
Japt ,
148146 байтПопробуйте онлайн!
Сохранено 6 байтов благодаря Shaggy и ETHproductions
источник
R
вместо того,0
чтобы сохранить байт. Кроме того, вы можете сжатьeluaoi
, играя с заказом.qR
который такой же длины?®
.eaiou
в качестве строки, вы можете сжать ее до трех байтов (могут быть другие трехбайтовые комбинации).Python 2 ,
301258 байтПопробуйте онлайн!
Сохранено очень много байтов путем сокращения ключей для использования 2-го индекса ввода, как предложено @TheLethalCoder, и путем разделения на запятые вместо использования прямого списка.
источник
eluaoi
в качестве словарных ключей и доступ к нему с индексом 2 строки должно сэкономить вам байты.Желе ,
9594 байтаМонадическая ссылка, принимающая список (строчных) символов и возвращающая список символов.
Попробуйте онлайн! или съесть пакет из 48 .
Как?
Восемьдесят девять из девяноста четырех байтов представляют собой сжатый список из восьми строк. Две из них являются пустыми строками, а остальные шесть представляют собой разделенные символом новой строки ароматы для одного из цветов:
Остальная часть программы анализирует входные данные, чтобы решить, какой список использовать, разбивает выбранный список на новые строки и выбирает случайный элемент:
источник
Java, 288 байт
Попробуйте сами!
Может быть в гольф с помощью
char[]
.Однако случайная часть не может быть «равномерно распределена» без явного использования
Random.nextInt(int)
. Даже(int)(Math.random()*a.length)
не распределяется равномерно.источник
new java.util.Random().nextInt(a.length)
вместо(int)(Math.random()*a.length)
..Math.random()
предоставляет число, которое имеет некоторые особенности (степень0
и знак0
и 52 случайных бита). Так ты на самом деле используете энтропию 52 без какой-либо дополнительной проверки. Если длина3
, например,2^52
не делится на 3. Таким образом, она не распределяется случайным образом. Вот почемуRandom.nextInt(int)
(фактический java-файл, а не javadoc, в строке 394) имеет механизм цикла, чтобы убедиться, что число находится среди честных чисел. Если мне не сказали "это достаточно хорошо", толькоRandom.nextInt(n)
честно.Math.random()
не может быть использовано, когда2^53
не может быть равномерно разделено на число, на которое вы умножаете его? Поэтому, если вам нужно случайное число от 0 до 3,(int)(Math.random()*4)
допустимо равномерно разделить его (четыре раза2251799813685248
), но когда вы используете*3
вместо этого, это не так (то есть три раза3002399751580330.666...
), потому что приведение его к целым этажам, создание некоторых частей 1 меньше, чем другие. А так как длина в вашем случае переменная, она также распределена неравномерно (с возможностью длины 3).Math.random()
, если кто-то говорит что-то «равномерно» или «довольно» случайный, используйтеjava.util.Random
. Вот почему я жаловался на ответ Шегги.> <> , 311 байт
Попробуйте онлайн или посмотрите на рыбной площадке
Благодаря SK уютные вязаные вещи и Doof God Dennac!
Объяснение: Первая задача рыбы - выяснить, что такое входное слово, зигзагообразно вниз по левой стороне. Рыба может читать только одно письмо за раз, и для этого требуется меньше байтов. Сначала рыба читает первую букву и спрашивает, если это
"y"
- если это так, слово «желтый», в противном случае оно движется дальше. Затем он читает вторую букву - если это"l"
слово «синий», в противном случае оно движется дальше; и так далее. Если он читает пять букв, и они не совпадают"y"
( Y ellow),"l"
(b L ue),"o"
(br O wn),"n"
(ora N ge) или"n"
(gree N ) соответственно, то цвет должен быть «белым».Далее идет случайный бит. Для цветов с двумя возможными выходами это довольно просто - для желтого, например, рыба вводит следующий код в
x
:В
x
устанавливает направление случайным образом : если это вверх или влево, рыба завихрения вокруг зеркала обратно кx
, но правильно ли это или вниз, он читает «тухлые яйца» или «маслом попкорн» (в обратном порядке ).Четырехсторонние расщепления (для белого и зеленого) более сложны, но они следуют одному и тому же общему принципу - первое:
Обратите внимание, что если рыба подплывает с первого раза,
x
она проходит через восемь"
секунд, что включает и выключает режим струн четыре раза, затем ударяется о зеркало и плавает обратно вниз.Чтобы добраться до последнего четырехстороннего раскола, рыба должна проплыть через
e
иr
из «извести» и «груша», которые добавляютe = 14
в стек (и обратной его), поэтому мы должны сначала удалить , что с~
. Одна из четырех веток также включает плавание через ненужную строку"> "
, которую мы удаляем~~
.Наконец, после добавления одного из компонентов бобов в стек, рыба достигает потока
v
s в крайнем левом столбце, который отправляет ее вкоторый печатает символы (используя один из
o
«кокос»), пока не останется ни одного.источник
T-SQL,
432 423 375 367 336295 байтНаконец, операция на основе множеств !!
(Разрывы строк предназначены для отображения и не учитываются в целом.)
Ввод осуществляется через колонку с в имени таблицы т , согласно нашим правилам .
Я просто соединяю нашу входную таблицу с таблицей, полной допустимых комбинаций цвет / вкус, а затем выбираю случайную строку.
ORDER BY NEWID()
это распространенный способ рандомизации порядка сортировки в SQL . В зависимости от вашей строгости, вы можете не считать его абсолютно равномерно случайным, но оно должно быть достаточно случайным для выбора желейных бобов.РЕДАКТИРОВАТЬ 1: Сохранение 9 байтов, используя только 3-й символ цвета, вдохновленный другими ответами.
РЕДАКТИРОВАТЬ 2: сохранить 48 байтов, поместив флаг цвета и аромат в одном столбце. Много символов, сохраненных в INSERT.
РЕДАКТИРОВАТЬ 3: Сохранено 8 байтов путем замены
INSERT INTO b(o)
наINSERT b
РЕДАКТИРОВАТЬ 4: Сэкономить еще 31 байт, присоединившись непосредственно к виртуальной таблице
VALUES
и, следовательно, исключивCREATE TABLE
иINSERT
.РЕДАКТИРОВАТЬ 5: Сохранить 41 байт путем обновления до функции SQL 2016-only
STRING_SPLIT
, которая позволяет исключить переменное и динамическое выполнение SQL.источник
PHP , 242 байта
Попробуйте онлайн!
источник
Mathematica, 247 байтов
Форма ввода
источник
eluaoi
хитрость? Я не знаю, математика, так что просто идея.Clojure, 231 байт
Та же идея, что и у других, я могу просто сэкономить место по сравнению с другими языками. Сжатие строк кажется потерянным делом.
источник