1class RunewordsCalculator:
2 def __init__(self, runewords):
3 self.runewords = list(runewords.items())
4 self.returned = set()
5 self.runes = []
6
7 def add_runes(self, runes):
8 self.runes.extend(runes)
9
10 def __next__(self):
11 if len(self.returned) == len(self.runewords):
12 raise StopIteration
13
14 for name, recipe in self.runewords:
15 if name in self.returned:
16 continue
17 if self.cooked(recipe):
18 self.returned.add(name)
19 return name
20
21 def cooked(self, ingredients):
22 idxs = self.ingredientsIndexes(ingredients)
23
24 if idxs is None:
25 return False
26
27 self.runes = [value for i, value in enumerate(self.runes) if i not in idxs]
28 return True
29
30 def ingredientsIndexes(self, ingredients):
31 idxs = []
32 ingredients_idx = 0
33
34 if not len(ingredients):
35 return idxs
36
37 for i, curr in enumerate(self.runes):
38 if curr == ingredients[ingredients_idx]:
39 idxs.append(i)
40 ingredients_idx += 1
41 if ingredients_idx == len(ingredients):
42 return idxs
43
44 return None
45
46 def __iter__(self):
47 return self
.....F.
======================================================================
FAIL: test_returns_runewords_in_runeword_order (test.TestRunewordsCalculator.test_returns_runewords_in_runeword_order)
----------------------------------------------------------------------
Traceback (most recent call last):
File "/tmp/test.py", line 55, in test_returns_runewords_in_runeword_order
self.assertEqual(next(iterator), "First")
~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^
AssertionError: None != 'First'
----------------------------------------------------------------------
Ran 7 tests in 0.001s
FAILED (failures=1)