Tujuan saya:
Saya ingin memiliki fungsi yang mengambil alamat email dan mengeluarkan angka acak semu 1, 2, 3, atau 4.
Sedikit detail:
Dengan kuasi-acak nomor yang saya maksudkan bahwa mengingat populasi khas dari alamat email, probabilitas mendapatkan nilai 1, 2, 3, atau 4 kira-kira sama, dan sifat sistematis yang jelas dari alamat email seperti nama domain yang dikerjakan. tidak mempengaruhi probabilitas mendapatkan nilai 1, 2, 3, atau 4.
Sedikit latar belakang:
Saya memiliki eksperimen online yang ditulis dalam inquisit di mana peserta masuk dua kali. Saya ingin menetapkan peserta secara acak ke salah satu dari empat kelompok. Meskipun ini mudah dilakukan untuk satu sesi (saya bisa menggunakan generator angka acak), saya perlu cara mengingat alokasi di seluruh sesi. Jadi, saya berpikir bahwa saya dapat mengekstrak alokasi grup acak-acak dari email peserta. Saya juga terbatas dalam rangkaian fungsi yang saya miliki ( lihat di sini untuk daftar lengkap ). Fungsi string adalah: Tolerer toupper capitalize concat search replall berisi mulai dengan akhir dengan substring trim trimright trimleft format panjang mengevaluasi
Pikiran Awal:
Saya berpikir untuk mencoba mengekstrak serangkaian fitur dari alamat email yang mengembalikan nilai 1, 2, 3, atau 4 dengan probabilitas yang kira-kira sama. Lalu, saya bisa menjumlahkan properti ini dan mendapatkan mod 4 plus 1 itu. Jadi, dengan asumsi sesuatu seperti teorema limit pusat, saya mungkin mendekati.
Kemungkinan fitur yang muncul di benak saya:
- panjang tali
- posisi "a", "b" pertama, dll.
sumber
Jawaban:
Cari fungsi hash, misalnya di http://en.wikipedia.org/wiki/Hash_function
sumber
Mengapa tidak hanya mencari tabel angka untuk setiap karakter yang mungkin ada dalam email. Kemudian gabungkan angka-angka untuk membentuk benih. Sebagai contoh,
Jadi abc @ ccc, akan dikonversi ke 12327333. Ini akan memberi Anda seed unik untuk setiap orang. Anda kemudian akan menggunakan ini untuk menghasilkan 1, 2, 3, 4.
Dari pertanyaan Anda, sepertinya Anda tidak keberatan dengan "solusi cepat dan kotor". Satu masalah dengan solusi saya adalah bahwa alamat email tidak acak - misalnya Anda mungkin akan mendapatkan sangat sedikit alamat email yang berisi huruf "z", tetapi semua alamat email berisi "@".
sumber
Sebagai tambahan untuk jawaban luar biasa lainnya, saya hanya akan memberikan contoh sederhana dalam bahasa R untuk menunjukkan fungsi hash yang sangat sederhana, yang seharusnya cukup baik untuk tujuan ini. Untuk mendapatkan beberapa alamat email sebagai data pengujian, saya mendapatkan vektor karakter dengan email dari pengelola paket R (terlalu banyak!) Yang diinstal di komputer saya:
Lalu saya mendefinisikan fungsi sederhana yang mendapatkan beberapa nomor dari setiap karakter di alamat email, menambahkannya, menghitung modulo 4 sisanya dan menambahkan 1, sehingga selalu mengembalikan salah satu hasil 1,2,3 atau 4:
Kemudian menerapkannya:
dan kita dapat mengamati bahwa distribusi yang dihasilkan dekat dengan seragam.
sumber
Anda dapat mencoba mengubah setiap karakter menjadi angka ascii, mengalikannya semua menjadi paksa, dan kemudian melakukan operasi modulus pada digit paling tidak signifikan. Jika ini tidak cukup pseudo-acak, Anda dapat melakukan sedikit-menggeser angka sedikit ...
-Ralph Winters
sumber