Skip to content

Instantly share code, notes, and snippets.

@vanaur
Created January 19, 2020 20:08
Show Gist options
  • Save vanaur/e2ecc7bc683613c290359a7909022320 to your computer and use it in GitHub Desktop.
Save vanaur/e2ecc7bc683613c290359a7909022320 to your computer and use it in GitHub Desktop.
# riddle-of-100-prisoners
import numpy as np
import random
def algo(number):
midl = int((number / 2) - 1)
boxes = np.arange(number)
random.shuffle(boxes)
persons = np.arange(number)
result = 0
for pers in persons:
current = pers
if boxes[current] == pers:
result += 1
else:
x = 0
for x in range(midl):
current = boxes[current]
if (current == pers):
result += 1
break
if x == midl:
pers = persons.size
break
return result
# ngen = number of generations
# npers = number of prisoners
def average(ngen, npers):
percent = 0
for _ in range(ngen):
res = algo(npers)
if (res == npers):
percent += 1
percent /= ngen
percent *= 100
return percent
result = round(average(300, 100))
print(str(result) + "%") # It might be around 30%
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment