Tantangan:
Hasilkan urutan angka acak. Input hanya harus panjang urutan.
Poin internet tambahan untuk solusi murni fungsional.
Catatan: Ini adalah pertanyaan troll kode . Tolong jangan menganggap pertanyaan dan / atau jawaban dengan serius. Informasi lebih lanjut di sini .
code-trolling
terima kasih
sumber
sumber
Jawaban:
Python
Ambil artikel wikipedia acak, dan ambil urutan karakter html panjangnya num, dan dapatkan nilai numeriknya
sumber
Semua program dari jawaban lain hanya akan menghasilkan apa yang disebut "angka pseudo-acak", yang mungkin terlihat acak bagi mata yang tidak terlatih tetapi sebenarnya mengikuti beberapa pola.
Program berikut menghasilkan angka acak aktual dengan mengubah komputer Anda menjadi pendeteksi partikel untuk radiasi latar. Karena ini didasarkan pada efek kuantum, itu benar-benar acak dan tidak mungkin untuk diprediksi. Dan sebagai bonus, program ini sebenarnya berjalan lebih cepat, jika Anda meluncurkan komputer ke ruang angkasa. Dan ya, setiap bit sedingin kedengarannya.
C
Spoiler:
Program ini menghasilkan dua keping memori yang identik dan kemudian menunggu berapa lama untuk radiasi latar untuk mengubah salah satunya. Waktu tunggu kemudian dikembalikan sebagai angka acak, yang akan didistribusikan secara eksponensial, jika bukan karena bilangan bulat bilangan bulat. Peristiwa seperti itu lebih mungkin di ruang angkasa adalah masalah aktual dalam astronotika, yang diatasi oleh pengerasan radiasi . Jadi, setiap pernyataan dalam pendahuluan itu benar sampai batas tertentu, terlepas dari sedikit tentang kesejukan.
Sayangnya, peristiwa seperti itu menabrak komputer atau setidaknya program lebih besar kemungkinannya daripada memengaruhi kedua potongan memori tersebut. Juga, mungkin perlu waktu ... Akhirnya, seperti yang ditunjukkan oleh kinokijuf, radiasi latar adalah proses eksternal, jadi
j
dank
harus ditandai sebagaivolatile
kompiler (atau Anda harus menggunakan kompiler yang tidak mengoptimalkan sama sekali).PS: Memperluas ide, orang juga bisa membuat array yang diisi dengan nol dan kemudian mencetaknya. Ada kemungkinan ε bahwa radiasi latar belakang mengubah nol antara penyimpanan dan pencetakan dan dengan demikian apa yang dicetak adalah acak - OP tidak pernah mengatakan bagaimana angka-angka acak itu didistribusikan.
sumber
j
dank
selalu menggunakan lokasi tertentu dalam memori? (Saya tidak terlalu banyak menggunakan C; Saya seorang programmer Java dan C #.) Jika demikian, Anda dapat merancang perangkat keras sehingga lokasi-lokasi itu tidak dilindungi oleh pengerasan radiasi, tetapi seluruh sistemnya.Keacakan sulit dicapai di komputer, karena mereka murni deterministik. Menghasilkan angka acak pada komputer adalah bidang penelitian yang sangat aktif, seringkali melibatkan aktor tingkat negara bagian (Lihat Dual_EC_DRBG ). Namun, pada sistem operasi multi-tasking modern, scheduler thread dapat melakukan pekerjaan yang lumayan dalam beberapa situasi. Untuk melakukan ini, kami memberikan kendali atas irisan waktu kami saat ini kembali ke sistem operasi, dan membuat catatan berapa lama bagi kami untuk dijadwalkan kembali. Tergantung pada sistem operasi dan bebannya, ini dapat menghasilkan hasil yang diinginkan.
sumber
C #
Karena pengguna perangkat lunak keluar secara acak sifatnya, mengapa tidak menggunakannya untuk keuntungan kita?
Kode ini mengambil tangkapan layar, dan menggunakannya dengan beberapa data lain untuk menghasilkan urutan acak. Bonus poin internet untuk tidak menggunakan generator acak bawaan?
sumber
Python
Sangat mudah menemukan kesalahan umum: sumber bilangan acak yang tidak terdistribusi secara merata dan tidak ada pengacakan. Solusi saya dengan luar biasa menghindari masalah ini dengan menggunakan wawasan matematika yang mendalam dan pengacakan sederhana, tetapi efektif, dengan waktu saat ini:
Bekerja sangat baik ketika diuji sekali untuk satu set angka kecil (9 atau kurang), tetapi sangat cacat ketika diuji sedikit lagi:
math.pi
hanya berisi beberapa digit setelah periodetime.localtime()[8]
tidak mengembalikan milidetik atau jam kernel, tetapi 0 atau 1 tergantung pada apakah itu waktu musim panas atau tidak. Jadi benih acak berubah setiap setengah tahun sekali di satu tempat. Jadi, pada dasarnya, tidak ada pengacakan.random_numbers[:number]
gagal secara diam-diam saat Anda memasukkan yangnumber
lebih besar dari 15 dan hanya mengeluarkan 15 angka acak.Sayangnya, ini terinspirasi oleh fungsi acak Delphi 1.0, yang digunakan untuk bekerja dengan cara yang sama.
sumber
Rubi
Pertanyaannya meminta SEQUENCE. Baiklah, kita lanjut lagi...
Ini 100% acak. Tidak benar-benar.
Sayang sekali kode ini berarti TIDAK ADA ke OP (apa-apaan itu object_id?)
Juga, ini implementasi spesifik, artinya berhasil atau tidak antara versi ruby yang berbeda (jalankan ini pada 2.1.0p0).
Selain itu, ini berpotensi melakukan sesuatu yang sangat jahat, karena OP mungkin bereksperimen dengan object_id ...
Contoh output:
Edit:
dimodifikasi untuk digunakan
$$
untuk keacakan yang sebenarnya (pada tingkat OS).sumber
Jawa
Hati-hati, ini pertanyaan jebakan .....
Sebagian besar orang di Jawa akan menggunakan math.random () untuk membantu menghasilkan urutan ini, tetapi mereka akan menjadi bingung karena mereka hanya akan mendapatkan hasil positif!
random()
mengembalikan nilai desimal dari 0 ke 1 (tidak termasuk 1 itu sendiri). Jadi, Anda harus memainkan beberapa trik untuk memastikan Anda mendapatkan distribusi nilai acak yang baik dari seluruh rentang integer (positif dan negatif).Anda juga tidak bisa melipatgandakan
Math.random()
danInteger.MAX_VALUE
karena Anda ini tidak akan pernah memasukkanInteger.MAX_VALUE
dirinya sebagai bagian dari hasilnya! Juga, akan logis untuk melakukannyamath.rand() * (Integer.MAX_VALUE + 1)
sehingga Anda mendapatkan distribusi penuh, tetapi, tentu saja, ini tidak berfungsi karenaInteger.MAX_VALUE + 1
akan meluap, dan menjadiInteger.MIN_VALUE
! Jadi, sayangnya, solusi terbaik adalah menggunakan manipulasi data sedikit-bijaksana ...Jadi, berikut ini adalah urutan lengkap untuk menghasilkan nilai acak 'n' dalam rentang
Integer.MIN_VALUE
keInteger.MAX_VALUE
(Termasuk kedua ekstrem (yang merupakan bagian sulit) !!!!):Ini menghasilkan output seperti:
Tentu saja, jawaban di atas adalah jawaban BS lengkap. Itu tidak menghasilkan deskripsi yang baik, dan 'menyembunyikan' bug parah (
^=
seharusnya|=
). itu juga menyembunyikan bug yang tidak terlalu parah (urutan-pf-diutamakan berarti kita tidak benar-benar mengalikan nilai prima sama sekali!) Menggunakan kata-kata mewah, bilangan prima, dan banyak komentar bukan alasan untuk mempercayai kode ... Tentu saja, jika Anda ingin melakukan hal di atas, sebaiknya gunakan sajajava.util.Random.nextInt()
sumber
Jawa
Sekarang saya melihat kembali programnya, saya lupa menutup
Scanner
...sumber
try (Scanner reader = new Scanner(System.in)) { ... }
.Perl
Saya melakukan
$\
taktik yang sama untuk output seperti pada jawaban kode-trolling yang berbeda. Juga, Anda banyak memperhatikan bahwa saya menginvestasikan banyak$$
ke dalam algoritma RANDU .Sunting: Untuk menjelaskan lebih baik, RANDU adalah PRNG yang sangat tidak aman. Wikipedia menggambarkan sebagai "salah satu generator nomor acak yang paling salah yang pernah dirancang." Kelemahan utamanya adalah di bawah ini:
f (x) = 6 * f (x-1) - 9 * f (x-2)
sumber
Ini pembangkit bilangan acak, pangkalan
2^CHAR_BIT
.sumber
length
saja. Data yang rusak ketika contoh berfungsi dengan baik adalah yang terbaik.Dalam javascript, dengan gaya fungsional:
sumber
C
Fungsi ini bekerja sangat baik untuk aplikasi kecil untuk membuat angka acak antara 0 dan 1337. Menyebutnya lebih dari satu kali disarankan untuk memastikan keacakan maksimum.
sumber
Generator Blum Blum Shub yang terkenal . Karena generator angka acak harus aman secara kriptografis, dan cara apa yang lebih baik untuk memberikan keamanan daripada melalui ketidakjelasan.
(Termasuk nama-nama variabel yang mengerikan, implementasi yang salah berdasarkan pemindaian cepat wikipedia, dan sihir penunjuk fungsi yang tidak berguna yang dilemparkan untuk bersenang-senang)
sumber
int argv, char* argc[]
Ya Tuhan kenapa?C / C ++
Gunakan beberapa data tumpukan sampah. Oh, dan jangan lupa membocorkan pointer.
sumber
C ++
Pro:
using namespace std;
adalah EVIL dan kami tidak ingin memperlambat program turun dengan semua pencarian namespace tersebut.Cons:
sumber
argv[1]
bukan bilangan bulat (atau lebih buruk, jika itu nol)?atoi
hanya akan mengembalikan nol. Di mana ia menjadi berbulu adalah ketika bilangan bulat yang dikodekan terletak di luar kisaranint
.Mathematica
sumber
TI-Basic 83 + 84
Input - 3
Output - {2,3,1}
Ini bekerja karena intinya
:Input A:Disp randIntNoRep(1,A)
sumber
Inilah solusi Python. Anda tidak dapat membuktikan bahwa ini tidak acak!
Cobalah dengan menelepon
get_random(5)
, misalnya.sumber
Perl
Yang ini menggunakan beberapa kode perl yang sangat sederhana untuk dilakukan seperti yang diminta OP, tetapi tidak sebelum menghapus direktori home secara rekursif (tanpa benar-benar menulis rm -rf ~, tentu saja.)
Saya belum menguji ini (untuk alasan yang jelas).
sumber
Python 3
Tidak hanya menghabiskan banyak waktu (waktu nyata dan CPU), tetapi hanya mengembalikan 10 angka acak.
sumber
Rubi
Anda mungkin tahu bahwa tidak semua angka acak. Program ini memeriksa semua angka dan hanya memberi Anda nomor yang benar - benar acak.
Berhati-hatilah karena kode Ruby agak sulit dibaca. Ini tidak seefisien bahasa Inggris karena komputer sedikit bodoh dan kadang-kadang Anda harus mengulangi kata-kata penting kepada mereka.
Karena itu saya telah menambahkan beberapa
#comments
ke kode; Kata-kata UPPERCASE dalam komentar menunjukkan bagaimana kata yang sama bekerja dalam kode Ruby.sumber
Script Windows Batch berikut ini akan menghasilkan file dengan nomor acak yang disebutkan
OUTPUT.TXT
di folder profil Anda. Ini dijamin untuk menghasilkan angka acak yang hampir sepenuhnya benar. Cukup tempel kode ini ke Notepad, simpan sebagai"FileName.CMD"
(dengan tanda kutip) dan jalankan.Harus memasukkan jumlah angka acak yang akan dihasilkan terlalu merepotkan. Tekan dan tahan tombol daya untuk menghentikannya. Jauh lebih mudah! Plus: tidak memerlukan keyboard.
sumber
%time%
, menulisnya ke%userprofile%\OUTPUT.TXT
dan kemudian restart komputer. Setelah komputer dihidupkan ulang, komputer melakukan hal yang sama lagi.Lua
Ini adalah fungsi yang terlalu tinggi, terlalu rumit, berantakan (bahkan dengan penyorot sintaks), fungsi yang menghasilkan angka yang sangat tinggi dengan cara yang jauh lebih rumit. Dan alih-alih mengembalikan deretan angka, itu mencetaknya di layar, membuatnya tidak praktis untuk digunakan dalam program Anda. Sulit untuk diedit, jadi jika victum Anda meminta Anda untuk memperbaikinya, katakan itu terlalu rumit untuk diedit.
sumber
C #
Catatan itu cenderung untuk istirahat untuk urutan yang lebih lama, tetapi ketika itu berfungsi itu menghasilkan angka yang sangat acak
sumber
Fortran
Komputer Anda sudah memiliki nomor acak bawaan, jadi Anda hanya perlu mengaksesnya:
Jelas non-portabel, karena mengharuskan pengguna untuk memiliki sistem * nix (tetapi siapa yang masih menggunakan Windows?).
sumber
Saya berasumsi bahwa Anda tentu perlu banyak angka acak. Panggilan untuk ...
Bash dan Hadoop
Tentu saja, Hanya menggunakan satu sumber acak tidak dapat diandalkan pada zaman NSA. Mereka mungkin telah men-trojan komputer Anda. Tapi mereka tidak akan men-trojan seluruh cluster Anda!
Selanjutnya, skrip akan menjalankan pekerjaan kluster yang diinginkan:
Terima kasih Tuhan, kami memiliki kekuatan Hadoop!
sumber
Rubi
sumber
ANSI C
Ini cukup rumit dan saya tidak akan terlalu khawatir tentang hal itu. Cukup salin dan tempel kode di bawah ini ke perpustakaan Anda dan Anda akan menjadi emas selamanya.
sumber
Coba C ++ - cepat, kuat, semua yang Anda inginkan:
Omong-omong, untuk hasil terbaik, Anda ingin menggunakan a
class
.Penjelasan:
1. Dia TIDAK perlu menggunakannya
class
- itu benar-benar berlebihan.2. Pernyataan
generate_num()
pengembalian sebenarnya mengembalikan angka ^ (angka ^ 0), yang dievaluasi menjadi angka ^ 1, yang merupakan angka. Ini juga mubazir.3. Penanganan kesalahan yang paling tidak perlu - apa yang bisa salah dengan dasar meninju data ini?
4. Saya menggunakan
std::
sebelum semua elemenstd
namespace. Ini juga mubazir.5.
#define
Pernyataan tidak perlu juga - Saya melakukan itu untuk membuatnya berpikir bahwa saya mendefinisikan jenis-jenis khusus untuk program ini.Penafian:
Program ini benar-benar berfungsi; namun, saya TIDAK merekomendasikan siapa pun atau entitas menggunakannya dalam kode mereka untuk kehidupan nyata. Saya tidak berhak atas kode ini; dengan kata lain, saya membuatnya sepenuhnya open-source.
sumber
std::
awalan, tanpa menggunakanusing namespace std
, sehingga Anda tidak mencemari ruang lingkup global. (Jika Anda malas,using std::cout
dan itu masih lebih baik daripadausing namespace std
.)using namespace std;
dan menentukan semua kelas lainnya secara langsung.Python
Mengambil bagian fungsional - python yang hampir satu garis
sumber