Skip to content

Instantly share code, notes, and snippets.

@jpark9013
Created May 2, 2021 01:17
Show Gist options
  • Save jpark9013/0639e632dc83a72ab3f96b9af0be6a73 to your computer and use it in GitHub Desktop.
Save jpark9013/0639e632dc83a72ab3f96b9af0be6a73 to your computer and use it in GitHub Desktop.
generate psuedo random numbers from 1 to n that add up to n
import math
import random
def recur(n, lst, chance):
if n == 1:
lst.append(1)
return
r = random.uniform(0, 1)
if r <= chance:
lst.append(n)
return
else:
a = random.randint(1, n-1)
recur(a, lst, chance)
recur(n-a, lst, chance)
def generate(n):
if n == 1:
return [1]
lst = []
recur(n, lst, 1/math.log(n, 2))
return lst
if __name__ == "__main__":
for i in range(1, 101):
assert(sum(generate(i)) == i)
print(generate(10))
print(generate(25))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment