Advertisement
loalkota

Untitled

Jun 2nd, 2021
964
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 2.36 KB | None | 0 0
  1. import re
  2. import math
  3.  
  4.  
  5. class SolveTask:
  6.     def __init__(self):
  7.         self._f = math.factorial
  8.  
  9.     def solve(*args, **kwargs):
  10.         raise NotImplementedError
  11.  
  12.     def combinations(self, n, k):
  13.         return self._f(n) // self._f(k) // self._f(n - k)
  14.  
  15. class Solve4(SolveTask):
  16.     def solve(self, f1, f2, f3):
  17.         """Пока можем ответить только о том, что принадлежит классу Поста
  18.        """
  19.  
  20.         method_check = ['is_t0', 'is_t1', 'is_linear', 'is_monotone', 'is_supplement']
  21.         flags = [1, 1, 1, 1, 1]
  22.  
  23.         for i, method in enumerate(method_check):
  24.             flags[i] *= getattr(self, method)(f1)
  25.             flags[i] *= getattr(self, method)(f2)
  26.             flags[i] *= getattr(self, method)(f3)
  27.  
  28.         return sum(flags) == 0
  29.  
  30.     def is_t0(self, f):
  31.         return f[0] == '0'
  32.  
  33.     def is_t1(self, f):
  34.         return f[-1] == '1'
  35.  
  36.     def is_supplement(self, f):
  37.         for i in range(len(f) // 2):
  38.             if f[i] == f[-1-i]:
  39.                 return False
  40.  
  41.         return True
  42.  
  43.     def is_linear(self, f):
  44.         a = [f]
  45.  
  46.         for j in range(1, len(f)):
  47.             new_a = ''
  48.  
  49.             for i in range(len(a[-1])-1):
  50.                 if a[-1][i] == a[-1][i+1]:
  51.                     new_a += '0'
  52.                 else:
  53.                     new_a += '1'
  54.  
  55.             a.append(new_a)
  56.  
  57.         for i in [3, 5, 6, 7]:
  58.             if a[i][0] == '1':
  59.                 return False
  60.  
  61.         return True
  62.  
  63.     def is_monotone(self, f):
  64.         get_bin = lambda x: '0' * (3 - len(bin(x)[2:])) + bin(x)[2:]
  65.  
  66.         for i in range(len(f)):
  67.             for j in range(i, len(f)):
  68.                 if self.is_large(get_bin(i), get_bin(j)) and f[i] < f[j]:
  69.                     return False
  70.  
  71.                 if self.is_large(get_bin(j), get_bin(i)) and f[j] < f[i]:
  72.                     return False
  73.  
  74.         return True
  75.  
  76.     def is_large(self, a, b):
  77.         fl = False
  78.  
  79.         for i in range(len(a)):
  80.             if a[i] == '0' and b[i] == '1':
  81.                 return False
  82.             elif a[i] == '1' and b[i] == '0':
  83.                 fl = True
  84.  
  85.         return fl
  86.  
  87.  
  88. if __name__ == '__main__':
  89.     get_bin = lambda x: '0' * (3 - len(bin(x)[2:])) + bin(x)[2:]
  90.     a = Solve4()
  91.  
  92.     func = ['00000000', '10000000', '11000000']
  93.  
  94.     print(a.solve(*func))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement