Advertisement
Cu11inan

1305.25

Jun 6th, 2023
850
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.15 KB | None | 0 0
  1. from timeit import timeit
  2. from os import listdir
  3. import threading
  4.  
  5. timeouttime = 5 #this may be changed later
  6.  
  7. def verify(a, A):
  8.     for b in A:
  9.         if all(a[i] == b[i] or b[i] == '*' for i in range(26)):
  10.             return False
  11.     return True
  12.  
  13. def read(filename):
  14.     with open(filename, "r") as f:
  15.         A = []
  16.         for x in f:
  17.             x = x.strip()
  18.             name, mask = x.split('')
  19.             a = [''] 26
  20.             for c in name:
  21.                 a[ord(c) - ord('a')] = '0'
  22.             for c in mask:
  23.                 a[ord(c) - ord('a')] = '1'
  24.             A.append(''.join(a))
  25.     return A
  26.  
  27. def find(filename):
  28.     A = read(filename)
  29.     A.sort()
  30.     for i in range(2*26):
  31.         s = bin(i)[2:].zfill(26)
  32.         if verify(s, A):
  33.             break
  34.  
  35. def find_timeout(filename):
  36.     p = threading.Thread(target=find, args=(filename,))
  37.     p.start()
  38.     p.join(timeout_time)
  39.  
  40. def main():
  41.     files = listdir("./tests")
  42.     times = [timeit(lambda: find_timeout("./tests/"+file), number=1) for file in files]
  43.     print([time if time < timeout_time else "inf" for time in times])
  44.  
  45. if name == "main":
  46.     main()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement