Просто посмотрел на вопрос о гольф-поле кода создав отсортированный список из 100 случайных чисел. Однако, что появилось у меня в голове, была идея, что вы можете генерировать вместо этого список положительных дельт и просто добавлять их к общей сумме, таким образом:
deltas: 1 3 2 7 2
ints: 1 4 6 13 15
Фактически, вы будете использовать float, затем нормализуетесь, чтобы соответствовать верхнему пределу, и раунд, но эффект тот же.
Несмотря на то, что для более короткого кода он не будет работать, он, несомненно, будет быстрее без шага сортировки. Но вещь, на которую я не могу справиться, таков: Будет ли полученное распределение целых чисел таким же, как генерация 100 случайных чисел из равномерно распределенной функции плотности вероятности?
Изменить: образец script:
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)
Чей выход (бросок с честными костями):
[24, 71, 133, 261, 308, 347, 499, 543, 722, 852]
ОБНОВЛЕНИЕ: ответ Алока и комментарий Дана Дайера указывают, что использование экспоненциальное распределение для дельт даст равномерное распределение целых чисел.