Como eu faço um bom randomizador?

classic Classic list List threaded Threaded
16 messages Options
Reply | Threaded
Open this post in threaded view
|

Como eu faço um bom randomizador?

shinigamiphoenix
Eu quero fazer um randomizador para um mini-game, mas o único modo que eu sei, depende do tempo e repete o resultado.

math.randomseed(os.time())
print(math.random(1, 100))

Tem um jeito de eu fazer um randomizador que não fique repetindo o mesmo resultado? Agradeço desde já.

--
Lua BR - http://groups.google.com/group/lua-br
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para [hidden email].
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: Como eu faço um bom randomizador?

Luiz Henrique de Figueiredo
> Eu quero fazer um randomizador para um mini-game, mas o único modo que eu
> sei, depende do tempo e repete o resultado.
>
> *math.randomseed(os.time())*
> *print(math.random(1, 100))*

Chame math.randomseed(os.time()) somente *uma* vez no seu programa.

--
Lua BR - http://groups.google.com/group/lua-br
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para [hidden email].
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: Como eu faço um bom randomizador?

shinigamiphoenix
In reply to this post by shinigamiphoenix
o problema é que toda vez que eu executo o programa, dá o mesmo resultado
segue o código:

print("***GUESS THE NUMBER***")

math.randomseed(os.time())

function main()

n = math.random(1, 100)

print(n)

--userIO = io.read()

end

main()

--
Lua BR - http://groups.google.com/group/lua-br
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para [hidden email].
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: Como eu faço um bom randomizador?

Luiz Henrique de Figueiredo
> o problema é que toda vez que eu executo o programa, dá o mesmo resultado

Para mim dá resultados diferentes.

--
Lua BR - http://groups.google.com/group/lua-br
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para [hidden email].
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: Como eu faço um bom randomizador?

Elias Barrionovo
In reply to this post by shinigamiphoenix
Hmmm, qual a sua plataforma? Será que isso tem a ver com esse problema [1]?

http://lua-users.org/lists/lua-l/2007-03/msg00564.html

2013/12/2 shinigamiphoenix <[hidden email]>:

> Eu quero fazer um randomizador para um mini-game, mas o único modo que eu
> sei, depende do tempo e repete o resultado.
>
> math.randomseed(os.time())
> print(math.random(1, 100))
>
> Tem um jeito de eu fazer um randomizador que não fique repetindo o mesmo
> resultado? Agradeço desde já.
>
> --
> Lua BR - http://groups.google.com/group/lua-br
> ---
> Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos
> Grupos do Google.
> Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie
> um e-mail para [hidden email].
> Para obter mais opções, acesse https://groups.google.com/groups/opt_out.



--
NI!

() - www.asciiribbon.org
/\ - ascii ribbon campaign against html e-mail and proprietary attachments

--
Lua BR - http://groups.google.com/group/lua-br
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para [hidden email].
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: Como eu faço um bom randomizador?

Fidelis Assis
In reply to this post by shinigamiphoenix



Em 3 de dezembro de 2013 12:11, shinigamiphoenix <[hidden email]> escreveu:
o problema é que toda vez que eu executo o programa, dá o mesmo resultado


Para mim também os resultados são diferentes (Linux). Execute isso algumas vezes e verifica se os.time() está retornando valores realmente diferentes:

s = os.time()
math.randomseed(s)
print('semente: ', s, 'número:', math.random(1, 100))

Se as sementes forem sempre iguais, há algum problema no relógio da sua máquina ou na biblioteca usada pelo os.time.

OBS: você não disse qual é sua máquina o SO nem a versão de Lua.

-- Fidelis

--
Lua BR - http://groups.google.com/group/lua-br
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para [hidden email].
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: Como eu faço um bom randomizador?

Jhonathan Paulo Banczek
aqui da diferente tbm, (Linux/Ubuntu 13.10, Lua 5.2.2)



Em 3 de dezembro de 2013 12:55, Fidelis Assis <[hidden email]> escreveu:



Em 3 de dezembro de 2013 12:11, shinigamiphoenix <[hidden email]> escreveu:

o problema é que toda vez que eu executo o programa, dá o mesmo resultado


Para mim também os resultados são diferentes (Linux). Execute isso algumas vezes e verifica se os.time() está retornando valores realmente diferentes:

s = os.time()
math.randomseed(s)
print('semente: ', s, 'número:', math.random(1, 100))

Se as sementes forem sempre iguais, há algum problema no relógio da sua máquina ou na biblioteca usada pelo os.time.

OBS: você não disse qual é sua máquina o SO nem a versão de Lua.

-- Fidelis

--
Lua BR - http://groups.google.com/group/lua-br
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para [hidden email].
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.



--
________________________________________

Atenciosamente
Jhonathan Paulo Banczek

___________________________________

--
Lua BR - http://groups.google.com/group/lua-br
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para [hidden email].
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.

