Advertisement
DoromaAnim

Untitled

Nov 12th, 2019
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.92 KB | None | 0 0
  1. import timeit
  2. import functools
  3.  
  4. def timer(f):
  5.     @functools.wraps(f)
  6.     def wrapper(*args):
  7.         start = timeit.time.perf_counter()
  8.         result = f(*args)
  9.         end = timeit.time.perf_counter()
  10.         time = end - start
  11.         #print("Czas działania ", f.__name__, "=", round(time, 3))
  12.         return result, time
  13.     return wrapper
  14.  
  15. @timer
  16. def pierwsze_imperatywna(n):
  17.     prime = [1] * (n + 1)
  18.     result = []
  19.     i = 2
  20.  
  21.     while i <= n:
  22.         if prime[i]:
  23.             result.append(i)
  24.             j = i + i
  25.             while j <= n:
  26.                 prime[j] = 0
  27.                 j += i
  28.         i += 1
  29.  
  30.     return result
  31.  
  32.  
  33. @timer
  34. def pierwsze_skladana(n):
  35.     return [i for i in range(2, n + 1) if not
  36.             len([j for j in range(2, i) if not i % j])]
  37.  
  38.  
  39. @timer
  40. def pierwsze_funkcyjna(n):
  41.     def isprime(x):
  42.         i = 2
  43.         while i * i <= x:
  44.             if not x % i:
  45.                 return False
  46.             i += 1
  47.         return True
  48.     return list(filter(isprime, range(2, n + 1)))
  49.  
  50. def primegen(n):
  51.     def isprime(x):
  52.         i = 2
  53.         while i * i <= x:
  54.             if not x % i:
  55.                 return False
  56.             i += 1
  57.         return True
  58.     for i in range(2, n + 1):
  59.         if isprime(i):
  60.             yield i
  61.  
  62.  
  63. @timer
  64. def pierwsze_generator(n):
  65.     for _ in primegen(n):
  66.         pass
  67.  
  68.  
  69. def testy():
  70.     formatter = "{: >11}|"
  71.    
  72.     print(formatter.format(""), formatter.format("imperatywna"),
  73.         formatter.format("funkcyjna"), formatter.format("skladana"), formatter.format("iterator"))
  74.  
  75.     for i in (10**j for j in range(2, 7)):
  76.         print(formatter.format(i), formatter.format(round(pierwsze_imperatywna(i)[1], 3)),
  77.             formatter.format(round(pierwsze_imperatywna(i)[1], 3)), formatter.format(round(pierwsze_skladana(i)[1], 3)),
  78.             formatter.format(round(pierwsze_generator(i)[1], 3)))
  79.  
  80. testy()
  81.  
  82.  
  83. def bingen(n, m):
  84.     number = 0
  85.     end = 2**(m*n)
  86.     while number < end:
  87.         tmp = list(bin(number)[2:])
  88.         brak = n*m - len(tmp)
  89.         number += 1
  90.         yield ['0']*brak + tmp
  91.  
  92.  
  93. H = (2, 1, 3, 1, 1)
  94. V = (1, 3, 1, 2, 1)
  95.  
  96. def check(pic, H, V):
  97.     n = len(H)
  98.     m = len(V)
  99.     HH = [0] * n
  100.     VV = [0] * m
  101.  
  102.     for idx, i in enumerate(pic):
  103.         if i == '1':
  104.             HH[idx % m] += 1
  105.             VV[idx // m] += 1
  106.  
  107.     for h, hh in zip(H, HH):
  108.         if h != hh:
  109.             return False
  110.  
  111.     for v, vv in zip(V, VV):
  112.         if v != vv:
  113.             return False
  114.        
  115.     return True
  116.  
  117.  
  118. for i in bingen(5, 5):
  119.     if check(i, H, V):
  120.         v = len(V)
  121.         for idx, i in enumerate(i):
  122.             if idx % v == 0 and idx // v > 0:
  123.                 print()
  124.             if i == '1':
  125.                 print(u"\u001b[38;5;75m\u25A0", end=" ")
  126.             else:
  127.                 print(u"\u001b[38;5;232m\u25A0", end=" ")
  128.         print("\n\n\n")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement