2015-06-26 3 views
3

Я ищу альтернативный способ получить случайное число в Lua, которое находится между минимальным и максимальным числом без использования math.random(). Там в любом случае? Это не должен быть простой метод.Другие способы получить случайное число в Lua

+0

Почему 'math.random' непригодно? Вы пробовали искать 'lua random' онлайн? –

+0

Возможно, вам следует указать причину, по которой вы хотите избежать случайности. Вы скучаете по энтропии? – Marged

+4

Если вы работаете в Linux или Mac OS X, вы можете читать байты из '/ dev/random' или'/dev/urandom'. – lhf

ответ

5

Как и в комментариях к Unix-подобным системам, вы можете читать байты с /dev/random или /dev/urandom и создавать из них случайное число.

urand = assert (io.open ('/dev/urandom', 'rb')) 
rand = assert (io.open ('/dev/random', 'rb')) 

function RNG (b, m, r) 
    b = b or 4 
    m = m or 256 
    r = r or urand 
    local n, s = 0, r:read (b) 

    for i = 1, s:len() do 
    n = m * n + s:byte (i) 
    end 

    return n 
end 

В качестве расширения этого ответа, и для удовольствия, я автор очень крошечного модуля, randbytes, так что будущие читатели могут играть с интерфейсами /dev/random и /dev/urandom в простой форме. Вот быстро бегите вниз.

Установить с luarocks или захватить file вручную.

$ luarocks install randbytes 

Требование к модулю или файлу.

$ lua 
> randbytes = require 'randbytes' 

И затем захватите несколько байтов.

> print (randbytes (8)) 

На данный момент я очистил и включил в себя простой алгоритм простого поколения, показанный выше, для генерации базовых случайных чисел.

> print (randbytes:urandom (16)) 

Вы можете построить поверх основного интерфейса, чтобы реализовать свои собственные алгоритмы. Прочтите documentation для получения полного списка методов и настроек.

+1

Спасибо, это тот ответ, который я искал! –