JavaScript
Itu tadi menyenangkan!
arr = []
index = 0
function init(seed) {
index = 0
arr[0] = seed
for (var i = 1; i < 624; i ++) {
arr[i] = (1812433253 * (arr[i-1] ^ (arr[i-1] >>> 30)) + i) | 0
}
}
function getNumber() {
if (index == 0) generateNumbers()
var y = arr[index]
y ^= (y >>> 11)
y ^= ((y << 7) & 2636928640)
y ^= ((y << 15) & 4022730752)
y ^= (y >>> 18)
index = (index + 1) % 624
return y
}
function generateNumbers() {
for (var i = 0; i < 624; i ++) {
var y = (arr[i] & 0x80000000) + (arr[(i+1) % 624] & 0x7fffffff)
arr[i] = arr[(i + 397) % 624] ^ (y >>> 1)
if (y % 2 != 0) arr[i] ^= 2567483615
}
}
// let's get our seed now from the SE API
var x = new XMLHttpRequest()
x.open('GET', 'http://api.stackexchange.com/2.2/answers?pagesize=10&order=desc&sort=activity&site=stackoverflow&filter=!Sri2UzKb5mTfr.XgjE', false)
x.send(null)
// we've got the answer data, now just add up all the numbers.
// only 4 digits at a time to prevent too big of a number.
var seed = 0
var numbers = x.responseText.match(/\d{0,4}/g)
for (var i = 0; i < numbers.length; i++) seed += +numbers[i]
init(seed)
for (var i = 0; i < 10; i++) console.log(getNumber())
Saya menulis Mersenne Twister di JS. Kemudian, saya menyadari bahwa saya harus mendapatkan benih dari suatu tempat.
Jadi, saya memutuskan untuk mendapatkannya dari Stack Exchange API! (Saya bisa menggunakan localStoragedan menambah penghitung, tapi itu tidak menyenangkan.) Jadi, saya mengambil 10 jawaban yang paling aktif, dan kemudian saya hanya mengambil setiap 4 atau kurang digit berturut-turut dalam respons dan menambahkannya.
Benih-benih ini selalu berbeda, karena Stack Overflow terus-menerus memperbarui (dan kuota saya terus turun!) Jumlahnya termasuk ID jawaban, ID pertanyaan, skor, jumlah naik / turun, rep pemilik / ID, dan data pembungkus (kuota dan semacamnya) ). Sekali jalan saya dapatkan 256845, lalu 270495, dan kemudian 256048, dll ....
Ini mencatat 10 angka komplemen acak 32-bit dua ke konsol. Output sampel:
247701962
-601555287
1363363842
-1184801866
1761791937
-163544156
2021774189
2140443959
1764173996
-1176627822