fork download
  1. def link_chance(p, n):
  2. return (1-p)**(n-1) * p
  3.  
  4. def success_chance_under(p, n):
  5. return sum(link_chance(p, i) for i in range(1, n))
  6.  
  7. def find_p_known_median(m, e=.0000001, p1=0., p2=1.):
  8. p = (p1 + p2) / 2
  9. s = success_chance_under(p, m)
  10. if s < 0.5-e:
  11. return find_p_known_median(m, e, p, p2)
  12. elif s > 0.5+e:
  13. return find_p_known_median(m, e, p1, p)
  14. else:
  15. return p
  16.  
  17. print '6L'
  18. n = 1500
  19. print 'p=1/%d, under %d fusing: %.06f' % (1400, n, success_chance_under(1./1400, n))
  20. print 'p=1/%d, under %d fusing: %.06f' % (1500, n, success_chance_under(1./1500, n))
  21. n = 5
  22. print 'p=1/%d, under %d fusing: %.06f' % (1500, n, success_chance_under(1./1500, n))
  23. n = 2
  24. print 'p=1/%d, under %d fusing: %.06f' % (1500, n, success_chance_under(1./1500, n))
  25. n = 2000
  26. print 'p=1/%d, under %d fusing: %.06f' % (1500, n, success_chance_under(1./1500, n))
  27. n = 4000
  28. print 'p=1/%d, under %d fusing: %.06f' % (1500, n, success_chance_under(1./1500, n))
  29. n = 10000
  30. print 'p=1/%d, under %d fusing: %.06f' % (1500, n, success_chance_under(1./1500, n))
  31.  
  32. i = 1
  33. s = 0
  34. while s < 0.5:
  35. s += link_chance(1./1500, i)
  36. i += 1
  37. print 'p=1/%d, under %d fusing: %.06f' % (1500, i, s)
  38.  
  39. print 1.0/find_p_known_median(1500)
  40. print 1.0/find_p_known_median(1501)
  41.  
  42. print '\n5L'
  43. n = 150
  44. print 'p=1/%d, under %d fusing: %.06f' % (150, n, success_chance_under(1./150, n))
  45.  
Success #stdin #stdout 0.09s 7796KB
stdin
Standard input is empty
stdout
6L
p=1/1400, under 1500 fusing: 0.657368
p=1/1500, under 1500 fusing: 0.631998
p=1/1500, under 5 fusing: 0.002664
p=1/1500, under 2 fusing: 0.000667
p=1/1500, under 2000 fusing: 0.736344
p=1/1500, under 4000 fusing: 0.930532
p=1/1500, under 10000 fusing: 0.998729
p=1/1500, under 1041 fusing: 0.500209
2163.10014953
2164.54240671

5L
p=1/150, under 150 fusing: 0.630890