Algoritma pengocokan kartu pada game FreeCell di Windows
(solitairelaboratory.com)FreeCell di Windows yang kemungkinan pernah dimainkan banyak orang menyusun kartu secara acak, dan setiap susunan kartu diberi nomor. Jika memilih nomor yang sama, susunan kartunya akan sama.
Sampai sebelum Windows 2000, nomornya tersedia dari 1 hingga 32.000, tetapi sejak XP bertambah menjadi 1.000.000.
Algoritma yang menghasilkan susunan kartu saat nomor dimasukkan telah dipublikasikan, sehingga digunakan juga di program FreeCell lainnya.
Algoritma ini diimplementasikan dalam kode C yang singkat, dan bergantung pada fungsi rand() dan srand() yang diimplementasikan oleh compiler MS.
8 komentar
Tag-hyung, Anda jago sekali.
Algoritme pembangkit bilangan acak pada dasarnya tampak seperti
random, tetapi sebenarnya menggunakan relasi rekurens untuk menghasilkan deret bilangan pseudo-random yang tidak benar-benar acak. Setiap implementasi fungsirand()memiliki cara yang berbeda, tetapi hampir semua algoritme memiliki sifat umum bahwa jika seed pertama sama, maka deret bilangan acak yang mengikuti juga akan sama. Jadi, jika algoritme pengaturan kartu bersifat deterministic, semua susunan kartu pada akhirnya juga ditentukan secara deterministic oleh seed.Sedikit keluar dari topik, tetapi seberapa "acak" bilangan pseudo-random yang bisa dibuat juga telah lama menjadi salah satu topik penelitian. TAOCP Vol.2 juga membahas hal ini secara singkat.
Sebenarnya, di komputer tidak ada konsep benar-benar acak.
Karena itu, biasanya perilaku manusia diukur dalam satuan ms dan digunakan sebagai seed acak.
Saya kira bilangan acak menggunakan timestamp waktu saat ini, ternyata saya salah paham hehe. Terima kasih sudah berbagi.
Saat inisialisasi, banyak yang memang menggunakan waktu sebagai seed. Karena waktu terus berubah.
Sebagai referensi, di bantuan Windows tertulis, “meskipun belum terbukti, semua game yang dimainkan di sini memiliki solusi”, tetapi menurut upaya banyak orang, nomor 11982 hingga kini dikenal sebagai permainan yang tidak bisa dimenangkan.
Bahkan setelah melewati nomor 32.000, ada juga susunan kartu yang dikenal tidak bisa dimenangkan seperti nomor 146692, 186216, 455889, 495505, 512118, 517776, dan 781948.
Lho, bagaimana mereka bisa tahu cara menuliskannya tapi tetap tidak bisa memecahkannya? Banyak juga orang-orang yang luar biasa gigih!
Orang-orang yang mengerikan...!