lua.png (128K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Como eu faço um bom randomizador?

shinigamiphoenix
In reply to this post by shinigamiphoenix
Windows 7 -- Lua 5.1

--
Lua BR - http://groups.google.com/group/lua-br
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para [hidden email].
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: Como eu faço um bom randomizador?

shinigamiphoenix
In reply to this post by shinigamiphoenix
é impressão minha ou isso é um bug da 5.1?

--
Lua BR - http://groups.google.com/group/lua-br
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para [hidden email].
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: Como eu faço um bom randomizador?

shinigamiphoenix
In reply to this post by shinigamiphoenix
PS: Descobri que quando uso o while o programa mostra diferentes resultados, já quando não está com o while ele mostra o mesmo resultado, quando se passa 1 minuto no relógio o número "aleatório" é adicionado +1. Segue as imagens.

--
Lua BR - http://groups.google.com/group/lua-br
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para [hidden email].
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.

while_on.png (18K) Download Attachment
while_off.png (20K) Download Attachment
Reply | Threaded
Open this post in threaded view
|

Re: Como eu faço um bom randomizador?

Fidelis Assis
Em 3 de dezembro de 2013 17:42, shinigamiphoenix <[hidden email]> escreveu:
PS: Descobri que quando uso o while o programa mostra diferentes resultados, já quando não está com o while ele mostra o mesmo resultado, quando se passa 1 minuto no relógio o número "aleatório" é adicionado +1. Segue as imagens.

Quando você usa while, gera vários números com uma única semente e funciona como esperado. Já sem while você gera nova nova semente para cada aleatório, resetando a série toda vez. Como as sementes estão próximas, parece que a série se repete por causa do bug no Windows apontado pelo Elias Barrionovo acima.

Tenta produzir sementes mais espaçadas a cada vez, assim:

s = 100*os.time()
ou
s = 1000*os.time()

Ou use outro SO sem esse bug.

-- Fidelis

--
Lua BR - http://groups.google.com/group/lua-br
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para [hidden email].
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: Como eu faço um bom randomizador?

Breno Silva
Espero que isso não seja pra urna eletronica :)


2013/12/3 Fidelis Assis <[hidden email]>
Em 3 de dezembro de 2013 17:42, shinigamiphoenix <[hidden email]> escreveu:
PS: Descobri que quando uso o while o programa mostra diferentes resultados, já quando não está com o while ele mostra o mesmo resultado, quando se passa 1 minuto no relógio o número "aleatório" é adicionado +1. Segue as imagens.

Quando você usa while, gera vários números com uma única semente e funciona como esperado. Já sem while você gera nova nova semente para cada aleatório, resetando a série toda vez. Como as sementes estão próximas, parece que a série se repete por causa do bug no Windows apontado pelo Elias Barrionovo acima.

Tenta produzir sementes mais espaçadas a cada vez, assim:

s = 100*os.time()
ou
s = 1000*os.time()

Ou use outro SO sem esse bug.

-- Fidelis

--
Lua BR - http://groups.google.com/group/lua-br
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para [hidden email].
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.

--
Lua BR - http://groups.google.com/group/lua-br
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para [hidden email].
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: Como eu faço um bom randomizador?

Fidelis Assis



Em 3 de dezembro de 2013 19:03, Breno Silva <[hidden email]> escreveu:
Espero que isso não seja pra urna eletronica :)

Leia a mensagem original.

OBS: O bug não é de Lua, mas do Windows. Nossa urna eletrônica usa Linux.

--
Lua BR - http://groups.google.com/group/lua-br
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para [hidden email].
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: Como eu faço um bom randomizador?

shinigamiphoenix
In reply to this post by shinigamiphoenix
Agora o output só sai 1.

 s = 100*os.time()
math.randomseed(s)
print('semente: ', s, 'número:', math.random(1, 100))

--
Lua BR - http://groups.google.com/group/lua-br
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para [hidden email].
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: Como eu faço um bom randomizador?

shinigamiphoenix
In reply to this post by shinigamiphoenix
Ok, consegui resolver o problema de um jeito beeem gambiarra, mas ok:

math.randomseed(os.time())

for n = 0, 5 do

p = math.random(1, 100)

end

print(p)

Agradeço a todos que me ajudaram.

--
Lua BR - http://groups.google.com/group/lua-br
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para [hidden email].
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.
Reply | Threaded
Open this post in threaded view
|

Re: Como eu faço um bom randomizador?

Fidelis Assis
In reply to this post by shinigamiphoenix
Em 3 de dezembro de 2013 19:20, shinigamiphoenix <[hidden email]> escreveu:
Agora o output só sai 1.

Bom, você pode atualizar seu SO para ver se corrige o bug, instalar alguma outra lib que gera números aleatórios (http://www.tecgraf.puc-rio.br/~lhf/ftp/lua/#lrandom) ou trocar de SO. Se isso for difícil, como é só um jogo simples pode-se tentar gerar sementes bem diferentes a cada vez para ver se contorna. Essa outra opção evita multiplicações (e overflow) invertendo a semente para a variação ocorrer nos dígitos mais significativos:

s = tonumber(tostring(os.time()):reverse())/10


--
Lua BR - http://groups.google.com/group/lua-br
---
Você está recebendo esta mensagem porque se inscreveu no grupo "Lua BR" dos Grupos do Google.
Para cancelar a inscrição neste grupo e parar de receber seus e-mails, envie um e-mail para [hidden email].
Para obter mais opções, acesse https://groups.google.com/groups/opt_out.