Powerball est une loterie américaine qui a récemment attiré l'attention parce que le jackpot actuel (au 11 janvier 2016) est le plus gros loto de l'histoire , d'environ 1,5 milliard de dollars ( USD ).
Les joueurs de Powerball choisissent 5 numéros distincts parmi 69 boules blanches numérotées et 1 numéro "Powerball" parmi 26 boules rouges numérotées. Ils remportent le jackpot si leurs cinq choix de boule blanche correspondent à ce qui a été tiré dans un ordre quelconque, et s’ils choisissent le bon numéro "Powerball".
Donc, les chances de gagner le jackpot sont 1 dans (69 choose 5)*(26 choose 1)
ou ((69*68*67*66*65)/(5*4*3*2*1))*26
, ce qui est 1 sur 292 201 338
Personne n'a gagné le gros lot lors du dernier tirage du 9 janvier 2016, mais quelqu'un gagnera peut-être le prochain tirage le 13 janvier 2016 à 22h59 HE.
Défi
Ecrivez un programme ou une fonction qui simule un dessin Powerball sans aucune entrée mais en générant 5 nombres aléatoires distincts de 1 à 69 inclus, puis un nombre "Powerball" aléatoire de 1 à 26 inclus (ce qui pourrait être une répétition de l’un des 5 numéros initiaux).
Le nombre "Powerball" devrait toujours être le dernier numéro de la sortie, mais sinon l'ordre des 5 premiers chiffres n'a pas d'importance.
Les 6 nombres doivent être en sortie décimale , séparés par des espaces ou des sauts de ligne, avec un retour à la ligne simple optionnel. Les virgules, crochets et autres caractères ne sont pas autorisés dans la sortie.
Donc, ce sont des sorties valides (en utilisant les numéros du dernier dessin ):
32 16 19 57 34 13
32
16
19
57
34
13
Tous les résultats possibles devraient être possibles avec une probabilité uniforme. Vous pouvez utiliser des générateurs de nombres pseudo-aléatoires intégrés et supposer qu'ils répondent à cette norme.
Voici une implémentation de référence non-golfée qui fonctionne en Python 2 ou 3:
import random
print(' '.join(map(str, random.sample(range(1,70), 5) + [random.randint(1, 26)])))
Le code le plus court en octets gagne.
Notez que je n'ai aucune affiliation avec Powerball et ne suggère pas vraiment que vous jouiez. Mais si vous gagnez quelque chose avec les numéros générés par l'un des programmes ici, je suis sûr que nous aimerions en entendre parler. :RÉ
5! = 5*4*3*2*1
moyen d'arranger 5 choses, donc vous en tenez compte.Réponses:
Dyalog APL, 10 octets
Dyadique
?
est ⍺ des nombres aléatoires distincts dans [1, ⍵], et monadique?
est un nombre aléatoire unique.Essayez ici .
la source
1+(5?69),?26
.CJam, 16 octets
Essayez-le en ligne.
la source
:)
choses deviennent un peu plus grandes, comme comment le sourire d'un inconnu peut vous rendre un peu plus heureux.:)
si je gagnais à la loterie. +1MATL , 10 octets
Utilise la version actuelle (9.2.0) du langage / compilateur.
Exemple
Avec le compilateur exécuté sur Matlab:
Avec le compilateur exécuté sur Octave:
Les cinq premiers chiffres sont séparés par un espace et non par une nouvelle ligne. Ceci est dû au sous-jacent d'Octave
randsample
fonction se comporte différemment de celle de Matlab (et a été corrigée dans une nouvelle version du compilateur). Quoi qu’il en soit, la nouvelle ligne et l’espace sont tous deux permis par le défi.Éditer (4 avril 2016) : Essayez-le en ligne!
Explication
Voir les fonctions pertinentes de Matlab:
randsample
etrandi
.la source
Ruby,
3332Ruby possède une méthode intégrée, exemple, qui sélectionne des valeurs aléatoires dans un tableau sans remplacement. Merci à QPaysTaxes pour m'avoir fait remarquer que je n'ai pas besoin des parens.
la source
p
à un moment donné, ce qui casse réellement l'analyse syntaxique de cette version.R,
3029 octetsLa
sample
fonction effectue un échantillonnage aléatoire simple à partir de l'entrée. Si un seul entier est donné comme premier argument, l'échantillonnage est effectué de 1 à l'argument. La taille de l'échantillon est le deuxième argument. Nous utilisons l'option par défaut d'échantillonnage sans remplacement.Essayez-le en ligne
la source
c
place decat
c
, il ne s'agirait que d'un extrait de code, ce qui n'est pas autorisé par défaut.Python 3.5, 63 octets
C'est fondamentalement l'implémentation de référence gérée Notez que 3.5 est nécessaire pour splatter dans un autre argument.
la source
Octave,
3532 octetsCalvin's Hobbies a confirmé que
ans =
c'était bien d'utiliser une fonction, alors:Il a des similitudes avec la réponse de Memming , mais il utilise une indexation directe qui n’est possible que dans Octave, et sa taille est plus courte de
5 à7 octets; j’ai donc pensé que cela valait la peine de la publier.randperm(69)
crée une liste avec une permutation aléatoire des nombres 1-69. Il est possible d'indexer directement la liste (ce qui n'est pas possible dans MATLAB) pour obtenir uniquement les 5 premiers chiffres de ce type(1;5)
. La liste est suivie parrandi(26)
laquelle renvoie un nombre unique compris entre 1 et 26.Vieux:
La liste résultante est affichée en utilisant
disp
.la source
PowerShell v2+,
3127 bytesRequires version 2 or newer, as
Get-Random
wasn't present in v1 (theGet-
is implied, and-Maximum
is positional). Output is newline separated.Ungolfed:
la source
Random -ma 27
can just beRandom 27
as-Maximum
is matched by position 0Shell + coreutils, 31
la source
MATLAB, 40
I know. It's the boring solution.
la source
PHP, 69 bytes
Pretty straight forward answer. Generate a 1-69
range
, then usearray_rand
to grab 5 random keys from the array, and echo out the$k+1
value (0-indexed), then echo a random int from 1-26.la source
C#,
153 bytes140 bytesThanks to "McKay":
153 bytes solution:
Simple solution using Linq and shuffling using GUID.
la source
string.Join(" ", ....take(5).Concat(....Take(1)))
Pyth -
131413 bytesMajor golfing possible, this was just a FGITW.
Try it online here.
la source
<... 5
to>5...
. Final codejb>5.SS69hO26
Brachylog, 40 bytes
Explanation
Brachylog doesn't have a built-in for random numbers (yet...) so we have to use an SWI-Prolog predicate for that:
random/1
. We can input SWI-Prolog code in Brachylog using backquotes.la source
JavaScript (ES6),
1068684 bytesSince we can't uniquely sample randoms in JavaScript, this works by creating a Set (which only holds unique values), recursively adding randoms (1-69) until there are 5 unique ones, appending a random number (1-26), then joining and returning it all out.
la source
Elixir, 83 Bytes
When just
IO.puts
ing an array of integers, Elixir will interpret the integers as characters and therefore output some string instead of the desired powerball numbers. So, we have to reduce the integer array down to a string.la source
Ruby,
474339 bytesI think it can be golfed more, but I'll work on that once I'm done admiring how pretty this code looks, considering.
It works pretty much the same way as everything else: Take an array of the numbers 1 to 69, shuffle them, get the first five, output those, then output a random number between 1 and 26.
I went through a few iterations before posting this:
(where
<newline>
is replaced with an actual newline)EDIT: Whoops, didn't see the preexisting Ruby answer. I stumbled on
sample
and was scrolling down to edit my answer, but then I saw it... Oh well. My final score is 43 bytes, but I'll keep golfing a little to see how well I can do.la source
Mathematica, 64 bytes
Quite simple.
la source
StringJoin
=""<>##&
Perl 5, 59 bytes
It's a subroutine; use it as:
la source
-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:
la source
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.
la source
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:
la source
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.
la source
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.
la source
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
la source
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
la source
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:
la source
C++, 252 bytes
Golfed:
Ungolfed:
la source