Предизвикателства > Runewords Calculator > Решения > Решението на Николина Маджарова

Резултати
1 точки от тестове
0 точки от учител

1 точки общо

7 успешни теста
0 неуспешни теста
Код

 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

Дискусия
История
Това решение има само една версия.