-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsolution_generator
33 lines (29 loc) · 1.28 KB
/
solution_generator
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
class multifilter:
def judge_half(pos, neg):
# допускает элемент, если его допускает хотя бы половина фукнций (pos >= neg)
return pos >= neg
def judge_any(pos, neg):
# допускает элемент, если его допускает хотя бы одна функция (pos >= 1)
return pos >= 1
def judge_all(pos, neg):
# допускает элемент, если его допускают все функции (neg == 0)
return neg == 0
def __init__(self, iterable, *funcs, judge=judge_any):
# iterable - исходная последовательность
# funcs - допускающие функции
# judge - решающая функция
self.funcs = funcs
self.iterable = iterable
self.judge = judge
def __iter__(self):
# возвращает итератор по результирующей последовательности
for i in self.iterable:
pos = 0
neg = 0
for f in self.funcs:
if f(i):
pos += 1
else:
neg += 1
if self.judge(pos, neg):
yield i