Advertisement
Guest User

Szaloncukorszínek

a guest
Dec 11th, 2015
128
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.93 KB | None | 0 0
  1. #! /usr/bin/python
  2. # -*- coding: utf-8 -*-
  3.  
  4. try:
  5.   xrange
  6. except NameError:
  7.   xrange = range
  8.  
  9. def format(f):
  10.   if f >= 1 or f == 0:
  11.     s = '%.2f' % f
  12.     if not (99 <= f < 100):
  13.       return s
  14.     s = '%.40f' % f
  15.     return s[: len(s) - len(s.lstrip('9.')) + 2]
  16.   else:
  17.     s = '%.40f' % f
  18.     if f < 0:
  19.       return s
  20.     assert s.startswith('0.')
  21.     return '%%.%df' % (len(s) - len(s.lstrip('0.')) + 2) % f
  22.  
  23.  
  24. def calc(n=36):
  25.   choose = [[1]]
  26.   while len(choose) <= 36:
  27.     choose.append([1] + [(choose[-1][i] + choose[-1][i - 1])
  28.                          for i in xrange(1, len(choose))] + [1])  
  29.   r = 0
  30.   rkind = [0] * 5
  31.   n41 = n // 4 + 1
  32.   rall = [0] * n41
  33.   n1 = n + 1
  34.   for a in xrange(n1):
  35.     ca = choose[n][a]
  36.     n1a = n1 - a
  37.     for b in xrange(n1a):
  38.       cb = choose[n - a][b]
  39.       cab = ca * cb
  40.       n1ab = n1a - b
  41.       for c in xrange(n1ab):
  42.         cc = choose[n - a - b][c]
  43.         d = n - a - b - c
  44.         cabcd = cab * cc
  45.         r += cabcd
  46.         rkind[(a > 0) + (b > 0) + (c > 0) + (d > 0)] += cabcd
  47.         for i in xrange(1, n41):
  48.           if a >= i and b >= i and c >= i and d >= i:
  49.             rall[i] += cabcd
  50.   rall[0] = r
  51.        
  52.   assert r == 4 ** n
  53.   assert rkind[0] == 0
  54.   assert rall[1] == r - rkind[3] - rkind[2] - rkind[1]
  55.   assert n % 4 != 0 or rall[n // 4] == (
  56.       choose[n][n // 4] * choose[n // 4 * 3][n // 4] *
  57.       choose[n // 4 * 2][n // 4])
  58.   rf = r / 100.
  59.  
  60.   for i in xrange(1, 5):
  61.     print('Annak a valószínűsége, hogy %d fajta van a dobozban: kb. %s%%' %
  62.           (i, format(rkind[i] / rf)))
  63.   for i in xrange(1, n41):
  64.     if i == n // 4:
  65.       msg = '%d van' % i
  66.     else:
  67.       msg = 'van legalább %d' % i
  68.     print('Annak a valószínűsége, hogy minden fajtából %s: '
  69.           'kb. %s%%' % (msg, format(rall[i] / rf)))
  70.   print('Minden ennyiedik esetben lesz hiányzó fajta: %s' %
  71.         format(r / (r - rall[1] + 0.) + .5))
  72.  
  73. calc()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement