Guest User

Untitled

a guest
Jan 23rd, 2018
95
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.19 KB | None | 0 0
  1. #!/usr/bin/env python
  2. #-*- coding:utf-8 -*-
  3.  
  4. from math import ceil
  5. from random import randint
  6. from decimal import Decimal
  7.  
  8. def generate_papers():
  9.     papers = [[1,1]for i in range(25)]
  10.     for i in range(5):
  11.         throw_unknown(papers)
  12.     return papers
  13.  
  14. def throw_unknown(papers):
  15.     unknown = randint(1,50)
  16.     if ceil(unknown / 2.0) == unknown / 2.0:
  17.         if papers[int(unknown / 2.0) - 1][1] == 0:
  18.             throw_unknown(papers)
  19.         else:
  20.             papers[int(unknown / 2.0) - 1][1] = 0
  21.     else:
  22.         if papers[int(ceil(unknown / 2.0)) - 1][0] == 0:
  23.             throw_unknown(papers)
  24.         else:
  25.             papers[int(ceil(unknown / 2.0)) - 1][0] = 0
  26.     return papers
  27.  
  28. def choose_paper(papers):
  29.     chosen = papers[randint(0,24)]
  30.     if chosen == [1,1]:
  31.         return 1
  32.     else:
  33.         return 0
  34.  
  35. def recognize_order(papers):
  36.     unlearned_papers = []
  37.     for paper in papers:
  38.         if paper[0] == 0 or paper[1] == 0:
  39.             unlearned_papers.append(paper[0] + paper[1])
  40.     unlearned_papers.sort()
  41.     if unlearned_papers == [1,1,1,1,1]:
  42.         return 1
  43.     elif unlearned_papers == [0,1,1,1]:
  44.         return 2
  45.     elif unlearned_papers == [0,0,1]:
  46.         return 3
  47.     else: print "ERROR: Impossible order! %s" % unlearned_papers
  48.  
  49.  
  50. tests_quantity = int(raw_input("How many tests should we make? "))
  51. passed = not_passed = first = second = third = 0
  52. for i in range(tests_quantity):
  53.     test = generate_papers()
  54.     attempt = choose_paper(test)
  55.     order = recognize_order(test)
  56.  
  57.     if attempt == 1: passed += 1
  58.     elif attempt == 0: not_passed += 1
  59.  
  60.     if order == 1: first += 1
  61.     elif order == 2: second += 1
  62.     elif order == 3: third += 1
  63.  
  64. print("""
  65.  
  66. From %d tests %d succesed and %d failed.
  67. Success probability is %.2f.
  68.  
  69. Unlearned papers recognition:
  70. 1. 11111 - %d times (p = %.2f)
  71. 2.  2111 - %d times (p = %.2f)
  72. 3.   221 - %d times (p = %.2f)
  73.  
  74. """ % (tests_quantity, passed, not_passed,
  75.        Decimal(passed) / Decimal(tests_quantity),
  76.        first, Decimal(first) / Decimal(tests_quantity),
  77.        second, Decimal(second) / Decimal(tests_quantity),
  78.        third, Decimal(third) / Decimal(tests_quantity)))
Add Comment
Please, Sign In to add comment