Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
70 changes: 37 additions & 33 deletions frog-2.py
Original file line number Diff line number Diff line change
@@ -1,38 +1,42 @@
#! python
# I wrote this quickly in a pub
# Don't judge me
# You're not a bad person Matt. Say it with me... "My code is ugly, but I'm ok" --Adam

from random import randrange
import sys

# if running in python 2, make range makes a list and xrange makes a generator
# generators are faster than large lists, so use xrange
if sys.version_info[0] == 2:
range = xrange

def frog(final_dist=100,max=6):
'''
Simulate a large number of frogs crossing a large number of rivers. Default
values result in 100 million simulations.

# I wrote this quickly in a pub
# Don't judge me
final_dist: int, default=100
This is the width of the largest river that will be simulated

total_dist = 1

while total_dist <= final_dist:

import random

cap = 10**max
max: int, default=6
This is the base ten log of the max number of trials at each distance.
The default of 6 therefore results in 1_000_000 trials per width of
river
'''

trials = 0
total_leaps = 0

while trials <= cap:

dist = total_dist
leaps = 0

while dist > 0:
this_jump = int(random.random()*(dist)+1)
dist -= this_jump
leaps += 1

total_leaps += leaps

trials += 1

print "{0}\t{1}".format(total_dist,(total_leaps*1.0)/trials)

total_dist += 1

return "DONE"

cap = 10 ** max

def trial(total_dist):
'''
Simulate a frog crossing a river once.
'''
leaps = 0
while total_dist:
total_dist -= randrange(1, total_dist+1)
leaps += 1
return leaps


for total_dist in range(1, final_dist + 1):
avg_leaps = 1.0 * sum(trial(total_dist) for _ in range(cap)) / cap
print("{0}\t{1}".format(total_dist, avg_leaps))