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