Introdução
Você recebe um gerador inteiro aleatório com a seguinte implementação
- A primeira chamada sempre retorna 1.
- A segunda invocação retorna um número inteiro aleatório entre 1 e 2.
- A terceira invocação retorna um número inteiro aleatório entre 1 e 3.
- A enésima invocação retorna um número inteiro aleatório entre 1 en, inclusive.
Com base na função acima, escreva um gerador aleatório de dados perfeitamente aleatório, retornando um valor entre 1 e 6 (inclusive) com igual probabilidade.
Regras
- Seu programa / função deve resultar em um número inteiro aleatório entre 1 e 6, inclusive, de alguma forma utilizável, ou seja, na saída padrão ou como um valor de retorno da função.
- O gerador ascendente de números aleatórios acima pode ser definido como uma função "livre" em seu programa (ou seja, não conta para a contagem de caracteres) ou um script / programa separado que é executado conforme necessário, assumindo que o estado (
n
) seja persistente entre chamadas. - Suponha que nunca mais de 1000 lançamentos de dados serão solicitados em um único caso de uso do seu programa, e o gerador inicial de números aleatórios poderá ser redefinido
1
no final de 1000 lançamentos de dados para evitar o transbordamenton
. - Seu programa não pode usar nenhuma outra fonte de números aleatórios, exceto o gerador aleatório ascendente definido acima. Obviamente, você pode solicitar vários números aleatórios ao gerador de números aleatórios para cada saída de dados.
- Isso é código-golfe, então o vencedor é a resposta mais curta ou a maioria dos votos em caso de empate. Se você pode gerar 1000 jogadas de dados usando menos de 1000 números aleatórios gerados, dê a si mesmo um bônus de eficiência de 10 pontos .
Exemplo
./asc-rand
1 # random integer between 1 and 1
./asc-rand
1 # random integer between 1 and 2
./asc-rand
3 # random integer between 1 and 3
./asc-rand
4 # random integer between 1 and 4
# dice-gen generates random dice based on output of asc-rand program.
./dice-gen
3
./dice-gen
6
./dice-gen
5
./dice-gen
1
iterate(6):b=asc-rand(); print b
ilegal ou não funciona? Eu posso estar entendendo mal a terceira regra.