From c6822df16ae4a79b10225357d124321b8243d162 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B8=D1=85=D0=B0=D0=B8=D0=BB=20=D0=92=D0=B0=D1=81?= =?UTF-8?q?=D0=B8=D0=BB=D1=8C=D0=B5=D0=B2?= Date: Fri, 20 Feb 2026 11:59:24 +0300 Subject: [PATCH 1/2] =?UTF-8?q?feat:=20[LeetCode=20#649]=20Dota2=20Seante?= =?UTF-8?q?=20=D0=A2=D0=B8=D0=BF:=20Queue=20=D0=A1=D0=BB=D0=BE=D0=B6=D0=BD?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D1=8C:=20medium=20=D0=92=D1=80=D0=B5=D0=BC?= =?UTF-8?q?=D0=B5=D0=BD=D0=BD=D0=B0=D1=8F=20=D1=81=D0=BB=D0=BE=D0=B6=D0=BD?= =?UTF-8?q?=D0=BE=D1=81=D1=82=D1=8C:=20O(n)=20=D0=9F=D1=80=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D1=80=D0=B0=D0=BD=D1=81=D1=82=D0=B2=D0=B5=D0=BD=D0=BD?= =?UTF-8?q?=D0=B0=D1=8F=20=D1=81=D0=BB=D0=BE=D0=B6=D0=BD=D0=BE=D1=81=D1=82?= =?UTF-8?q?=D1=8C:=20O(n)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Ссылка: https://leetcode.com/problems/decode-string/ --- src/queue/dota2_senate/__init__.py | 0 src/queue/dota2_senate/solution.py | 25 +++++++++++++++++++++++++ tests/test_dota2_seante.py | 14 ++++++++++++++ 3 files changed, 39 insertions(+) create mode 100644 src/queue/dota2_senate/__init__.py create mode 100644 src/queue/dota2_senate/solution.py create mode 100644 tests/test_dota2_seante.py diff --git a/src/queue/dota2_senate/__init__.py b/src/queue/dota2_senate/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/queue/dota2_senate/solution.py b/src/queue/dota2_senate/solution.py new file mode 100644 index 0000000..6344498 --- /dev/null +++ b/src/queue/dota2_senate/solution.py @@ -0,0 +1,25 @@ +from collections import deque + +class Solution: + def predictPartyVictory(self, senate: str) -> str: + radiant_queue = deque() + dire_queue = deque() + + length = len(senate) + + for i in range(length): + if senate[i] == 'R': + radiant_queue.append(i) + else: + dire_queue.append(i) + + while radiant_queue and dire_queue: + radiant = radiant_queue.popleft() + dire = dire_queue.popleft() + + if radiant < dire: + radiant_queue.append(radiant + length) + else: + dire_queue.append(dire + length) + + return 'Radiant' if radiant_queue else 'Dire' diff --git a/tests/test_dota2_seante.py b/tests/test_dota2_seante.py new file mode 100644 index 0000000..8ee6d9d --- /dev/null +++ b/tests/test_dota2_seante.py @@ -0,0 +1,14 @@ +import pytest +from src.queue.dota2_senate.solution import Solution + + +@pytest.mark.parametrize( + "senate, expected", + [ + ("RD", "Radiant"), + ("RDD", "Dire") + ], +) +def test_predict_party_victory(senate, expected): + solution = Solution() + assert solution.predictPartyVictory(senate) == expected \ No newline at end of file From 1254e4834b8471853f2b48b3238b02e5e07dde0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=9C=D0=B8=D1=85=D0=B0=D0=B8=D0=BB=20=D0=92=D0=B0=D1=81?= =?UTF-8?q?=D0=B8=D0=BB=D1=8C=D0=B5=D0=B2?= Date: Fri, 20 Feb 2026 12:09:02 +0300 Subject: [PATCH 2/2] fix: run pre-commit --- src/queue/dota2_senate/solution.py | 9 +++++---- tests/test_dota2_seante.py | 7 ++----- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/src/queue/dota2_senate/solution.py b/src/queue/dota2_senate/solution.py index 6344498..2fbdc5a 100644 --- a/src/queue/dota2_senate/solution.py +++ b/src/queue/dota2_senate/solution.py @@ -1,5 +1,6 @@ from collections import deque + class Solution: def predictPartyVictory(self, senate: str) -> str: radiant_queue = deque() @@ -8,11 +9,11 @@ def predictPartyVictory(self, senate: str) -> str: length = len(senate) for i in range(length): - if senate[i] == 'R': + if senate[i] == "R": radiant_queue.append(i) else: dire_queue.append(i) - + while radiant_queue and dire_queue: radiant = radiant_queue.popleft() dire = dire_queue.popleft() @@ -21,5 +22,5 @@ def predictPartyVictory(self, senate: str) -> str: radiant_queue.append(radiant + length) else: dire_queue.append(dire + length) - - return 'Radiant' if radiant_queue else 'Dire' + + return "Radiant" if radiant_queue else "Dire" diff --git a/tests/test_dota2_seante.py b/tests/test_dota2_seante.py index 8ee6d9d..4efdf82 100644 --- a/tests/test_dota2_seante.py +++ b/tests/test_dota2_seante.py @@ -4,11 +4,8 @@ @pytest.mark.parametrize( "senate, expected", - [ - ("RD", "Radiant"), - ("RDD", "Dire") - ], + [("RD", "Radiant"), ("RDD", "Dire")], ) def test_predict_party_victory(senate, expected): solution = Solution() - assert solution.predictPartyVictory(senate) == expected \ No newline at end of file + assert solution.predictPartyVictory(senate) == expected