A Powerball é uma loteria americana que ganhou atenção recentemente porque o jackpot atual (em 11 de janeiro de 2016) é o maior prêmio de loteria da história , com cerca de US $ 1,5 bilhão ( USD ).
Jogadores de Powerball escolhem 5 números distintos entre 69 bolas brancas numeradas e 1 número "Powerball" de 26 bolas vermelhas numeradas. Eles ganham o jackpot se suas cinco escolhas de bola branca corresponderem ao que foi sorteado em qualquer ordem e se escolherem o número correto de "Powerball".
Portanto, as chances de ganhar o jackpot são de 1 em (69 choose 5)*(26 choose 1)
ou ((69*68*67*66*65)/(5*4*3*2*1))*26
, que é 1 em 292,201.338
Ninguém ganhou o jackpot no sorteio mais recente em 9 de janeiro de 2016, mas talvez alguém ganhe o próximo sorteio em 13 de janeiro de 2016, às 22:59 ET.
Desafio
Escreva um programa ou função que simule um desenho da Powerball, sem nenhuma entrada, mas produzindo 5 números aleatórios distintos de 1 a 69 inclusive, e depois um número aleatório de "Powerball" de 1 a 26 inclusive (que pode ser uma repetição de um dos 5 números iniciais).
O número "Powerball" deve sempre ser o último número na saída, mas, caso contrário, a ordem dos 5 primeiros números não importa.
Os 6 números devem ser impressos em decimal , separados por espaço ou por nova linha, com uma nova linha à direita opcional. Vírgulas, colchetes e outros caracteres não são permitidos na saída.
Portanto, essas seriam saídas válidas (usando os números do último desenho ):
32 16 19 57 34 13
32
16
19
57
34
13
Todos os 292201338 possíveis resultados devem ser possíveis com probabilidade uniforme. Você pode usar geradores de números pseudo-aleatórios incorporados e assumir que eles atendem a esse padrão.
Aqui está uma implementação de referência não destruída que funciona no Python 2 ou 3:
import random
print(' '.join(map(str, random.sample(range(1,70), 5) + [random.randint(1, 26)])))
O código mais curto em bytes vence.
Note que eu não tenho afiliação com a Powerball e realmente não sugiro que você jogue. Mas se você ganhar alguma coisa com números gerados por um dos programas aqui, tenho certeza de que gostaríamos de ouvir sobre isso. : D
5! = 5*4*3*2*1
maneiras de organizar cinco coisas, então você leva isso em consideração.Respostas:
Dyalog APL, 10 bytes
Diádico
?
é ⍺ números aleatórios distintas em [1, ⍵], e monadic?
é um único número aleatório.Experimente aqui .
fonte
1+(5?69),?26
.CJam, 16 bytes
Experimente online.
fonte
:)
as coisas ficam um pouco maiores, como o sorriso de um estranho pode torná-lo um pouco mais feliz.:)
se ganhasse na loteria. +1MATL , 10 bytes
Usa a versão atual (9.2.0) do idioma / compilador.
Exemplo
Com o compilador executado no Matlab:
Com o compilador executado no Octave:
Os cinco primeiros números são separados por espaço, não por nova linha. Isso ocorre porque a
randsample
função subjacente do Octave se comporta de maneira diferente da do Matlab (e foi corrigida em uma nova versão do compilador). De qualquer forma, nova linha e espaço são permitidos pelo desafio.Editar (4 de abril de 2016) : Experimente online!
Explicação
Veja as funções relevantes do Matlab:
randsample
erandi
.fonte
Ruby,
3332Por acaso, Ruby possui um método interno, amostra, que seleciona valores aleatórios de uma matriz sem substituição. Agradecemos a QPaysTaxes por apontar que não preciso dos parâmetros.
fonte
p
em algum momento, o que realmente quebra a análise de sintaxe para essa versão.R,
3029 bytesA
sample
função executa amostragem aleatória simples a partir da entrada. Se um único inteiro é dado como o primeiro argumento, a amostragem é feita de 1 ao argumento. O tamanho da amostra é o segundo argumento. Estamos empregando a opção padrão de amostragem sem substituição.Experimente online
fonte
c
em vez decat
c
, isso seria apenas um trecho, o que não é permitido por padrão.Python 3.5, 63 bytes
É basicamente a implementação de referência jogada. Observe que 3.5 é necessário para dividir em um argumento não-último.
fonte
Oitava,
3532 bytesO Calvin's Hobbies confirmou que
ans =
estava tudo bem ao usar uma função, então:Tem semelhanças com a resposta de Memming , mas usa indexação direta que só é possível no Octave e é
57 bytes mais curta, então achei que valia a pena postar de qualquer maneira.randperm(69)
cria uma lista com uma permutação aleatória dos números 1-69. É possível indexar diretamente a lista (não é possível no MATLAB) para obter apenas os 5 primeiros números como este(1;5)
. A lista é seguida pelorandi(26)
que retorna um número único entre 1 e 26.Velho:
A lista resultante é exibida usando
disp
.fonte
PowerShell v2 +,
3127 bytesRequer a versão 2 ou mais recente, como
Get-Random
não estava presente na v1 (Get-
está implícita e-Maximum
é posicional). A saída é separada por nova linha.Ungolfed:
fonte
Random -ma 27
pode ser exatamente oRandom 27
que-Maximum
corresponde à posição 0Shell + coreutils, 31
fonte
MATLAB, 40
Eu sei. É a solução chata.
fonte
PHP, 69 bytes
Resposta bastante direta. Gere um 1-69
range
, usearray_rand
para pegar 5 chaves aleatórias da matriz e ecoar o$k+1
valor (indexado 0) e, em seguida, ecoar um int aleatório de 1-26.fonte
C #,
153 bytes140 bytesGraças a "McKay":
Solução de 153 bytes:
Solução simples usando Linq e embaralhamento usando GUID.
fonte
string.Join(" ", ....take(5).Concat(....Take(1)))
Pitão -
131413 bytesMajor golfe possível, este era apenas um FGITW.
Experimente online aqui .
fonte
<... 5
para>5...
. Código finaljb>5.SS69hO26
Braquilog , 40 bytes
Explicação
Não Brachylog não tem um built-in para números aleatórios (ainda ...) por isso temos de usar um predicado SWI-Prolog para que:
random/1
. Podemos inserir o código SWI-Prolog no Brachylog usando aspas.fonte
JavaScript (ES6),
1068684 bytesComo não podemos amostrar aleatoriamente randoms em JavaScript, isso funciona criando um conjunto (que contém apenas valores únicos), adicionando recursivamente randoms (1-69) até que existam 5 únicos, acrescentando um número aleatório (1-26), depois juntar e devolver tudo.
fonte
Elixir , 83 bytes
Ao apenas
IO.puts
inserir uma matriz de números inteiros, o Elixir interpretará os números inteiros como caracteres e, portanto, emitirá alguma sequência em vez dos números desejados de powerball. Portanto, temos que reduzir a matriz inteira para uma string.fonte
Ruby,
474339 bytesEu acho que pode ser mais jogado, mas vou trabalhar nisso quando terminar de admirar o quão bonito esse código parece, considerando.
Funciona da mesma maneira que todo o resto: pegue uma matriz dos números de 1 a 69, embaralhe-os, obtenha os cinco primeiros, produza-os e depois produza um número aleatório entre 1 e 26.
Passei por algumas iterações antes de postar isso:
(Onde
<newline>
é substituído por uma nova linha real)EDIT: Opa, não vi a resposta Ruby preexistente. Eu tropecei
sample
e estava rolando para baixo para editar minha resposta, mas então eu vi ... Oh, bem. Minha pontuação final é de 43 bytes, mas continuarei jogando um pouco para ver como posso me sair bem.fonte
Mathematica, 64 bytes
Bem simples.
fonte
StringJoin
=""<>##&
Perl 5, 59 bytes
É uma sub-rotina; use-o como:
fonte
-E
vez de-M5.010 -e
-1+2*int rand 2
comrand>.5?1:-1
?;say$==
por,$==
-M5.010
não conta mesmo, então eu não me incomodei em abreviá-lo. Acho que tentei uma vírgula em vez de outrasay
e não funcionou. Mas a nova regra de classificação é uma boa ideia, obrigado. Vou testá-lo quando tiver uma chance e editá-lo.PHP, 65 bytes
Graças à outra resposta PHP nesta página. Eu escrevi um programa por conta própria e acabou sendo exatamente a mesma resposta que foi escrita por Samsquanch, o que me levou a dar um passo adiante para economizar alguns bytes.
Se alguém puder descobrir uma maneira de acrescentar uma matriz a outra aqui, que seja menor que os 5 bytes necessários para associar o número da powerball depois, eu agradeceria muito, porque está me deixando louco! O melhor que eu poderia fazer seria depois
array_rand
e antesjoin
, com uma declaração parecida+[5=>rand()%25]
, mas esse é um byte extra, além de concatená-la depois.Execute-o através da linha de comando. Amostra:
Saída:
fonte
PARI / GP,
7170 bytesEle gera uma permutação aleatória de [1..69] e depois pega os 5 primeiros.
Infelizmente, este é um usuário ineficiente da aleatoriedade, consumindo uma média de 87 bytes de entropia em comparação com o ideal teórico da informação de 3,5. Isso ocorre principalmente porque toda a permutação é gerada, em vez de apenas os 5 primeiros membros, e também porque as permissões são ordenadas (perdendo lg 5! = ~ 7 bits). Mais distante,
random
usa uma estratégia de rejeição em vez de usar codificação aritmética. (Isso ocorre porque o PARI usa o xorgen de Brent, que é rápido o suficiente para que as despesas de estratégias mais complicadas raramente valham a pena.)Existem três mudanças 'óbvias' que não funcionam na versão atual (2.8.0) do gp.
random
eprint
pode ser armazenado em variáveis eprint
pode ser chamado diretamente, e não através da->
função anônima :Juntos, eles economizariam 9 bytes. Infelizmente, ambas as funções são válidas sem argumentos e, portanto, são avaliadas imediatamente e não armazenadas, portanto, elas não calculam a saída desejada.
fonte
Código da máquina Intel x86, 85 bytes
Bem, às vezes imprime os mesmos números, se sim, tente novamente pressionando uma tecla.
Ajuntar com:
Alinhe-o com um tamanho de disquete (adicione zeros no final) para montá-lo em uma vm (ele não precisa de nenhum sistema operacional).
Desmontagem:
fonte
C, 142 bytes
Não está muito satisfeito com esta solução, pois parece que deveria haver mais oportunidades de golfe. Amanhã voltarei a vê-lo com novos olhos. Experimente aqui .
fonte
Rápido, 165 bytes
Pode ser executado rapidamente em um Xcode Playground.
EDIT: O problema atual aqui é que, teoricamente, é possível que isso funcione para sempre no loop while, se arc4random_uniform de alguma forma continuar puxando o mesmo número. As chances de que isso aconteça, por um período significativo de tempo, são provavelmente melhores do que as chances de ganhar a Powerball.
fonte
Perl 6 ,
3231 bytesTransformando-o em uma função que retorna uma string, eu posso remover 4 bytes (
put␠
) enquanto adiciono apenas 3 ({~
}
)Uso:
Se uma função tivesse permissão para retornar uma lista dos valores, o seguinte também funcionaria.
(Caso contrário, seria o mesmo que acima, mas dentro
{ }
)função que retorna uma única lista plana
função que retorna uma lista com os 5 primeiros números em uma sub-lista
função que retorna uma lista com os 5 primeiros em uma sub-lista e a Powerball em outra sub-lista
fonte
Sério, 35 bytes
Minha primeira tentativa de resposta em um idioma de golfe.
Parece mais do que deveria ser.
A repetição provavelmente pode ser removida com W , mas parece estar quebrada no intérprete on-line e não quero postar código não testado.
Que pena { não funciona em listas.
Código:
Despejo hexagonal:
Explicação:
Intérprete online
fonte
Lua, 96 bytes
Uma solução simples, usando uma tabela como um conjunto, colocando o valor dentro dela
table[value]=truthy/falsy
para poder verificar se ela está dentro ou não.Perco 5 bytes porque tenho que definir o primeiro valor da minha tabela; caso contrário, não entrarei no
while(o[n])
loop e simplesmente sairein
antes de usar a função aleatória. Como Lua usa tabelas baseadas em 1, também tenho que forçá-lo a colocar seu primeiro valor na célula[0]
, caso contrário, não poderia gerar a1
.Ungolfed:
fonte
C ++, 252 bytes
Golfe:
Ungolfed:
fonte