Powerball - американская лотерея, которая недавно привлекла внимание, потому что текущий джекпот (по состоянию на 11 января 2016 года) является крупнейшим лотерейным призом в истории , около 1,5 миллиардов долларов США .
Игроки в Powerball выбирают 5 различных чисел из 69 пронумерованных белых шаров и 1 одно число «Powerball» из 26 пронумерованных красных шаров. Они выигрывают джекпот, если их выбор из пяти белых шаров совпадает с выбранным в любом порядке, и если они выбрали правильное число «Powerball».
Таким образом, шансы на выигрыш джекпота равны 1 в (69 choose 5)*(26 choose 1)
или ((69*68*67*66*65)/(5*4*3*2*1))*26
, что составляет 1 в 292,201,338.
Никто не выиграл джекпот в самом последнем розыгрыше 9 января 2016 года, но, возможно, кто-то выиграет следующий розыгрыш 13 января 2016 года, 22:59 по восточному времени.
Вызов
Напишите программу или функцию, которая имитирует рисунок Powerball, не требуя ввода, а выводя 5 различных случайных чисел от 1 до 69 включительно, а затем одно случайное число «Powerball» от 1 до 26 включительно (которое может быть повторением одного из 5 начальные номера).
Число «Powerball» всегда должно быть последним числом в выходных данных, но в противном случае порядок первых 5 чисел не имеет значения.
6 чисел должны быть выведены в десятичном виде , либо через пробел, либо через новую строку, с необязательным одиночным завершающим переводом строки. Запятые, скобки и другие символы не допускаются в выводе.
Таким образом, это будут действительные результаты (с использованием чисел из последнего рисунка ):
32 16 19 57 34 13
32
16
19
57
34
13
Все 292201338 возможных результатов должны быть возможны с одинаковой вероятностью. Вы можете использовать встроенные генераторы псевдослучайных чисел и предполагать, что они соответствуют этому стандарту.
Вот нерегламентированная эталонная реализация, которая работает в Python 2 или 3:
import random
print(' '.join(map(str, random.sample(range(1,70), 5) + [random.randint(1, 26)])))
Самый короткий код в байтах побеждает.
Обратите внимание, что я не связан с Powerball и не советую вам играть. Но если вы выиграете что-нибудь из чисел, сгенерированных одной из программ здесь, я уверен, что мы хотели бы услышать об этом. : D
5! = 5*4*3*2*1
способы обустроить 5 вещей, так что учтите это.Ответы:
Dyalog APL, 10 байт
Диадический
?
являются ⍺ различных случайными чисел в [1, ⍵] и монадический?
является единым случайным числом.Попробуй это здесь .
источник
1+(5?69),?26
.CJam, 16 байтов
Попробуйте онлайн.
источник
:)
все становится немного больше, например, как улыбка незнакомца может сделать вас немного счастливее.:)
если бы выиграл в лотерею. +1MATL , 10 байт
Использует текущую версию (9.2.0) языка / компилятора.
пример
С компилятором, запущенным на Matlab:
С компилятором, запущенным в Octave:
Первые пять чисел разделены пробелом, а не переводом строки. Это связано с тем, что основная
randsample
функция Octave ведет себя не так, как в Matlab (и была исправлена в новой версии компилятора). Во всяком случае, новая строка и пробел разрешены вызовом.Изменить (4 апреля 2016 г.) : попробуйте онлайн!
объяснение
Смотрите соответствующие функции Matlab:
randsample
иrandi
.источник
Руби,
3332В Ruby есть встроенный метод sample, который выбирает случайные значения из массива без замены. Спасибо QPaysTaxes за указание, что мне не нужны парены.
источник
p
в какой-то момент, что фактически нарушает синтаксический анализ этой версии.R,
3029 байтsample
Функция выполняет простую случайную выборку из входных данных. Если в качестве первого аргумента указано одно целое число, выборка выполняется от 1 до аргумента. Размер выборки является вторым аргументом. Мы используем опцию выборки по умолчанию без замены.Попробуйте онлайн
источник
c
вместоcat
c
, это был бы только фрагмент, который не разрешен по умолчанию.Python 3.5, 63 байта
Это в основном эталонная реализация гольфа. Обратите внимание, что 3.5 необходимо указывать на не последний аргумент.
источник
Октава,
3532 байтаХобби Кельвина подтвердили, что
ans =
это нормально при использовании функции, поэтому:Он имеет сходство с Memming в ответ , но он использует прямую индексацию , что это возможно только в октаве, и это
-7 байт короче, так что я решил, что стоит размещения в любом случае.randperm(69)
создает список со случайной перестановкой чисел 1-69. Можно напрямую проиндексировать список (это невозможно в MATLAB), чтобы получить только первые 5 чисел, как это(1;5)
. За этим следует список,randi(26)
который возвращает одно число от 1 до 26.Старый:
Полученный список отображается с помощью
disp
.источник
PowerShell v2 +,
3127 байтТребуется версия 2 или новее, так как
Get-Random
не было в v1 (Get-
подразумевается и-Maximum
позиционно). Выход разделен новой строкой.Ungolfed:
источник
Random -ma 27
может быть так же,Random 27
как-Maximum
соответствует позиции 0Shell + coreutils, 31
источник
МАТЛАБ, 40
Я знаю. Это скучное решение.
источник
PHP, 69 байт
Довольно прямой ответ. Сгенерируйте 1-69
range
, затем используйте,array_rand
чтобы получить 5 случайных ключей из массива, и вывести$k+1
значение (индексированное 0), а затем вывести случайное int из 1-26.источник
C #,
153 байта140 байтовБлагодаря "Маккей":
153 байта решения:
Простое решение с использованием Linq и тасование с использованием GUID.
источник
string.Join(" ", ....take(5).Concat(....Take(1)))
Pyth -
131413 байтВозможна крупная игра в гольф, это был просто FGITW.
Попробуйте это онлайн здесь .
источник
<... 5
To>5...
. Финальный кодjb>5.SS69hO26
Брахилог , 40 байт
объяснение
Brachylog не имеет встроенный случайные числа (пока ...) , поэтому мы должны использовать предикат SWI-Prolog для этого:
random/1
. Мы можем ввести код SWI-Prolog в Brachylog, используя обратные кавычки.источник
JavaScript (ES6),
1068684 байтаПоскольку мы не можем однозначно выбирать случайные числа в JavaScript, это работает путем создания набора (который содержит только уникальные значения), рекурсивного добавления случайных чисел (1-69), пока не будет 5 уникальных, добавление случайного числа (1-26), затем присоединиться и вернуть все это.
источник
Эликсир , 83 байта
При
IO.puts
использовании массива целых чисел, Elixir будет интерпретировать целые числа как символы и, следовательно, выводить некоторую строку вместо нужных чисел powerball. Итак, мы должны уменьшить целочисленный массив до строки.источник
Рубин,
474339 байтЯ думаю, что это может быть больше в гольфе, но я поработаю над этим, как только закончу, восхищаясь тем, как хорош этот код, учитывая.
Он работает почти так же, как и все остальное: возьмите массив чисел от 1 до 69, перемешайте их, получите первые пять, выведите их, а затем выведите случайное число от 1 до 26.
Я прошел несколько итераций, прежде чем опубликовать это:
(где
<newline>
заменяется фактическим переводом строки)РЕДАКТИРОВАТЬ: Ой, не видел ранее существовавший ответ Ruby. Я наткнулся на
sample
и прокручивал вниз, чтобы отредактировать свой ответ, но потом я увидел его ... Ну, хорошо. Мой итоговый результат - 43 байта, но я немного поиграю в гольф, чтобы посмотреть, насколько хорошо я справлюсь.источник
Mathematica, 64 байта
Довольно просто.
источник
StringJoin
=""<>##&
Perl 5, 59 байт
Это подпрограмма; используйте это как:
источник
-E
вместо-M5.010 -e
-1+2*int rand 2
сrand>.5?1:-1
?;say$==
на,$==
-M5.010
любом случае, это не считается, поэтому я не стал сокращать его. Я думаю, что попробовал запятую вместо другой,say
и это не сработало. Но новое правило сортировки - хорошая идея, спасибо. Я протестирую его, когда у меня будет возможность, и отредактирую его.PHP, 65 байт
Благодаря другому ответу PHP на этой странице. Я написал программу самостоятельно, и это оказалось точно таким же ответом, что и Samsquanch, что заставило меня сделать еще один шаг, чтобы сэкономить несколько байтов.
Если кто-нибудь может найти способ добавить один массив к другому здесь, это меньше, чем 5 байтов, которые требуются мне, чтобы присоединиться к числу powerball после, я был бы очень признателен, потому что это сводит меня с ума! Лучшее, что я мог придумать, было бы после
array_rand
и до тогоjoin
, чтобы иметь что-то вроде заявления+[5=>rand()%25]
, но это лишний байт по сравнению с конкатенацией после.Запустите его через командную строку. Образец:
Выход:
источник
PARI / GP,
7170 байтОн генерирует случайную перестановку [1..69], затем принимает первые 5.
К сожалению, это неэффективный пользователь случайности, потребляющий в среднем 87 байтов энтропии по сравнению с теоретико-информационным идеалом в 3,5. Это происходит главным образом потому, что генерируется вся перестановка, а не только первые 5 членов, а также потому, что заказы упорядочены (потеря lg 5! = ~ 7 бит). Кроме того,
random
используется стратегия отклонения, а не арифметическое кодирование. (Это потому, что PARI использует Xorgen Брента, который достаточно быстр, чтобы издержки от более сложных стратегий редко стоили.)Есть три «очевидных» изменения, которые не работают в текущей (2.8.0) версии gp.
random
иprint
может храниться в переменных иprint
вызываться напрямую, а не через анонимную->
функцию:Вместе они сэкономят 9 байтов. К сожалению, обе функции действительны без аргументов и, следовательно, оцениваются сразу, а не сохраняются, поэтому они не вычисляют желаемый результат.
источник
Машинный код Intel x86, 85 байт
Ну, иногда он печатает одни и те же цифры, просто попробуйте еще раз, нажав клавишу.
Компилировать с:
Убедитесь, что выровняли его по размеру дискеты (добавьте нули в конце), чтобы подключить его к виртуальной машине (для этого не требуется операционная система).
Разборка:
источник
C, 142 байта
Не очень доволен этим решением, так как кажется, что должно быть больше возможностей для игры в гольф. Я посмотрю на это снова завтра свежими глазами. Попробуй это здесь .
источник
Swift, 165 байт
Можно быстро запустить на игровой площадке Xcode.
РЕДАКТИРОВАТЬ: Текущая проблема здесь заключается в том, что теоретически возможно, чтобы это продолжалось вечно в цикле while, если arc4random_uniform каким-то образом продолжает тянуть одно и то же число. Вероятность того, что это произойдет, в течение любого значительного промежутка времени, вероятно, лучше, чем вероятность выиграть Пауэрбол.
источник
Perl 6 ,
3231 байтПревратив его в функцию, которая возвращает строку, я могу удалить 4 байта (
put␠
), добавив только 3 ({~
}
)Использование:
Если бы функции было разрешено возвращать список значений, следующее также сработало бы.
(В противном случае это будет так же, как указано выше, но внутри
{ }
)функция, которая возвращает один плоский список
функция, которая возвращает список с первыми 5 числами в подсписке
функция, которая возвращает список с первыми 5 в подсписке и Powerball в другом подсписке
источник
Серьезно, 35 байтов
Моя первая попытка ответа на языке игры в гольф.
Чувствуется дольше, чем должно быть.
Повторение, вероятно, может быть удалено с помощью W , но, похоже, он поврежден в онлайн-интерпретаторе, и я не хочу публиковать непроверенный код.
Очень плохо { не работает в списках.
Код:
Шестнадцатеричный дамп:
Объяснение:
Онлайн переводчик
источник
Луа, 96 байт
Простое решение, использующее таблицу как набор, помещая значение в нее,
table[value]=truthy/falsy
чтобы иметь возможность проверить, находятся ли они внутри нее или нет.Я теряю 5 байтов, потому что мне нужно установить первое значение в моей таблице, иначе я не буду входить в
while(o[n])
цикл и просто выведуn
перед использованием случайной функции. Поскольку Lua использует таблицы, основанные на 1, я также должен заставить его поместить первое значение в ячейку[0]
, иначе я не смог бы вывести a1
.Ungolfed:
источник
C ++, 252 байта
Golfed:
Ungolfed:
источник