1class RunewordsCalculator:
2 def __init__(self, runewords):
3 self.runewords = list(runewords.items())
4 self.runes = []
5 self.returned = set()
6 self._finished = False
7
8 def add_runes(self, runes):
9 self.runes.extend(runes)
10
11 def __iter__(self):
12 return self
13
14 def __next__(self):
15 if self._finished:
16 raise StopIteration
17
18 for name, recipe in self.runewords:
19 if name in self.returned:
20 continue
21
22 if self._can_build(recipe):
23 self.returned.add(name)
24 return name
25
26 if len(self.returned) == len(self.runewords):
27 self._finished = True
28 raise StopIteration
29
30 return None
31
32 def _can_build(self, recipe):
33 i = 0
34 for rune in self.runes:
35 if i < len(recipe) and rune == recipe[i]:
36 i += 1
37 return i == len(recipe)
.......
----------------------------------------------------------------------
Ran 7 tests in 0.000s
OK