Gerando ints aleatórios ordenados sem o tipo? Em)
Acabei de olhar para uma questão de golfe de código sobregerando uma lista ordenada de 100 inteiros aleatórios. O que me veio à mente, no entanto, foi a idéia de que você poderia gerar uma lista de deltas positivos e continuar adicionando-os a um total em execução, assim:
deltas: 1 3 2 7 2
ints: 1 4 6 13 15
Na verdade, você usaria flutuadores, depois normalizaria para se ajustar a alguns limites superiores e redondos, mas o efeito é o mesmo.
Embora não fosse um código mais curto, certamente seria mais rápido sem a etapa de classificação. Mas a coisa que eu não tenho controle real é esta:A distribuição resultante de inteiros seria a mesma que gerando 100 inteiros aleatórios de uma função de densidade de probabilidade distribuída uniformemente?
Editar: um script de amostra:
import random,sys
running = 0
max = 1000
deltas = [random.random() for i in range(0,11)]
floats = []
for d in deltas:
running += d
floats.append(running)
upper = floats.pop()
ints = [int(round(f/upper*max)) for f in floats]
print(ints)
Cuja saída (fair dice roll) foi:
[24, 71, 133, 261, 308, 347, 499, 543, 722, 852]
ATUALIZAR: Alok's answer eComentário de Dan Dyer salientar que usando umdistribuição exponencial pois os deltas dariam uma distribuição uniforme de inteiros.