Powerball es una lotería estadounidense que recientemente ha llamado la atención porque el premio mayor actual (a partir del 11 de enero de 2016) es el mayor premio de lotería de la historia , con alrededor de $ 1.5 mil millones ( USD ).
Los jugadores de Powerball eligen 5 números distintos de 69 bolas blancas numeradas y 1 número de "Powerball" de 26 bolas rojas numeradas. Ellos ganan el premio mayor si sus cinco opciones de bolas blancas se ajustan a lo que hemos dibujado en cualquier orden, y si eligieron el número correcto "Powerball".
Entonces, las posibilidades de ganar el premio mayor son 1 en (69 choose 5)*(26 choose 1)
o ((69*68*67*66*65)/(5*4*3*2*1))*26
, que es 1 en 292,201,338
Nadie ganó el premio mayor en el sorteo más reciente el 9 de enero de 2016, pero quizás alguien gane el próximo sorteo el 13 de enero de 2016 a las 10:59 p.m. ET.
Reto
Escriba un programa o función que simule un dibujo de Powerball, sin ingresar nada pero emitiendo 5 números aleatorios distintos del 1 al 69 inclusive, y luego un número aleatorio "Powerball" del 1 al 26 inclusive (que podría ser una repetición de uno de los 5 números iniciales).
El número "Powerball" siempre debe ser el último número en la salida, pero de lo contrario, el orden de los primeros 5 números no importa.
Los 6 números deben salir en decimal , separados por espacios o separados por nueva línea, con una nueva línea final opcional. Las comas, corchetes y otros caracteres no están permitidos en la salida.
Entonces, estos serían resultados válidos (usando los números del último dibujo ):
32 16 19 57 34 13
32
16
19
57
34
13
Todos los resultados posibles 292201338 deberían ser posibles con probabilidad uniforme. Puede usar generadores de números pseudoaleatorios integrados y asumir que cumplen con este estándar.
Aquí hay una implementación de referencia no protegida que funciona en Python 2 o 3:
import random
print(' '.join(map(str, random.sample(range(1,70), 5) + [random.randint(1, 26)])))
El código más corto en bytes gana.
Tenga en cuenta que no estoy afiliado a Powerball y realmente no le sugiero que juegue. Pero si gana algo de los números generados por uno de los programas aquí, estoy seguro de que nos encantaría saberlo. :RE
5! = 5*4*3*2*1
formas de organizar 5 cosas, por lo que lo tiene en cuenta.Respuestas:
Dyalog APL, 10 bytes
Dyadic
?
es ⍺ números aleatorios distintos en [1, ⍵], y monádico?
es un solo número aleatorio.Probarlo aquí .
fuente
1+(5?69),?26
.CJam, 16 bytes
Pruébalo en línea.
fuente
:)
hace que las cosas sean un poco más grandes, como cómo la sonrisa de un extraño puede hacerte un poco más feliz.:)
si ganara la lotería. +1MATL , 10 bytes
Utiliza la versión actual (9.2.0) del lenguaje / compilador.
Ejemplo
Con el compilador ejecutado en Matlab:
Con el compilador ejecutado en Octave:
Los primeros cinco números están separados por espacio, no por nueva línea. Esto se debe a que la
randsample
función subyacente de Octave se comporta de manera diferente a la de Matlab (y se ha corregido en una nueva versión del compilador). De todos modos, la nueva línea y el espacio están permitidos por el desafío.Editar (4 de abril de 2016) : ¡ Pruébelo en línea!
Explicación
Ver funciones relevantes de Matlab:
randsample
yrandi
.fuente
Rubí,
3332Ruby tiene un método incorporado, muestra, que selecciona valores aleatorios de una matriz sin reemplazo. Gracias a QPaysTaxes por señalar que no necesito a los padres.
fuente
p
en algún momento, lo que en realidad rompe el análisis sintáctico de esa versión.R,
3029 bytesLa
sample
función realiza un muestreo aleatorio simple desde la entrada. Si se da un solo entero como primer argumento, el muestreo se realiza desde 1 hasta el argumento. El tamaño de la muestra es el segundo argumento. Estamos empleando la opción predeterminada de muestreo sin reemplazo.Pruébalo en línea
fuente
c
lugar decat
c
tuviera que usar , esto solo sería un fragmento, que no está permitido por defecto.Python 3.5, 63 bytes
Básicamente es la implementación de referencia de golf. Tenga en cuenta que 3.5 es necesario para salpicar en un último argumento.
fuente
Octava,
3532 bytesCalvin's Hobbies confirmó que
ans =
estaba bien cuando usaba una función, así que:Tiene similitudes con la respuesta de Memming , pero usa una indexación directa que solo es posible en Octave, y es
57 bytes más corta, así que pensé que valía la pena publicarla de todos modos.randperm(69)
crea una lista con una permutación aleatoria de los números 1-69. Es posible indexar directamente la lista (no es posible en MATLAB) para obtener solo los primeros 5 números como este(1;5)
. La lista es seguida por larandi(26)
cual devuelve un solo número entre 1 y 26.Antiguo:
La lista resultante se muestra usando
disp
.fuente
PowerShell v2 +,
3127 bytesRequiere la versión 2 o posterior, ya que
Get-Random
no estaba presente en v1 (Get-
está implícito y-Maximum
es posicional). La salida está separada por una nueva línea.Sin golf:
fuente
Random -ma 27
puede ser talRandom 27
como-Maximum
se corresponde con la posición 0Shell + coreutils, 31
fuente
MATLAB, 40
Lo sé. Es la solución aburrida.
fuente
PHP, 69 bytes
Respuesta bastante directa. Genere un 1-69
range
, luego úseloarray_rand
para tomar 5 claves aleatorias de la matriz y haga eco del$k+1
valor (indexado en 0), luego repita un int aleatorio de 1-26.fuente
C #,
153 bytes140 bytesGracias a "McKay":
Solución de 153 bytes:
Solución simple usando Linq y barajando usando GUID.
fuente
string.Join(" ", ....take(5).Concat(....Take(1)))
Pyth -
131413 bytesGran golf posible, esto fue solo un FGITW.
Pruébelo en línea aquí .
fuente
<... 5
a>5...
. Código finaljb>5.SS69hO26
Brachylog , 40 bytes
Explicación
Brachylog no tiene un built-in de números aleatorios (todavía ...) así que tenemos que utilizar un predicado SWI-Prolog para que:
random/1
. Podemos ingresar el código SWI-Prolog en Brachylog usando comillas inversas.fuente
JavaScript (ES6),
1068684 bytesComo no podemos muestrear de forma exclusiva los randoms en JavaScript, esto funciona creando un Set (que solo contiene valores únicos), agregando recursivamente randoms (1-69) hasta que haya 5 únicos, agregando un número aleatorio (1-26), luego uniéndose y devolviéndolo todo.
fuente
Elixir , 83 bytes
Cuando solo
IO.puts
utiliza una matriz de enteros, Elixir interpretará los enteros como caracteres y, por lo tanto, generará una cadena en lugar de los números deseados de Powerball. Entonces, tenemos que reducir la matriz entera a una cadena.fuente
Ruby,
474339 bytesCreo que se puede jugar más al golf, pero trabajaré en eso una vez que termine de admirar lo bonito que se ve este código, teniendo en cuenta.
Funciona casi de la misma manera que todo lo demás: tome una matriz de los números del 1 al 69, baraje, obtenga los primeros cinco, genere esos y luego genere un número aleatorio entre 1 y 26.
Pasé por algunas iteraciones antes de publicar esto:
(dónde
<newline>
se reemplaza con una nueva línea real)EDITAR: Vaya, no vi la respuesta preexistente de Ruby. Tropecé
sample
y me estaba desplazando hacia abajo para editar mi respuesta, pero luego lo vi ... Oh, bueno. Mi puntaje final es de 43 bytes, pero seguiré jugando al golf un poco para ver qué tan bien puedo hacerlo.fuente
Mathematica, 64 bytes
Bastante sencillo.
fuente
StringJoin
=""<>##&
Perl 5, 59 bytes
It's a subroutine; use it as:
fuente
-E
instead of-M5.010 -e
-1+2*int rand 2
withrand>.5?1:-1
?;say$==
with,$==
-M5.010
doesn't count anyway so I didn't bother abbreviating it. I think I tried a comma instead of anothersay
and it didn't work. But the new sort rule is a good idea, thanks. I'll test it when I have a chance and edit it in.PHP, 65 bytes
Thanks to the other PHP answer on this page. I wrote up a program on my own, and it turned out to be the exact same answer as the one written by Samsquanch, which drove me to take it a step further to save a few bytes.
If anyone can figure out a way to append one array to another in here that's less than the 5 bytes it takes me to join the powerball number on after, I would greatly appreciate it, cause it's driving me nuts! The best I could come up with would be after
array_rand
and beforejoin
, having a statement something like+[5=>rand()%25]
, but that's an extra byte over just concatenating it on after.Run it through the command line. Sample:
Output:
fuente
PARI/GP,
7170 bytesIt generates a random permutation of [1..69], then takes the first 5.
Unfortunately this is an inefficient user of randomness, consuming an average of 87 bytes of entropy compared to the information-theoretic ideal of 3.5. This is mainly because the entire permutation is generated instead of just the first 5 members, and also because the perms are ordered (losing lg 5! =~ 7 bits). Further,
random
uses a rejection strategy rather than using arithmetic coding. (This is because PARI uses Brent's xorgen, which is fast enough that the overhead from more complicated strategies is rarely worthwhile.)There are three 'obvious' changes which do not work under the current (2.8.0) version of gp.
random
andprint
could be stored in variables, andprint
could be called directly rather than via the anonymous->
function:Together these would save 9 bytes. Unfortunately both functions are valid without arguments, and hence are evaluated immediately rather than stored, so these do not compute the desired output.
fuente
Intel x86 Machine code, 85 bytes
Well it does sometimes print the same numbers if so, just try again by pressing a key.
Compile with:
Make sure to align it to a floppy size (add zeros at the end) in order to mount it to a vm (it does not need any operating system).
Disassembly:
fuente
C, 142 bytes
Not terribly happy with this solution as it feels like there should be more golfing opportunity. I'll look at it again tomorrow with fresh eyes. Try it here.
fuente
Swift, 165 bytes
Can quickly be run in an Xcode Playground.
EDIT: Current problem here is that it's theoretically possible for this to run forever in the while loop if arc4random_uniform somehow keeps pulling the same number. The odds of that happening, for any significant length of time, are probably better than the odds of winning the Powerball.
fuente
Perl 6,
3231 bytesTurning it into a function that returns a string, I can remove 4 bytes (
put␠
) while only adding 3 ({~
}
)Usage:
If a function were allowed to return a list of the values, the following would also work.
( Otherwise it would be the same as above but within
{ }
)function that returns a single flat list
function that returns a list with the first 5 numbers in a sub list
function that returns a list with the first 5 in a sub list, and the Powerball in another sub list
fuente
Seriously, 35 bytes
My first attempt at an answer in a golfing language.
Feels longer than it should have to be.
The repetition could likely be removed with W, but it seems to be broken in the online interpreter and I don't want to post untested code.
Too bad { doesn't work on lists.
Code:
Hex dump:
Explanation:
Online interpreter
fuente
Lua, 96 Bytes
A simple solution, using a table as a set by putting the value inside it as
table[value]=truthy/falsy
to be able to check if they are inside it or not.I lose 5 bytes because I have to set the first value of my table, else I won't go inside the
while(o[n])
loop and will simply outputn
before using the random function. As Lua uses 1-based tables, I also have to force it to put its first value to the cell[0]
, otherwise I couldn't output a1
.Ungolfed:
fuente
C++, 252 bytes
Golfed:
Ungolfed:
fuente