Sebagai lelucon kecil di kantor seseorang menginginkan sebuah skrip yang secara acak mengambil nama, dan mengatakan orang itu akan membuat minuman.
Sebut saja orang-orang seperti John, Jeff, Emma, Steve dan Julie.
Saya pikir itu akan lucu untuk membuat skrip yang tampak acak secara sekilas, tetapi sebenarnya selalu memberikan orang yang sama sebagai output (Terserah Anda yang Anda pilih).
Jawaban dengan suara terbanyak menang setelah seminggu
Dan pemenangnya adalah....
Paul R dengan (saat ini) 158 suara.
Jawabannya sangat bagus, dan jika ada orang lain yang memiliki ide lain yang belum diposting, silakan tambahkan, saya suka membacanya.
Jawaban:
C
Sangat penting untuk memutuskan siapa yang membeli secepat mungkin, agar tidak membuang waktu minum yang berharga - maka C adalah pilihan yang jelas untuk mendapatkan kinerja maksimal:
Penjelasan:
sumber
PHP
Tidak bisa melepaskan ini, jadi ini yang lain:
sumber
Haskell
Terlalu transparan jika selalu mengembalikan nama yang sama jadi coba yang berikut ini
Setiap kali Anda menginginkannya acak:
Dan untuk target malang Anda:
sumber
Bash - kesederhanaan maksimum
Contoh yang sangat sederhana - mari kita hindari masalah dengan melakukannya dengan cara buku teks. Jangan lupa untuk menyemai generator dari jam sistem untuk hasil yang bagus!
Bonus:
sumber
$SECONDS
ftw! \ o /source
ini, bukan hanya menjalankannya? Akankah shebang masih memicu shell baru atau sesuatu?source
itu persis sama seperti jika Anda mengetik sendiri perintah pada commandline; #! / bin / bash adalah komentar sehingga diabaikan. Ini berlaku untuk semua skrip.C #
sumber
rng.Next()
hanya dipanggil sekali, array akan diurutkan berdasarkan konstanta, sehingga tidak ada perubahan (atau perubahan yang hanya bergantung pada algoritma pengurutan).names = names.OrderBy(name => rng.Next());
=>
menunjukkan bahwa ini adalah ekspresi C # lambda (penutupan).PowerShell
Ini akan selalu ditampilkan
John
.sumber
Q
sumber
-S 1234
opsi atau lakukan\S 1234
dari penerjemahPerl
sumber
@
awalan), dalam "konteks daftar," ditafsirkan sebagai semua elemennya, tetapi dalam "konteks skalar," adalah skalar yang sama dengan jumlah total elemen dalam daftar. Oleh karena itu, di dalam string, variabel daftar memiliki konteks daftar dan diinterpolasi, dan kita dapatkanPerson X is buying
. Tetapi sebagai indeks array, ia mendapatkan konteks skalar, dan ditafsirkan sebagai 1.my @index = ...
, ia langsung bertanya-tanya "WTF ?!".my @letters = 'a' .. 'z';
my @squares = map $_**2, 1..20;
my @sorted = sort { lc $a cmp lc $b } @words;
dll.ECMAScript
Itu selalu memilih Julie.
sumber
(a,b)=>(a=b[0],b)
). Saya sudah mengklarifikasi jawaban saya.C #
sumber
var random = new Random(5); var id = random.NextInt(5);
C #
Petunjuk:
Menjawab:
sumber
AddRange
kacauConcat
ketika menambahkan nama ke aList<string>
. Apakah terpikir oleh saya untuk memiliki Hashset dengan IEqualityComparer yang licik, tetapi itu akan menjadi terlalu tidak biasa. Dalam kredit saya, tidak ada banyak (jika ada) jawaban berbasis benih ketika saya memposting ini.bash / coreutils
Ini diambil hampir kata demi kata dari naskah yang saya tulis untuk tujuan yang sama.
sumber
-r
menentukan jenis pembalikan (leksikografis), jadi Steve akan selalu dipilih. Itu bisa dilihat sebagai kesalahan ketik-R
untuk jenis acakRubi
sumber
Rubi
sumber
Perl
three
srand
s akan membuatnya tiga kali lebih acak!penjelasan
sunting:
setelah melalui kode, salah satu dari lima orang telah memutuskan untuk memperbaiki kesalahan yang jelas, menghasilkan program berikut:
dapatkah Anda memberi tahu siapa yang melakukannya hanya dengan melihat kode?
penjelasan:
sumber
$RANDOM
adalah fitur nyata dalam bash, ksh dan zsh (tetapi tidak dalam perl).Python
Semua orang tahu bahwa Anda tidak bisa mempercayai keacakan dalam ruang sampel sekecil ini; untuk membuatnya benar-benar acak, saya telah meninggalkan metode usang memilih nama dari daftar, dan sebaliknya program saya akan mengeja nama yang sepenuhnya acak. Karena sebagian besar nama di kantor memiliki 4 huruf, kami akan setuju untuk itu.
sumber
C
Maaf, Jeff!
sumber
C ++ x11
sumber
Scala
Saya tahu pengguna saya akan skeptis, jadi saya telah menyertakan bukti bahwa keacakan saya benar-benar adil!
Satu contoh dijalankan:
Kecuali orang lain sangat beruntung, John akan selalu membeli minuman.
sumber
Javascript (dengan Underscore.js )
Karena javascript tidak memiliki shuffle bawaan, kami akan menggunakan Underscore.js
sumber
JavaScript
Percobaan kedua, yang ini sedikit rumit:
sumber
N
dalam JavaScript tahu tentangarguments
variabel.C ++
Agar adil kita harus menjalankan banyak, banyak cobaan dan memilih siapa yang paling sering dipilih.
sumber
1<<31 == 0x80000000
tidak peduli apa, dengan definisi<<
, dan pada komplemen 32-bit 2, ituINT_MIN
. Apakah Anda mungkin memikirkan1<<32
yang mungkin atau tidak== 0
? (Karena pada x86,1<<32
biasanya bernilai 1 ...)T-SQL (2008+)
Penjelasan:
Perbaikan yang disarankan:
sumber
Lua
sumber
math.random()
tanpa argumen juga mengembalikan angka dalam kisaran[0,1)
. -1 untuk tidak menangkap itu.Idiomatik C ++ 11
Ketika minuman terlibat, sangat penting untuk mendapatkan informasi terbaru tentang standar dan gaya pengkodean terbaru; ini adalah contoh yang bagus dari pemilih nama C ++ 11 yang sangat efisien dan sesuai idiom.
Ini diunggulkan dari sistem jam, dan output benih bersama dengan nama untuk verifikasi setiap kali.
Coba ini langsung: http://ideone.com/KOet5H
sumber
JavaScript
sumber
Python
sumber
random.seed()
adalah2
(default). Jika Anda lulusversion=1
,hash()
string akan digunakan sebagai seed alih-alih seluruh string, dan karena Python secara acak seeded nilai hash string dimulai pada 3,2, Anda akan mendapatkan nama yang benar-benar acak.Perl
Sebaiknya Emma tidak melupakan dompetnya! Berjalan di bawah
strict
danwarnings
.sumber
JavaScript
sumber
parseInt(Math.random(0, 4))
dan mungkin menambahkan komentar seperti -Math.random
mengembalikan ganda, jadi konversikan ke integer terlebih dahuluMath.random
tidak mempedulikan parameter kita yang sedikit. Ia memilih angka dengan caranya sendiri. yang|0
benar pembulatan hasil yang tak terduga, dan bukan sumber tipu daya apapun.|0
sangat jelas bagi sebagian orang (kita semua kemungkinan besar), tetapi saya berani bertaruh ada banyak yang tidak tahu apa fungsinya. Itulah kelompok yang saya andalkan untuk ditipu.|0
, jika Anda tahu apa yang dilakukannya, sepertinya itu pembulatan ke bawah, dan itu adalah pembulatan ke bawah, sehingga tidak penipuan. (Dan jika seseorang tidak tahu apa yang|0
dilakukan, maka tidak ada gunanya kode menipu; Anda bisa memberi tahu mereka apa pun yang Anda ingin mereka percayai.) Sebaliknya, perilaku tak terduga dalam jawaban Anda didasarkan pada fakta yangMath.random(0,4)
secara fungsional identik denganMath.random()
, karenaMath.random
tidak menggunakan parameter.J
Kasihan Julie ... Trivia: ini mungkin J terbersih yang pernah saya tulis ...
sumber