From cc8daf1bc85f4aa84cb417e5e8b8f5e7bc8a591b Mon Sep 17 00:00:00 2001 From: Andrew-Kochanov Date: Mon, 15 Dec 2025 13:56:31 +0300 Subject: [PATCH 1/5] CI --- .github/workflows/run_tests.yml | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) create mode 100644 .github/workflows/run_tests.yml diff --git a/.github/workflows/run_tests.yml b/.github/workflows/run_tests.yml new file mode 100644 index 0000000..0695e93 --- /dev/null +++ b/.github/workflows/run_tests.yml @@ -0,0 +1,29 @@ +name: Python application + +on: [push] + +permissions: + contents: read + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v4 + - name: Set up Python 3.13 + uses: actions/setup-python@v3 + with: + python-version: "3.13" + - name: Install dependencies + run: | + python -m pip install --upgrade pip + pip install ruff + pip install pytest + - name: Lint with ruff + run: | + ruff check --output-format=github + - name: Test with pytest + run: | + pytest \ No newline at end of file From 129a8811d8257a1c90ec3b38e95c932f71ac9f87 Mon Sep 17 00:00:00 2001 From: Andrew-Kochanov Date: Mon, 15 Dec 2025 15:26:23 +0300 Subject: [PATCH 2/5] =?UTF-8?q?=D0=A1=D1=85=D0=B5=D0=BC=D0=B0=20=D0=A3?= =?UTF-8?q?=D0=BE=D0=BB=D0=BA=D0=B5=D1=80=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- walker_scheme/test_walker.py | 8 ++++++++ walker_scheme/walker.py | 34 ++++++++++++++++++++++++++++++++++ 2 files changed, 42 insertions(+) create mode 100644 walker_scheme/test_walker.py create mode 100644 walker_scheme/walker.py diff --git a/walker_scheme/test_walker.py b/walker_scheme/test_walker.py new file mode 100644 index 0000000..fac87e0 --- /dev/null +++ b/walker_scheme/test_walker.py @@ -0,0 +1,8 @@ +from walker import Walker + +test = Walker([("a", 0), ("b", 1)]) + +def test(): + rand = test.get_random() + assert rand == 1 + diff --git a/walker_scheme/walker.py b/walker_scheme/walker.py new file mode 100644 index 0000000..0ced5f4 --- /dev/null +++ b/walker_scheme/walker.py @@ -0,0 +1,34 @@ +import random + + +class Walker: + def __init__(self, probabilities: list[tuple[str, float]]): + self.probabilities = sorted(probabilities, key=lambda x: x[1]) + self.probabilities_walker = [[self.probabilities[i][0], 1 / len(self.probabilities)] for i in range(len(self.probabilities))] + + summa = [probabilities[i][1] for i in range(len(probabilities))] + if summa != 1: + raise ValueError('Сумма вероятностей не равна единице') + + def walker_scheme(self): + barrier = 0 + for i in range(len(self.probabilities) - 1): + if self.probabilities[i][1] < self.probabilities_walker[i][1]: + self.probabilities_walker[i][1] = self.probabilities[i][1] + barrier + self.probabilities_walker[i + 1][1] += (self.probabilities_walker[i][1] - self.probabilities[i][1]) + barrier = self.probabilities_walker[i][1] + elif self.probabilities[i][1] > self.probabilities_walker[i][1]: + self.probabilities_walker[i][1] = self.probabilities[i][1] + barrier + self.probabilities_walker[i + 1][1] -= (self.probabilities[i][1] - self.probabilities_walker[i][1]) + barrier = self.probabilities_walker[i][1] + elif self.probabilities[i][1] == self.probabilities_walker[i][1]: + self.probabilities_walker[i][1] += barrier + barrier = self.probabilities_walker[i][1] + self.probabilities_walker[-1][1] += barrier + + def get_random(self): + probability = random.random() + self.walker_scheme() + for i in self.probabilities_walker: + if probability <= i[1]: + return i[0] From 9d9a59725505b7a33dd0814494d7bb247c4eb115 Mon Sep 17 00:00:00 2001 From: Andrew-Kochanov Date: Mon, 15 Dec 2025 15:33:36 +0300 Subject: [PATCH 3/5] =?UTF-8?q?=D0=A1=D0=B4=D0=B5=D0=BB=D0=B0=D0=BB=20?= =?UTF-8?q?=D1=82=D0=B5=D1=81=D1=82=D1=8B=20=D0=BF=D0=BE=20pep8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- walker_scheme/test_walker.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/walker_scheme/test_walker.py b/walker_scheme/test_walker.py index fac87e0..706f4cd 100644 --- a/walker_scheme/test_walker.py +++ b/walker_scheme/test_walker.py @@ -1,8 +1,8 @@ from walker import Walker -test = Walker([("a", 0), ("b", 1)]) def test(): + test = Walker([("a", 0), ("b", 1)]) rand = test.get_random() assert rand == 1 From cff9b39802ab9aafd4631a5157410567e72158eb Mon Sep 17 00:00:00 2001 From: Andrew-Kochanov Date: Mon, 15 Dec 2025 15:37:08 +0300 Subject: [PATCH 4/5] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B8?= =?UTF-8?q?=D0=BB=20=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=20=D0=BE=D1=88=D0=B8?= =?UTF-8?q?=D0=B1=D0=BA=D0=B8,=20=D1=87=D1=82=D0=BE=20=D1=81=D1=83=D0=BC?= =?UTF-8?q?=D0=BC=D0=B0=20=D0=B2=D0=B5=D1=80=D0=BE=D1=8F=D1=82=D0=BD=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D0=B5=D0=B9=20=D0=BD=D0=B5=20=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BD=D1=83=D0=BB=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- walker_scheme/walker.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/walker_scheme/walker.py b/walker_scheme/walker.py index 0ced5f4..1726746 100644 --- a/walker_scheme/walker.py +++ b/walker_scheme/walker.py @@ -5,8 +5,7 @@ class Walker: def __init__(self, probabilities: list[tuple[str, float]]): self.probabilities = sorted(probabilities, key=lambda x: x[1]) self.probabilities_walker = [[self.probabilities[i][0], 1 / len(self.probabilities)] for i in range(len(self.probabilities))] - - summa = [probabilities[i][1] for i in range(len(probabilities))] + summa = sum[probabilities[i][1] for i in range(len(probabilities))] if summa != 1: raise ValueError('Сумма вероятностей не равна единице') From 6e33505aaf19c647998ed6d983e132165dcfdccc Mon Sep 17 00:00:00 2001 From: Andrew-Kochanov Date: Mon, 15 Dec 2025 15:40:28 +0300 Subject: [PATCH 5/5] =?UTF-8?q?=D0=9E=D0=BF=D1=8F=D1=82=D1=8C=20=D0=B8?= =?UTF-8?q?=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- walker_scheme/walker.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/walker_scheme/walker.py b/walker_scheme/walker.py index 1726746..0cdbc74 100644 --- a/walker_scheme/walker.py +++ b/walker_scheme/walker.py @@ -5,7 +5,7 @@ class Walker: def __init__(self, probabilities: list[tuple[str, float]]): self.probabilities = sorted(probabilities, key=lambda x: x[1]) self.probabilities_walker = [[self.probabilities[i][0], 1 / len(self.probabilities)] for i in range(len(self.probabilities))] - summa = sum[probabilities[i][1] for i in range(len(probabilities))] + summa = sum(probabilities[i][1] for i in range(len(probabilities))) if summa != 1: raise ValueError('Сумма вероятностей не равна единице')