Powerball adalah lotere Amerika yang baru-baru ini mendapatkan perhatian karena jackpot saat ini (per 11 Januari 2016) adalah hadiah lotre terbesar dalam sejarah , sekitar $ 1,5 miliar ( USD ).
Pemain Powerball memilih 5 angka berbeda dari 69 bola putih bernomor, dan 1 satu nomor "Powerball" dari 26 bola merah bernomor. Mereka memenangkan jackpot jika lima pilihan bola putih mereka cocok dengan yang digambar dalam urutan apa pun, dan jika mereka memilih nomor "Powerball" yang benar.
Jadi peluang memenangkan jackpot adalah 1 in (69 choose 5)*(26 choose 1)
atau ((69*68*67*66*65)/(5*4*3*2*1))*26
, yaitu 1 dalam 292.201.338
Tidak ada yang memenangkan jackpot dalam undian terbaru pada tanggal 9 Januari 2016, tetapi mungkin seseorang akan memenangkan undian berikutnya pada 13 Januari 2016, 10:59 malam ET.
Tantangan
Tulis program atau fungsi yang mensimulasikan gambar Powerball, tidak mengambil input tetapi mengeluarkan 5 angka acak berbeda dari 1 hingga 69 inklusif, dan kemudian satu angka "Powerball" acak dari 1 hingga 26 inklusif (yang bisa merupakan pengulangan salah satu dari 5 angka awal).
Angka "Powerball" harus selalu menjadi angka terakhir dalam output, tetapi sebaliknya urutan 5 angka pertama tidak masalah.
6 angka harus berupa output dalam desimal , baik dipisahkan oleh spasi atau baris baru, dengan baris tambahan tunggal opsional. Koma, tanda kurung, dan karakter lain tidak diizinkan dalam output.
Jadi ini akan menjadi output yang valid (menggunakan angka-angka dari gambar terakhir ):
32 16 19 57 34 13
32
16
19
57
34
13
Semua 292201338 hasil yang mungkin harus dimungkinkan dengan probabilitas seragam. Anda dapat menggunakan generator nomor pseudo-acak bawaan dan menganggap mereka memenuhi standar ini.
Berikut ini adalah implementasi referensi yang tidak disatukan yang bekerja di Python 2 atau 3:
import random
print(' '.join(map(str, random.sample(range(1,70), 5) + [random.randint(1, 26)])))
Kode terpendek dalam byte menang.
Perhatikan bahwa saya tidak memiliki afiliasi dengan Powerball dan tidak benar-benar menyarankan Anda bermain. Tetapi jika Anda memenangkan apa pun dari angka yang dihasilkan oleh salah satu program di sini, saya yakin kami akan senang mendengarnya. : D
5! = 5*4*3*2*1
cara untuk mengatur 5 hal, jadi Anda memperhitungkannya.Jawaban:
Dyalog APL, 10 byte
Diad
?
adalah ⍺ nomor acak yang berbeda dalam [1, ⍵], dan monadic?
adalah nomor acak tunggal.Coba di sini .
sumber
1+(5?69),?26
.CJam, 16 byte
Cobalah online.
sumber
:)
membuat hal-hal sedikit lebih besar, seperti bagaimana senyum orang asing dapat membuat Anda sedikit lebih bahagia.:)
jika saya memenangkan lotre. +1MATL , 10 byte
Menggunakan versi saat ini (9.2.0) dari bahasa / kompiler.
Contoh
Dengan kompiler dijalankan di Matlab:
Dengan kompiler dijalankan pada Oktaf:
Lima angka pertama dipisahkan oleh spasi, bukan oleh baris baru. Ini karena
randsample
fungsi mendasar Octave berperilaku berbeda dari Matlab (dan telah diperbaiki dalam versi baru dari kompiler). Bagaimanapun, baris baru dan ruang sama-sama diizinkan oleh tantangan.Sunting (4 April 2016) : Cobalah online!
Penjelasan
Lihat fungsi Matlab yang relevan:
randsample
danrandi
.sumber
Ruby,
3332Ruby kebetulan memiliki metode bawaan, sampel, yang memilih nilai acak dari array tanpa penggantian. Terima kasih kepada QPaysTaxes untuk menunjukkan bahwa saya tidak memerlukan parens.
sumber
p
di beberapa titik, yang sebenarnya memecah sintaks parsing untuk versi itu.R,
3029 byteThe
sample
Fungsi melakukan simple random sampling dari input. Jika bilangan bulat tunggal diberikan sebagai argumen pertama, pengambilan sampel dilakukan dari 1 ke argumen. Ukuran sampel adalah argumen kedua. Kami menggunakan opsi default pengambilan sampel tanpa penggantian.Cobalah online
sumber
c
bukannyacat
c
, ini hanya potongan, yang tidak diizinkan secara default.Python 3.5, 63 byte
Ini pada dasarnya implementasi referensi golf. Perhatikan bahwa 3,5 diperlukan untuk memerciki dalam argumen yang tidak terakhir.
sumber
Oktaf,
3532 byteHobi Calvin mengkonfirmasi bahwa
ans =
tidak apa-apa ketika menggunakan fungsi, jadi:Ini memiliki kesamaan dengan Memming ini jawabannya , tetapi menggunakan pengindeksan langsung yang hanya mungkin dalam Octave, dan itu
57 byte lebih pendek, jadi saya pikir itu layak postingan pula.randperm(69)
membuat daftar dengan permutasi acak angka 1-69. Dimungkinkan untuk secara langsung mengindeks daftar (tidak mungkin di MATLAB) untuk hanya mendapatkan 5 angka pertama seperti ini(1;5)
. Daftar ini diikuti olehrandi(26)
yang mengembalikan angka tunggal antara 1 dan 26.Tua:
Daftar yang dihasilkan ditampilkan menggunakan
disp
.sumber
PowerShell v2 +,
3127 byteMembutuhkan versi 2 atau lebih baru, karena
Get-Random
tidak ada dalam v1 (yangGet-
tersirat, dan-Maximum
posisional). Output dipisahkan baris baru.Tidak Disatukan:
sumber
Random -ma 27
bisaRandom 27
seperti-Maximum
dicocokkan dengan posisi 0Shell + coreutils, 31
sumber
MATLAB, 40
Aku tahu. Ini solusi yang membosankan.
sumber
PHP, 69 byte
Jawabannya cukup lurus ke depan. Hasilkan 1-69
range
, lalu gunakanarray_rand
untuk mengambil 5 kunci acak dari array, dan gema$k+1
nilai (0-diindeks), kemudian gema int acak dari 1-26.sumber
C #,
153 byte140 byteBerkat "McKay":
Solusi 153 byte:
Solusi sederhana menggunakan Linq dan pengocokan menggunakan GUID.
sumber
string.Join(" ", ....take(5).Concat(....Take(1)))
Pyth -
131413 byteMain golf mungkin, ini hanya FGITW.
Cobalah online di sini .
sumber
<... 5
ke>5...
. Kode terakhirjb>5.SS69hO26
Brachylog , 40 byte
Penjelasan
Brachylog tidak memiliki built-in untuk nomor acak (belum ...) jadi kita harus menggunakan predikat SWI-Prolog untuk itu:
random/1
. Kami dapat memasukkan kode SWI-Prolog di Brachylog menggunakan backquotes.sumber
JavaScript (ES6),
1068684 byteKarena kami tidak dapat secara unik mencicipi sampel dalam JavaScript, ini berfungsi dengan membuat Set (yang hanya memiliki nilai unik), menambahkan secara acak Randand (1-69) hingga ada 5 yang unik, menambahkan nomor acak (1-26), kemudian bergabung dan mengembalikan semuanya.
sumber
Elixir , 83 Bytes
Ketika hanya
IO.puts
memasukkan array bilangan bulat, Elixir akan menginterpretasikan bilangan bulat sebagai karakter dan karenanya mengeluarkan beberapa string sebagai ganti nomor powerball yang diinginkan. Jadi, kita harus mengurangi array integer menjadi sebuah string.sumber
Ruby,
474339 byteSaya pikir itu bisa golf lagi, tapi saya akan bekerja setelah saya selesai mengagumi betapa cantiknya kode ini, mengingat.
Cara kerjanya hampir sama dengan cara lainnya: Ambil larik angka 1 hingga 69, kocok, dapatkan lima pertama, hasilkan, lalu keluarkan angka acak antara 1 dan 26.
Saya telah melalui beberapa iterasi sebelum memposting ini:
(di mana
<newline>
diganti dengan baris baru yang sebenarnya)EDIT: Ups, tidak melihat jawaban Ruby yang sudah ada sebelumnya. Saya tersandung
sample
dan sedang bergulir ke bawah untuk mengedit jawaban saya, tetapi kemudian saya melihatnya ... Oh well. Skor akhir saya adalah 43 byte, tetapi saya akan terus bermain golf sedikit untuk melihat seberapa baik yang bisa saya lakukan.sumber
Mathematica, 64 byte
Cukup sederhana.
sumber
StringJoin
=""<>##&
Perl 5, 59 byte
Itu adalah subrutin; gunakan sebagai:
sumber
-E
sebagai gantinya-M5.010 -e
-1+2*int rand 2
denganrand>.5?1:-1
?;say$==
dengan,$==
-M5.010
tidak menghitung pula jadi saya tidak repot-repot menyingkat itu. Saya pikir saya mencoba koma bukan yang lainsay
dan tidak berhasil. Tetapi aturan sortir yang baru adalah ide yang bagus, terima kasih. Saya akan mengujinya ketika saya memiliki kesempatan dan mengeditnya.PHP, 65 byte
Berkat jawaban PHP lainnya di halaman ini. Saya menulis sebuah program sendiri, dan ternyata itu adalah jawaban yang persis sama dengan yang ditulis oleh Samsquanch, yang mendorong saya untuk mengambil langkah lebih jauh untuk menghemat beberapa byte.
Jika ada yang bisa menemukan cara untuk menambahkan satu array ke yang lain di sini yang kurang dari 5 byte yang dibutuhkan saya untuk bergabung dengan nomor powerball setelahnya, saya akan sangat menghargai itu, karena itu membuat saya gila! Yang terbaik yang bisa saya buat adalah setelah
array_rand
dan sebelumnyajoin
, memiliki pernyataan seperti+[5=>rand()%25]
, tapi itu byte tambahan hanya setelah itu.Jalankan melalui baris perintah. Mencicipi:
Keluaran:
sumber
PARI / GP,
7170 byteIni menghasilkan permutasi acak [1..69], lalu mengambil 5 pertama.
Sayangnya ini adalah pengguna yang tidak efisien dari keacakan, mengkonsumsi rata-rata 87 byte entropi dibandingkan dengan informasi-teori ideal 3,5. Ini terutama karena seluruh permutasi dihasilkan bukan hanya 5 anggota pertama, dan juga karena perms diperintahkan (kehilangan lg 5! = ~ 7 bit). Selanjutnya,
random
gunakan strategi penolakan daripada menggunakan kode aritmatika. (Ini karena PARI menggunakan xorgen Brent, yang cukup cepat sehingga biaya overhead dari strategi yang lebih rumit jarang bermanfaat.)Ada tiga perubahan 'jelas' yang tidak berfungsi di bawah versi gp (2.8.0) saat ini.
random
danprint
dapat disimpan dalam variabel, danprint
bisa dipanggil langsung daripada melalui->
fungsi anonim :Bersama-sama ini akan menghemat 9 byte. Sayangnya kedua fungsi ini valid tanpa argumen, dan karenanya dievaluasi segera daripada disimpan, jadi ini tidak menghitung output yang diinginkan.
sumber
Kode Mesin Intel x86, 85 byte
Yah kadang-kadang mencetak angka yang sama jika demikian, coba saja lagi dengan menekan tombol.
Kompilasi dengan:
Pastikan untuk menyelaraskannya ke ukuran disket (tambahkan angka nol di bagian akhir) untuk memasangnya ke vm (tidak perlu sistem operasi apa pun).
Membongkar:
sumber
C, 142 byte
Tidak terlalu senang dengan solusi ini karena rasanya harus ada lebih banyak kesempatan bermain golf. Saya akan melihatnya lagi besok dengan mata segar. Coba di sini .
sumber
Swift, 165 byte
Dapat dengan cepat dijalankan di Playground Xcode.
EDIT: Masalah saat ini di sini adalah bahwa secara teori ini memungkinkan untuk berjalan selamanya dalam loop while jika arc4random_uniform entah bagaimana terus menarik nomor yang sama. Peluang yang terjadi, untuk jangka waktu yang lama, mungkin lebih baik daripada peluang memenangkan Powerball.
sumber
Perl 6 ,
3231 byteMengubahnya menjadi fungsi yang mengembalikan sebuah string, saya dapat menghapus 4 byte (
put␠
) sementara hanya menambahkan 3 ({~
}
)Pemakaian:
Jika suatu fungsi diizinkan untuk mengembalikan daftar nilai, yang berikut ini juga akan berfungsi.
(Kalau tidak, akan sama seperti di atas tetapi di dalam
{ }
)fungsi yang mengembalikan daftar datar tunggal
fungsi yang mengembalikan daftar dengan 5 angka pertama dalam sub daftar
fungsi yang mengembalikan daftar dengan 5 pertama dalam sub daftar, dan Powerball di sub daftar lainnya
sumber
Serius, 35 byte
Upaya pertama saya pada jawaban dalam bahasa golf.
Terasa lebih lama dari seharusnya.
Pengulangan kemungkinan bisa dihapus dengan W , tetapi tampaknya rusak di penerjemah online dan saya tidak ingin memposting kode yang belum diuji.
Sayang sekali { tidak berfungsi di daftar.
Kode:
Hex dump:
Penjelasan:
Penerjemah online
sumber
Lua, 96 Bytes
Solusi sederhana, menggunakan tabel sebagai set dengan meletakkan nilai di dalamnya
table[value]=truthy/falsy
agar dapat memeriksa apakah mereka di dalamnya atau tidak.Saya kehilangan 5 byte karena saya harus menetapkan nilai pertama dari tabel saya, kalau tidak saya tidak akan masuk ke dalam
while(o[n])
loop dan hanya akan outputn
sebelum menggunakan fungsi acak. Karena Lua menggunakan tabel berbasis 1, saya juga harus memaksanya untuk meletakkan nilai pertamanya ke sel[0]
, jika tidak saya tidak bisa menampilkan a1
.Tidak Disatukan:
sumber
C ++, 252 byte
Golf:
Tidak Disatukan:
sumber