Powerball to amerykańska loteria, która niedawno zyskała na znaczeniu, ponieważ obecny jackpot (od 11 stycznia 2016 r.) Jest największą nagrodą lotto w historii , wynoszącą około 1,5 miliarda USD ( USD ).
Gracze Powerball wybierają 5 różnych liczb z 69 ponumerowanych białych kulek i 1 jedną liczbę „Powerball” z 26 ponumerowanych czerwonych kulek. Oni wygrać pulę, jeśli ich pięć białych wybory piłka dopasować co został sporządzony w dowolnej kolejności, a jeśli wybrali właściwą „Powerball” numer.
Tak więc szanse na wygraną wynoszą 1 (69 choose 5)*(26 choose 1)
lub 3 ((69*68*67*66*65)/(5*4*3*2*1))*26
, czyli 1 na 292,201,338
Nikt nie wygrał głównej wygranej w ostatnim losowaniu 9 stycznia 2016 r., Ale być może ktoś wygra następny losowanie 13 stycznia 2016 r., Godz. 22.59 ET.
Wyzwanie
Napisz program lub funkcję, która symuluje losowanie Powerball, nie biorąc udziału, ale wypisując 5 różnych liczb losowych od 1 do 69 włącznie, a następnie jedną losową liczbę „Powerball” od 1 do 26 włącznie (która może być powtórzeniem jednego z 5 numery początkowe).
Liczba „Powerball” powinna zawsze być ostatnią liczbą na wyjściu, ale w przeciwnym razie kolejność pierwszych 5 liczb nie ma znaczenia.
6 liczb powinno być wyprowadzanych w postaci dziesiętnej , oddzielonej spacją lub separatorem , z opcjonalnym pojedynczym znakiem nowej linii. Przecinki, nawiasy i inne znaki nie są dozwolone w danych wyjściowych.
Byłyby to prawidłowe dane wyjściowe (przy użyciu liczb z ostatniego rysunku ):
32 16 19 57 34 13
32
16
19
57
34
13
Wszystkie 292201338 możliwych wyników powinny być możliwe z jednakowym prawdopodobieństwem. Możesz użyć wbudowanych generatorów liczb pseudolosowych i założyć, że spełniają one ten standard.
Oto implementacja referencji bez golfisty, która działa w Pythonie 2 lub 3:
import random
print(' '.join(map(str, random.sample(range(1,70), 5) + [random.randint(1, 26)])))
Najkrótszy kod w bajtach wygrywa.
Pamiętaj, że nie mam powiązań z Powerball i nie sugeruję, abyś grał. Ale jeśli wygrasz cokolwiek z liczb wygenerowanych przez jeden z programów tutaj, jestem pewien, że chcielibyśmy o tym usłyszeć. :RE
5! = 5*4*3*2*1
sposoby na zorganizowanie 5 rzeczy, więc weź to pod uwagę.Odpowiedzi:
Dyalog APL, 10 bajtów
Dwójkowym
?
jest ⍺ różne liczb losowych w [1], ⍵ i monadycznego?
jest jeden numer losowy.Wypróbuj tutaj .
źródło
1+(5?69),?26
.CJam, 16 bajtów
Wypróbuj online.
źródło
:)
sprawia, że rzeczy stają się trochę większe, jak uśmiech nieznajomego może sprawić, że będziesz trochę szczęśliwszy.:)
gdybym wygrał na loterii. +1MATL , 10 bajtów
Korzysta z bieżącej wersji (9.2.0) języka / kompilatora.
Przykład
Z kompilatorem uruchomionym na Matlabie:
Z kompilatorem uruchomionym na Octave:
Pierwsze pięć liczb jest oddzielonych spacją, a nie znakiem nowej linii. Wynika to z tego, że podstawowa
randsample
funkcja Octave zachowuje się inaczej niż Matlab (i została poprawiona w nowej wersji kompilatora). W każdym razie zarówno wyzwanie nowej linii, jak i spacja są dozwolone.Edytuj (4 kwietnia 2016 r.) : Wypróbuj online!
Wyjaśnienie
Zobacz odpowiednie funkcje Matlaba:
randsample
irandi
.źródło
Ruby,
3332Ruby ma wbudowaną metodę, przykład, która wybiera losowe wartości z tablicy bez zamiany. Dzięki QPaysTaxes za zwrócenie uwagi, że nie potrzebuję parens.
źródło
p
w pewnym momencie, co faktycznie przerywa analizowanie składni dla tej wersji.R,
3029 bajtówsample
Funkcja wykonuje prostą losowego pobierania próbek z wejścia. Jeśli jako pierwszy argument podano jedną liczbę całkowitą, próbkowanie odbywa się od 1 do argumentu. Wielkość próby jest drugim argumentem. Używamy domyślnej opcji próbkowania bez zamiany.Wypróbuj online
źródło
c
zamiastcat
c
, byłby to tylko fragment kodu, który domyślnie nie jest dozwolony.Python 3.5, 63 bajty
Jest to w zasadzie referencyjna implementacja golfa. Zauważ, że 3.5 jest konieczne do splatania w niekończącym się argumencie.
źródło
Oktawa,
3532 bajtówHobby Calvina potwierdziło, że
ans =
korzystanie z funkcji było w porządku, więc:Ma podobieństwo do odpowiedzi Memminga , ale wykorzystuje bezpośrednie indeksowanie, które jest możliwe tylko w Octave, i jest o
57 bajtów krótsze, więc pomyślałem, że i tak warto to opublikować.randperm(69)
tworzy listę z losową permutacją liczb 1-69. Możliwe jest bezpośrednie zaindeksowanie listy (niemożliwe w MATLAB), aby uzyskać tylko pierwsze 5 liczb w ten sposób(1;5)
. Po liście następujerandi(26)
pojedynczy numer od 1 do 26.Stary:
Wynikowa lista jest wyświetlana za pomocą
disp
.źródło
PowerShell v2 +,
3127 bajtówWymaga wersji 2 lub nowszej, ponieważ
Get-Random
nie była obecna w wersji 1 (Get-
jest domyślna i-Maximum
pozycyjna). Wyjście jest oddzielone znakiem nowej linii.Nie golfowany:
źródło
Random -ma 27
może być taki,Random 27
jak w-Maximum
zestawieniu z pozycją 0Shell + coreutils, 31
źródło
MATLAB, 40
Wiem. To nudne rozwiązanie.
źródło
PHP, 69 bajtów
Dość prosta odpowiedź. Wygeneruj 1-69
range
, następnie użyj,array_rand
aby pobrać 5 losowych kluczy z tablicy, i wypisz echo$k+1
wartości (indeksowane 0), a następnie powtórz losowe int z 1-26.źródło
C #,
153 bajty140 bajtówDzięki „McKay”:
153 bajty rozwiązanie:
Proste rozwiązanie za pomocą Linq i tasowanie za pomocą GUID.
źródło
string.Join(" ", ....take(5).Concat(....Take(1)))
Pyth -
131413 bajtówMożliwy duży golf, to był tylko FGITW.
Wypróbuj online tutaj .
źródło
<... 5
TO>5...
. Kod końcowyjb>5.SS69hO26
Brachylog , 40 bajtów
Wyjaśnienie
Brachylog nie posiada wbudowany liczb losowych (jeszcze ...), więc musimy użyć predykatu SWI-Prolog na to:
random/1
. Możemy wprowadzić kod SWI-Prolog w Brachylog za pomocą cudzysłowów.źródło
JavaScript (ES6),
1068684 bajtówPonieważ nie możemy jednoznacznie próbkować losowych elementów w JavaScript, działa to poprzez utworzenie zestawu (który zawiera tylko unikalne wartości), rekurencyjne dodawanie losowych (1-69), dopóki nie będzie 5 unikalnych, dodawanie losowej liczby (1-26), następnie dołączając i zwracając to wszystko.
źródło
Eliksir , 83 bajtów
Po prostu
IO.puts
wprowadzając tablicę liczb całkowitych, Elixir zinterpretuje liczby całkowite jako znaki, a zatem wyśle niektóre ciągi zamiast pożądanych liczb kuli mocy. Musimy więc zredukować tablicę liczb całkowitych do ciągu.źródło
Ruby,
474339 bajtówWydaje mi się, że można bardziej grać w golfa, ale popracuję nad tym, gdy skończę, podziwiając, jak ładny jest ten kod, biorąc pod uwagę.
Działa prawie tak samo, jak wszystko inne: weź tablicę liczb od 1 do 69, potasuj je, zdobądź pierwsze pięć, wypisz je, a następnie wypisz losową liczbę od 1 do 26.
Przejrzałem kilka iteracji przed opublikowaniem tego:
(gdzie
<newline>
jest zastąpiony przez rzeczywistą nową linię)EDYCJA: Ups, nie widziałem wcześniej istniejącej odpowiedzi Ruby. Zatoczyłem się
sample
i przewijałem w dół, aby edytować swoją odpowiedź, ale potem ją zobaczyłem ... No cóż. Mój końcowy wynik to 43 bajty, ale będę trochę grał w golfa, aby zobaczyć, jak dobrze sobie radzę.źródło
Mathematica, 64 bajty
Całkiem proste.
źródło
StringJoin
=""<>##&
Perl 5, 59 bajtów
To podprogram; użyj go jako:
źródło
-E
zamiast-M5.010 -e
-1+2*int rand 2
zrand>.5?1:-1
?;say$==
z,$==
-M5.010
tak się nie liczy, więc nie zawracałem sobie tym głowy skrótem. Myślę, że spróbowałem przecinka zamiast innegosay
i to nie zadziałało. Ale nowa zasada sortowania to dobry pomysł, dzięki. Przetestuję to, gdy będę miał okazję, iPHP, 65 bajtów
Dzięki drugiej odpowiedzi PHP na tej stronie. Sam napisałem program i okazało się, że jest to dokładnie taka sama odpowiedź, jak ta napisana przez Samsquancha, co skłoniło mnie do pójścia o krok dalej i zaoszczędzenia kilku bajtów.
Jeśli ktokolwiek może wymyślić sposób, aby dołączyć tutaj jedną tablicę do drugiej, która jest mniejsza niż 5 bajtów, po których przyłączam się do numeru Powerball, byłbym bardzo wdzięczny, ponieważ doprowadza mnie to do szału! Najlepsze, co mogłem wymyślić, to po
array_rand
i przedjoin
, posiadanie czegoś podobnego+[5=>rand()%25]
, ale to dodatkowy bajt po prostu łącząc go później.Uruchom go z wiersza poleceń. Próba:
Wydajność:
źródło
PARI / GP,
7170 bajtówGeneruje losową permutację [1..69], a następnie przyjmuje pierwszą 5.
Niestety jest to nieefektywny użytkownik losowości, zużywający średnio 87 bajtów entropii w porównaniu z ideałem teoretycznym 3,5. Wynika to głównie z tego, że generowana jest cała permutacja zamiast tylko pierwszych 5 elementów, a także dlatego, że perms są uporządkowane (utrata lg 5! = ~ 7 bitów). Ponadto
random
wykorzystuje strategię odrzucania zamiast kodowania arytmetycznego. (Jest tak, ponieważ PARI używa xorgena Brenta, który jest wystarczająco szybki, aby narzut z bardziej skomplikowanych strategii rzadko był opłacalny.)Istnieją trzy „oczywiste” zmiany, które nie działają w obecnej wersji (2.8.0) gp.
random
iprint
mogą być przechowywane w zmiennych, iprint
mogą być wywoływane bezpośrednio, a nie za pomocą->
funkcji anonimowej :Razem zaoszczędzą 9 bajtów. Niestety obie funkcje są poprawne bez argumentów, a zatem są oceniane natychmiast, a nie przechowywane, więc nie obliczają one pożądanego wyniku.
źródło
Kod maszynowy Intel x86, 85 bajtów
Czasami drukuje te same liczby, jeśli tak, spróbuj ponownie, naciskając klawisz.
Połącz z:
Pamiętaj, aby wyrównać go do rozmiaru dyskietki (dodać zera na końcu), aby zamontować go na maszynie wirtualnej (nie wymaga on żadnego systemu operacyjnego).
Demontaż:
źródło
C, 142 bajty
Niezbyt zadowolony z tego rozwiązania, ponieważ wydaje się, że powinno być więcej możliwości gry w golfa. Spojrzę na to jutro ze świeżymi oczami. Wypróbuj tutaj .
źródło
Szybki, 165 bajtów
Można szybko uruchomić na placu zabaw Xcode.
EDYCJA: Obecny problem polega na tym, że teoretycznie jest możliwe, aby działało to wiecznie w pętli while, jeśli arc4random_uniform nadal ciągnie tę samą liczbę. Szanse na to, przez dłuższy czas, są prawdopodobnie lepsze niż szanse wygrania Powerball.
źródło
Perl 6 ,
3231 bajtówPrzekształcając go w funkcję zwracającą ciąg, mogę usunąć 4 bajty (
put␠
), dodając tylko 3 ({~
}
)Stosowanie:
Gdyby funkcja mogła zwrócić listę wartości, działałyby również następujące.
(W przeciwnym razie byłoby to to samo co powyżej, ale w środku
{ }
)funkcja, która zwraca pojedynczą płaską listę
funkcja, która zwraca listę z 5 pierwszymi liczbami na liście podrzędnej
funkcja, która zwraca listę pierwszych 5 na liście podrzędnej, a Powerball na innej liście podrzędnej
źródło
Poważnie, 35 bajtów
Moja pierwsza próba odpowiedzi w języku golfowym.
Wydaje się dłuższy niż powinien.
Powtórzenie można prawdopodobnie usunąć za pomocą W , ale wydaje się, że jest zepsute w internetowym tłumaczu i nie chcę publikować nieprzetestowanego kodu.
Szkoda { nie działa na listach.
Kod:
Zrzut szesnastkowy:
Wyjaśnienie:
Tłumacz online
źródło
Lua, 96 bajtów
Proste rozwiązanie, wykorzystujące tabelę jako zestaw, umieszczając w niej wartość,
table[value]=truthy/falsy
aby móc sprawdzić, czy są w niej, czy nie.Tracę 5 bajtów, ponieważ muszę ustawić pierwszą wartość mojej tabeli, inaczej nie wejdę do
while(o[n])
pętli i po prostu wyprowadzę danen
przed użyciem funkcji losowej. Ponieważ Lua używa tabel opartych na 1, muszę również zmusić ją do umieszczenia pierwszej wartości w komórce[0]
, w przeciwnym razie nie byłbym w stanie wygenerować wartości a1
.Nie golfowany:
źródło
C ++, 252 bajty
Gra w golfa:
Nie golfowany:
źródło