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