Алдабергенов Руслан Даниярович, 411 OneDArcade 17862
Абдикашева Вилена Ринатовна, 411 группа OneDArcade 17942
t1import asynciot1import asyncio
22
3class Monster:3class Monster:
44
5    def __init__(self, name, position, delay, power):5    def __init__(self, name, position, delay, power):
6        self.name = name6        self.name = name
7        self.position = position7        self.position = position
8        self.delay = delay8        self.delay = delay
9        self.power = power9        self.power = power
10        self.alive = True10        self.alive = True
11        self.episode_count = 011        self.episode_count = 0
1212
13    async def run(self, start_event, end_event):13    async def run(self, start_event, end_event):
14        try:14        try:
15            while True:15            while True:
16                await start_event.wait()16                await start_event.wait()
17                self.episode_count += 117                self.episode_count += 1
18                if self.alive and self.delay > 0 and (self.episode_count18                if self.alive and self.delay > 0 and (self.episode_count
> % self.delay == 0):> % self.delay == 0):
19                    self.position += 119                    self.position += 1
20                await end_event.wait()20                await end_event.wait()
21        except asyncio.CancelledError:21        except asyncio.CancelledError:
22            pass22            pass
2323
24async def game(monsters, start_event, end_event, epochs):24async def game(monsters, start_event, end_event, epochs):
25    for _ in range(epochs):25    for _ in range(epochs):
26        await start_event.wait()26        await start_event.wait()
27        await end_event.wait()27        await end_event.wait()
28        positions = {}28        positions = {}
29        for i, m in enumerate(monsters):29        for i, m in enumerate(monsters):
30            if m.alive:30            if m.alive:
31                positions.setdefault(m.position, []).append((i, m))31                positions.setdefault(m.position, []).append((i, m))
32        pair = None32        pair = None
33        for pos in sorted(positions.keys()):33        for pos in sorted(positions.keys()):
34            if len(positions[pos]) > 1:34            if len(positions[pos]) > 1:
35                i1, m1 = positions[pos][0]35                i1, m1 = positions[pos][0]
36                i2, m2 = positions[pos][1]36                i2, m2 = positions[pos][1]
37                pair = (m1, m2)37                pair = (m1, m2)
38                break38                break
39        if pair is not None:39        if pair is not None:
40            m1, m2 = pair40            m1, m2 = pair
41            if m1.power == m2.power:41            if m1.power == m2.power:
42                m1.alive = False42                m1.alive = False
43                m2.alive = False43                m2.alive = False
44            elif m1.power > m2.power:44            elif m1.power > m2.power:
45                m1.power -= m2.power45                m1.power -= m2.power
46                m2.alive = False46                m2.alive = False
47            else:47            else:
48                m2.power -= m1.power48                m2.power -= m1.power
49                m1.alive = False49                m1.alive = False
50        living = [m for m in monsters if m.alive]50        living = [m for m in monsters if m.alive]
51        if not living:51        if not living:
52            return 'All dead'52            return 'All dead'
53        if len(living) == 1:53        if len(living) == 1:
54            return living[0].name54            return living[0].name
55    living = [m for m in monsters if m.alive]55    living = [m for m in monsters if m.alive]
56    if len(living) == len(monsters):56    if len(living) == len(monsters):
57        return 'All flee'57        return 'All flee'
58    else:58    else:
59        return ', '.join((m.name for m in living))59        return ', '.join((m.name for m in living))
Legends
Colors
 Added 
Changed
Deleted
Links
(f)irst change
(n)ext change
(t)op